ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

循环架构大揭秘:Dory1.0-4B 的 normalized-GPT 与混合注意力如何炼成 256K 长上下文

循环架构大揭秘:Dory1.0-4B 的 normalized-GPT 与混合注意力如何炼成 256K 长上下文
  • 人工智能
  • 大模型
  • 推理模型
  • 模型量化

【免费下载链接】NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8

项目地址:https://ai.gitcode.com/hf_mirrors/nvidia/NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8
点击查看免费下载

NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8 是 NVIDIA 推出的循环(latent-recurrent)大模型:仅 4B 参数,却凭借 normalized-GPT 架构、混合注意力机制与可调节的循环层数,实现 256K 长上下文与"弹性"推理算力。这篇文章带你快速看懂 Dory1.0-4B 的架构设计、注意力机制与部署要点。

什么是"循环架构"(Looped LM)?

传统 Transformer 是"一次性"的:Token 从底层走到顶层,每层只经过一遍。而 Dory1.0-4B 采用了共享层循环的思路:模型层栈被划分为 Input、Recurrent 和 Output 三组,中间的 Recurrent 块会被重复执行多次,并且在每一轮循环中重新注入原始输入。

上图展示循环次数对模型综合能力(AA v4.3.2 估计分)的影响:k=1 得 13.8 分,k=2 跃升至 17.7,k=4 达到 18.4,超过多个数倍参数量的模型。

这种设计的核心收益是用计算换智能:参数不变,但每个 Token 经过的网络深度成倍增加。更妙的是——循环次数在推理时可调,无需重新训练、无需换模型:

循环次数适用场景
1 次追求最低单 Token 算力开销
2 次(默认)准确率与算力的最佳平衡点
4 次优先准确率,尤其适合 SWE-bench、Terminal-Bench 等 Agent 任务

官方建议默认从 2 次循环起步,因为大部分精度收益来自第二次循环,之后的边际收益递减。

解剖 normalized-GPT 骨干:4B 参数、72 层结构

查看 config.json 可以看到 Dory1.0-4B 的"身体骨架":

  • hidden_size 2560:隐藏层维度
  • num_hidden_layers 72:总层数 = 16(Input)+ 40(Recurrent 共享块)+ 16(Output)
  • num_attention_heads 16 / num_key_value_heads 4:GQA 分组注意力,KV 头只有 Q 头的 1/4,显著压缩 KV 缓存
  • n_recurrent_loops: 2:默认循环 2 次,即每个 Token 实际经过 16 + 40×2 + 16 =112 层计算
  • ngpt_alpha_init 0.05:normalized-GPT 骨干的归一化初始化参数

这里的normalized-GPT(nGPT)是 NVIDIA 提出的归一化 GPT 骨干:通过更稳定的归一化方式提升深网训练稳定性,并且 Dory 是原生在 NVFP4 4-bit 精度下预训练(前 ~4.5T Token),再切到 BF16 继续训练——这为后续 8-bit 的 MXFP8 量化版本打下了精度基础。

混合注意力:滑动窗口 + 全注意力如何分工?

打开 config.json 中的layer_types字段,会发现一个清晰的间隔混合模式:每 4 组"注意力层 + MLP 层"里,前 3 组是sliding_attention(滑动窗口注意力),第 4 组是full_attention(全注意力),周而复始。

两者还配了不同的 RoPE 频率(rope_parameters):

  • 滑动窗口层:rope_theta 10000,窗口大小1024(sliding_window: 1024)——负责捕捉局部、细粒度的语义
  • 全注意力层:rope_theta 10000000——超大的旋转位置编码基频,专门为了支撑超长上下文的远距离依赖

这个"3:1 混合"设计的意义在于:大部分层只看 1024 窗口,KV 缓存开销极低;每隔几层插入一次全注意力,负责把长程信息"接力"传递。再加上循环机制让全注意力层被重复执行,局部信息得以跨轮次逐层聚合——这正是 Dory1.0-4B 能用较小参数规模稳定处理 256K 上下文的关键。

循环 + KV 缓存:last-loop 模式

普通循环模型每增加一次循环就要多存一份 KV 缓存,显存随循环数线性膨胀。Dory1.0-4B 支持last-loop KV caching(recurrent_kv_cache_mode: "last_loop"):每个循环注意力层只保留一份缓存,后续循环直接覆写。这样无论循环几次,KV 缓存占用都与 1 次循环相同——给 256K 长上下文和高并发留足了显存。

循环越多,生成的 Token 越少

循环带来的第二个惊喜是Token 效率:额外的每 Token 算力被花在"隐空间里的深度思考",而不是更长的输出上。

如上图所示,相比 1 次循环(k=1),4 次循环在 Terminal-Bench 2.1 上输出 Token 减少到0.50 倍,GDPval-AA-V2 上更是低至0.40 倍——同样答对题目,生成的文字少了一大半,端到端延迟和成本随之下降。

256K 长上下文与 MXFP8 量化部署

  • 训练配方:预训练 6T Token(前 ~4.5T 用 NVFP4,其余 BF16),再用300B Token 专门做上下文扩展至 256K
  • 位置上限:max_position_embeddings: 262144(见 config.json)
  • 本仓库版本:MXFP8 量化(W8A16),权重组大小为 32(group_size: 32),词表 131072,完整权重在 model.safetensors
  • 采样建议:Temperature 1.0、Top_P 0.95(见 generation_config.json)
  • 模型提供 BF16 / MXFP8 / NVFP4 / GGUF(Q5_K_M)多种格式,本仓库为 MXFP8 版,在 DGX Spark 上比 BF16 快约1.7×

部署上,vLLM 可通过--max-model-len 262144启用完整 256K 上下文,并用--hf-overrides '{"n_recurrent_loops": 2, "recurrent_kv_cache_mode": "per_loop"}'调整循环数与 KV 缓存模式;llama.cpp 则通过--override-kv "dory.num_loops=int:2"设置。完整的启动命令与 Apple Silicon 构建流程详见 README.md 的 Quick Start Guide,对话模板由 chat_template.jinja 提供(支持工具调用与推理链解析)。

总结:为什么值得关注

  1. 参数效率:4B 参数 × 2 次循环 ≈ 等效 112 层深度,综合能力逼近数倍参数量的模型
  2. 弹性算力:1/2/4 次循环按需切换,一个 Checkpoint 适配不同算力预算
  3. 长上下文:滑动窗口与全注意力混合 + 超大 RoPE 基频 + 300B Token 上下文扩展训练,稳定支持 256K
  4. 工程友好:last-loop KV 缓存消除循环显存膨胀,MXFP8/NVFP4 低精度部署开箱即用

如果你想深入理解细节,建议对照 README.md 的 Model Design 与 Benchmark 章节,以及 config.json 中的layer_types、rope_parameters字段逐一验证本文提到的架构细节。

  • 人工智能
  • 大模型
  • 推理模型
  • 模型量化

【免费下载链接】NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8

项目地址:https://ai.gitcode.com/hf_mirrors/nvidia/NVIDIA-Nemotron-Labs-Dory1.0-4B-MXFP8
点击查看免费下载

相关推荐

上一篇:CC Switch v3.19.1 技术解析:DeepSeek 等三家中国 Codex 网关直连、官方模型目录镜像与四项关键缺陷修复
下一篇:Betterfox终极指南:让你的Firefox浏览器速度提升31%的完整教程 🚀

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进