英伟达循环模型实测:Dory 1.0-4B 三档循环,10 项基准对比 Qwen3.5

本地跑模型的都踩过同一个坑:4B 上下的权重,一张入门显卡就放得下,可一干正经活就露怯,写代码、上终端、跑多步任务都不太撑得住;想往上走 27B、35B,显存又直接见底。摆在你面前通常就两条路------加预算买卡,或者换个更大的权重,再顺带接受慢一点的推理速度。

10 月 16 日英伟达开源的 Dory 1.0-4B,给了第三条路:权重还是 4B 不动,让模型把同一段网络"多跑几圈",用算力去换精度。同一个 checkpoint,服务端改一个参数就能在 1 圈、2 圈、4 圈之间切,不用重新训练,也不用换模型文件。这篇我把它的 10 项官方基准摊开,和 Qwen3.5、Gemma 4 摆在一起,看循环架构到底能不能让一个小模型打穿自己的体重级。

一句话讲清"循环"是怎么回事

常规的 4B 稠密模型,每个 token 固定经过一层层各不相同的网络,出来就完事,算力是死的。Dory 的层被拆成三组:Input 块(8 层)先吃原始 token,中间是占了大头的 Recurrent 块(20 层),最后 Output 块(8 层)把隐层表示换成预测。

关键就在中间那块:它会被反复执行------跑 1 遍、2 遍、4 遍都行。而且每一圈都会把原始输入重新注入,不是只从衰减过的内部状态接着算,所以每一圈都能重新"看"到源上下文,而不是越循环越糊。参数总量一直是 4B 不变,变的只有每个 token 摊到的算力。

这个"循环圈数"是个运行时旋钮,不是训练时定的。这也是它和"把 transformer 层简单垒更多"的本质区别:传统做法是参数和算力一起涨,Dory 是参数据定、只涨算力,等于用一份权重买了三档延迟预算。官方基准表里,同一个模型因此被拆成三列:1 loop、2 loops、4 loops。

三档循环到底赚了多少

先把总表放前面,这是官方模型卡里的数据,我原样搬过来,只加了几列解读:

基准 Dory 1圈 Dory 2圈 Dory 4圈 Qwen3.5-4B Qwen3.5-9B Gemma4 26B A4B Qwen3.6-35B-A3B
SWE-bench Verified 50.3 59.5 61.8 54.7 61 57.4 73.4†
Terminal-Bench 2.1 12.5 18.1 22.2 15 24 35 43
τ³-bench(银行) 11.6 12.89 14.69 5.03 7.22 13.66 9.54
GDPval-AA-V2 Elo 815 946 967 424 546 751.6 987
SciCode 27.3 34.94 35.11 25.82 28.21 40.32 37.24
IFBench 74.29 77.94 79 53.83 59 77.89 57.44
AA-LCR(长文) 63 71 73 64.7 68.4 64.6 68.5
GPQA Diamond 69.19 72.41 72.16 77.71 80.93 80.43 85.35
HLE(纯文本) 8.25 10.89 10.43 11.31 15.43 17.79 19.18
AA-Omniscience 10.03 10.08 10.03 15.02 18.05 21.13 19.95

†:Qwen3.6-35B-A3B 的 SWE-bench 分数是官方在自带配置下给出的口径。

乍看能读出两件事。其一,加圈确实在涨,但涨得越来越慢:SWE-bench 从 1 圈的 50.3 到 2 圈 59.5,一口气加 9.2 分;再到 4 圈 61.8,只多挣 2.3 分。其二,收益分配严重不均------编码和 Agent 类任务涨得最多,纯知识类的 GPQA、Omniscience 基本原地踏步,甚至 2 圈到 4 圈还小幅回落(72.41 掉到 72.16)。

英伟达官方给的用法也是这个思路:默认 2 圈,只有在终端操作、软件工程这类吃算力的 Agent 任务上才值得上 4 圈。别把加圈当成无脑的免费午餐,它是在拿延迟换精度,值不值要看具体负载,官方反复提醒"按自己的负载实测端到端延迟"。

如果只想用一条线看懂这个规律,看 GDPval-AA-V2 那行 Elo 最清楚:1 圈 815,2 圈 946,4 圈 967。从 815 到 946 是质变,从 946 到 967 是精修。这条"第二圈吃到最大红利、之后收窄"的曲线,几乎覆盖了表里所有 Agent 类任务,也是你选 2 圈还是 4 圈时最该记在心里的一个形状。

顺带说一句它和英伟达自家 Nemotron 3.5 家族的区别。10 月中的那三款(Super VL 120B、Bolt 74B-A9B、Comet 60B)走的还是传统 MoE/稠密路线,靠稀疏激活降算力;Dory 是 Nemotron Labs 单独放出来的一条循环路线,专门验证"小参数 + 可调算力"这个假设。两者不是替代关系,倒像是同一家公司在本地模型带里下的两注不同的注。

循环的真实代价:真不一定只是"变慢"

有个反直觉的点值得单独展开。加圈确实让每个 token 的算力翻倍,但官方报告里还有个数据:循环圈数越多,模型解决同一个任务时生成的输出 token 反而越少------额外的"思考"发生在隐层空间里逐圈进行,而不是写成一长串可见的推理文字。

所以总延迟不是简单的"圈数 × 单圈时间",而是"更多单圈算力"和"更少输出 token"两个方向在互相抵消。最终会不会更慢、更贵,全看任务类型和推理栈的实现,这也是为什么不能拍脑袋认定圈数越多越好。对高频小任务,1 圈的省算力优势可能比 4 圈的精度更香;对一次性长链路任务,4 圈多花的算力可能被少生成的 token 找回来。

还有个工程坑被顺手填了:KV cache。朴素的循环注意力实现里,每圈都要自己的一份 KV cache,跑 4 圈内存就涨 4 倍,256K 长上下文根本伺候不起。Dory 给了 last-loop 缓存模式------每个循环注意力层只留一份 cache,每圈直接覆盖上一圈,内存占用稳定在一圈的规模。官方称精度和 per-loop 模式几乎一致、输出长度也基本不变,等于免费把循环的精度收益拿到手,还不付内存税,省下的显存还能拿去开更长的上下文或更多并发。

部署试跑:vLLM 和 llama.cpp 都能接

权重给了四种格式:BF16、MXFP8、NVFP4,外加一个 Q5_K_M 的 GGUF 量化版。vLLM 支持还在 PR 里(vllm-project/vllm#60149),要从那个 PR 拉源码装:

复制代码
VLLM_USE_PRECOMPILED=1 pip install "git+https://github.com/vllm-project/vllm.git@refs/pull/60149/head"

vllm serve --model nvidia/NVIDIA-Nemotron-Labs-Dory1.0-4B-BF16 \
  --hf-overrides '{"n_recurrent_loops": 2, "recurrent_kv_cache_mode": "per_loop"}' \
  --max-model-len 262144 \
  --reasoning-parser nemotron_v3

n_recurrent_loops 就是那个旋钮,改成 1 或 4 就切档。本地 macOS 想跑,走 llama.cpp 那条 PR(ggml-org/llama.cpp#30306),下好 GGUF 后:

复制代码
./build/bin/llama-server -m ./dory-q5_k_m.gguf --alias dory \
  --host 127.0.0.1 --port 8080 -ngl 999 \
  --ctx-size 4096 --jinja --reasoning on \
  --override-kv "dory.num_loops=int:2,dory.recurrent_kv_cache_mode=str:last_loop"

起来之后就是一套 OpenAI 兼容接口,dory.num_loops 能在 1、2、3、4 之间切,recurrent_kv_cache_mode 换成 last_loop 就把内存压回一圈的规模。调用端完全是标准写法:

复制代码
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="EMPTY")
resp = client.chat.completions.create(
    model="dory",
    messages=[{"role": "user", "content": "写一个 Python 快速排序"}],
    max_tokens=16000,
)

这个模型是原生 NVFP4(4-bit 浮点)预训练、再转 BF16 续训的。直接在 4-bit 格式上开训本来就比训完再量化难稳定,但好处是省训练算力和内存,这份底子在牌桌上还换来个意外优势:DGX Spark 上 MXFP8 相对 BF16 有 1.69 到 1.84 倍加速,NVFP4 有 2.17 到 2.44 倍,小卡部署时这个差距挺实在。

上手前有几样东西最好自己先核实,别直接抄了表就上生产。一个是 loop 档位对延迟的真实影响:官方只给了相对趋势,你的 GPU、batch、上下文长度下的实际曲线得自己量。二是 GGUF 那个文件是 Q5_K_M 量化,而上面整张基准表全是在 BF16 上跑的,量化版精度掉多少官方没单独给数,不能拿表里的分去套量化版。三是推理习惯:官方建议 temperature 1.0、top_p 0.95,而且推理模式(reasoning)常开,采样参数照抄,别自己关掉推理开关再抱怨它不如预期。

谁强谁弱,得看任务下菜

把表拆成两类看,Dory 的画像很清晰。在 Agent 和指令遵循那块它是真的能打:4 圈 SWE-bench 61.8,压过 4B 的 Qwen3.5(54.7),打平了 9B 的 Qwen3.5(61);τ³-bench 银行任务 14.69,全场最高,连 35B 的 Qwen3.6(9.54)都被甩开;IFBench 79 更是远远超出 Qwen3.5-4B 的 53.83。这个组合拳说明:循环架构对"需要多步结构化推理、指令严格遵循"的任务加成最大。

反过来,在广撒网的知识和纯推理上,它露了怯:GPQA Diamond 只比 4B 的 Qwen3.5 低一点点,但被 9B、26B、35B 一路拉开;HLE 和 AA-Omniscience 也是全面落后。这个格局很合理------循环再多次,也"想"不出参数里根本没有的知识储备,它擅长的是把已有的推理能力在结构化任务上反复打磨,最怕的是那种"翻字典"式的知识问答。

还有个第三方视角值得记一笔。有评测方指出,英伟达这张对比表用的是 Qwen3.5、Gemma 4 这些上一两代型号,自始至终没有和当前的 Qwen3.8 正面交锋。对一个 4B 模型拿 Qwen3.8-27B(七倍体量)比确实不公平,但也意味着"同代对位"这块数据是空白的,你真要拿来上生产,得自己跑一遍当前这批对手。另外注意它的两个边界:纯文本、英文为主,中文和多模态不在它的射程内。

选型建议

  • 跑纯文本、英文为主、Agent 型任务(终端、代码、多步工具调用)------这种"算力可调"的小模型命中率最高,任务高峰期开 4 圈、闲时降回 1 圈省算力,是一张卡能玩出的少见的弹性。
  • 需要中文、多模态,或高频事实问答------它不是那块料,回头选 Qwen、Gemma 那类更均衡的权重。
  • 在乎许可证:它挂的是 OpenMDW-1.1 自定义协议,不是 Apache 2.0,商用前得让法务过一眼,别当普通开源权重直接拿去卖钱。
  • 在乎开箱即用:vLLM 和 llama.cpp 目前都要走 PR 分支编译,离正式 release 还有一步,嫌麻烦就再等等官方合并。

最后说一句趋势层面的判断:MoE 用"稀疏激活"降本,量化用"低精度"降本,循环架构走的是第三条路------参数量恒定、算力弹性伸缩。三者在同一个 4B 到 30B 的本地部署带里彼此错位,互相不替代。往后的本地模型选型,会越来越像个"按负载调算力预算"的工程活,而不是简单的"哪个模型分高买哪个"。

延伸阅读:54GB 压到 7.89GB:Saluki 27B 2-bit 量化本地部署教程

迷你模型价格战开打:Haiku 5.5 对比 4 款轻量档

📌 系列文章

测了 4 款模型才发现差距这么大。关注我 👆 第一时间获取更多 AI 工具深度横评。

相关推荐
灵感__idea2 小时前
Claude Code 编程实战:外行人第一次可以独挑大梁
ai编程·claude·cursor
程序员老刘3 小时前
Flutter版本选择指南:3.44稳定了11周正式转正 | 2026年10月
flutter·ai编程·客户端
yz_aiks3 小时前
Claude Code Mods 开发教程:写一个拦截危险 SQL 和发布命令的插件
ai编程·开发工具·插件开发·mcp·claude code
小虎AI生活3 小时前
Kimi K3.1 Pro 降价 35% 实测拆解:API 接入三步走与暗坑清单
aigc·ai编程
隐形蓝海5 小时前
Qoder CN 每天 100 Credits 领不到,我把客户端扒了一遍
ai编程
郝琳6 小时前
Agent 自动改代码的四道闸,可执行验证、变更窗口、回滚判据与权限分级
ai编程
ddshub_cc6 小时前
Claude Code 接入 DDS Hub:Windows/macOS 配置、验证与报错排查
windows·macos·ai编程·claude·codex·ai模型·aiapi
郝琳6 小时前
真实 flaky 18.3%,CI 报 0%,让 Agent 修测试,它删掉了被测的变量
后端·ai编程
kyle~6 小时前
MCP(Model Context Protocol)
人工智能·ai·ai编程·mcp