- 大模型
- 基础模型
- 多模态
- 模型量化
- DeepSeek
【免费下载链接】DeepSeek-V4.1-Flash-NVFP4
DeepSeek-V4.1-Flash-NVFP4 是 NVIDIA 用 Model Optimizer 对 DeepSeek-V4.1-Flash 做 NVFP4 量化后的开源多模态 MoE 模型。它的总参数构成里藏着一个"196B 的秘密"——Engram 条件记忆:两张近 4 亿行的 n-gram 哈希查表,让模型在 8B/16B 的激活参数之外,凭空多出一块 196B 的外部记忆。本文带你从零看懂它的原理、量化与部署方法。
参数账本:196B Engram 条件记忆从哪来
先看这张模型的"体检表"(数据来自 config.json):
| 组成 | 规模 | 说明 |
|---|---|---|
| MoE 主干 | 552B 总参数 | 40 层 × 384 个路由专家,每 token 只激活 6 个 |
| 激活参数 | 8B (prefill) / 16B (decode) | 典型 MoE 稀疏激活 |
| Engram 条件记忆 | 约 196B | 位于第 1、14 层(engram_layer_ids: [1, 14]) |
196B 不是算出来的估值,而是实打实的查表:
384,006,168 行 × 256 维 ≈ 98.3B (第 1 层) 384,016,682 行 × 256 维 ≈ 98.3B (第 14 层) 合计 ≈ 196.6B也就是说,模型每处理一个 token,都会去这两张"近 4 亿行"的大表里查几次,把查到的向量当作条件记忆注入到主干的残差流中——查表即记忆,这正是 Engram("engraving,刻痕")名字的由来。
原理拆解:n-gram 哈希查表如何工作
核心实现集中在 inference/engram.py,整个流程可以拆成 4 步。
第 1 步:压缩词表——让 "The"、"the"、"THE" 殊途同归
模型原始词表有 129,280 个 token,但 Engram 并不直接用原始 id。build_compressed_token_map() 会先对每个 token 的文本做一串归一化:
NFKC → NFD → 去音调符号 → 转小写 → 合并空白 → 去首尾空白
归一化后完全相同的 token 会折叠到同一个新 id,最终得到一张99,092 大小的"压缩词表"(engram_compressed_vocab_size: 99092)。这样做的好处:大小写、音调、多余空格差异都不再影响哈希," The" 和 "the" 查到的是同一行记忆。
第 2 步:滚动 XOR 哈希——一个位置同时查 3 种 n-gram
engram_max_ngram_size: 4,意味着对序列中的每个位置,要向前回看 3 个 token,分别构造2-gram、3-gram、4-gram三种片段,各自算一个哈希 id:
- 乘子:每个"层 × 回看步数"组合都有一个奇数乘子,由 compute_hash_multipliers() 用"压缩词表大小"派生,保证不溢出 int64;
- 滚动异或:
hash(3-gram) = hash(2-gram) XOR (t_i × multiplier),逐步滚动,一次算完 3 个哈希; - 素数分桶:每个"n-gram 大小 × head"(共 3 × 8 =24 列)都有自己一段互不重叠的素数模数桶区,由 EngramLayout.from_args() 从
engram_vocab_size: 16000000起依次"领用"互不重复的素数,天然减少哈希碰撞; - 图片不参与:图像 token 被标记为 DEAD(-1),n-gram 遇到它即截断,保证哈希永远不跨越图像片段。
第 3 步:24 行查表 + 张量并行切分
拿到的 24 个哈希 id 会各自取出 256 维向量。3.84 亿行的表太大放不进单卡,ParallelEngramEmbedding 按行切分到各 TP rank:只查本地行,越界的行补零,最后all_reduce汇总。查表精度上,表中数据以 MXFP4 存储(后文详述),取出时先反量化到 bfloat16 再参与计算。
第 4 步:门控注入——记忆"按需生效"
查到的记忆不是无条件相加,而是经过一层门控(Engram):
- 24 × 256 的查表结果经
wkv投影为 4 份 key(对应 Hyper-Connections 的 4 份副本)+ 1 份共享 value; - 门控值 = 残差流与 key 的归一化点积 → 带符号开方 → sigmoid:当当前上下文和这段记忆"越相关",门开得越大,注入越多;
- 最终输出
h + gate × value,门为 0 时该位置原样通过。
一句话总结:n-gram 哈希决定"查什么",门控决定"用多少"。这就是"条件记忆"四个字的含义——记忆只在条件匹配时被唤醒。
MXFP4 量化:196B 记忆被压缩近一半
NVFP4 量化(hf_quant_config.json)对两部分做了不同处理:
| 部分 | 转换 | 精度损失 |
|---|---|---|
384 专家 × 40 层的w1/w2/w3 | MXFP4 →NVFP4(W4A4,group 16) | 无损(16,986,931,200 个权重块全部无损通过) |
Engram 查表(第 1、14 层engram.embed) | FP8 →MXFP4(E2M1 两值打包 1 字节 + 每 32 元素一个 UE8M0 缩放) | 有损(约 12% 相对 L2 误差) |
这个取舍非常"懂行":MoE 专家对精度敏感,走无损转换;而 Engram 表本身就是查表,允许一定量化误差。收益立竿见影:
- Checkpoint 体积:约 476 GiB → 492 GiB(NVFP4 专家)→约 400 GiB(MXFP4 Engram 表,48 个 safetensors 分片);
- 推理时 Engram 表放在固定主机内存(vLLM 默认),TP=4 下每 rank 占12.2 GiB,比 FP8 版的 23.6 GiB 省近一半。
config.json中的quantization_config记录了这些细节:engram_embed_quant: "mxfp4"、engram_embed_block_size: 32、engram_embed_layers: [1, 14]。
快速部署:vLLM 与 SGLang 怎么选
模型要求NVIDIA Blackwell(GB300)+ Linux,推荐 TP=4 四卡部署、上下文拉满 1,048,576 token。
⚠️ 版本注意:当前版本的 MXFP4 Engram 表需要带相应支持的 vLLM 构建;标准 vLLM 镜像加载不了 MXFP4 Engram 表,可加--revision 3431dde3247c13b5957f682b1e3c6fcae2566079回退到 FP8 Engram 的旧版本。SGLang 目前仅支持该旧版本。
vllm serve nvidia/DeepSeek-V4.1-Flash-NVFP4 \ --tensor-parallel-size 4 \ --tokenizer-mode deepseek_v41 \ --reasoning-parser deepseek_v41 \ --max-model-len 1048576 \ --enable-chunked-prefill除了生产级部署,仓库还自带一份可读的参考实现,适合想抠原理的新手:
- inference/README.md:从权重转换到本地跑通的最小流程
- inference/engram.py:Engram 哈希状态机与布局
- inference/model.py:查表模块与门控注入
- inference/convert.py / inference/generate.py / inference/run.sh:转换、生成交互入口
- encoding/README.md + encoding/encoding.py:V4.1 提示词格式(工具调用、思考模式、数值推理预算 1–100、图文交错)
- inference/examples/example_harmony.json:图文交错的示例输入
效果如何:量化不降智,查表不掉点
官方在 GB300 + vLLM 上测的六个基准(%):
| 精度 | GPQA Diamond | AA-LCR | SciCode | IFBench | MMMU-Pro | Terminal-Bench 2.1 |
|---|---|---|---|---|---|---|
| MXFP4(源模型) | 91.035 | 78.563 | 54.401 | 76.667 | 74.046 | 81.60 |
| NVFP4 + MXFP4 Engram | 90.783 | 79.562 | 53.994 | 77.867 | 74.566 | 81.88 |
可以看到:NVFP4 量化 + MXFP4 Engram 表整体与源模型基本持平,甚至 AA-LCR(长上下文回忆)、IFBench、Terminal-Bench 略有反超——有损压缩的 Engram 记忆并没有拖累能力,这正是"查表即记忆"设计的成功之处。
总结:一图记住 196B 的秘密
输入 token │ 归一化 → 99,092 压缩词表 ▼ 每个位置算 2/3/4-gram 的滚动 XOR 哈希 → 24 个桶 id │ 素数模数分桶,图片 token 不参与 ▼ 查第 1、14 层各约 3.84 亿行 × 256 维的 MXFP4 大表 │ TP 按行切分,查完 all_reduce ▼ wkv 投影出 key/value → 门控(归一化点积 + 带符号 sqrt + sigmoid) ▼ h + gate × value:条件匹配的记忆注入残差流 ✅- 为什么叫 196B:两层 3.84 亿行 × 256 维的哈希表 ≈ 196B 参数,占了模型总参数的大头,但推理时激活量几乎不变;
- 为什么用 n-gram 哈希:把"见过这段短语"直接映射为一次内存查找,把长程记忆从"算出来"变成"查出来",成本低、上限高;
- 为什么 NVFP4:专家权重无损量化到 4-bit,Engram 表有损压到 MXFP4,整体 400 GiB 即可落盘,四张 GB300 就能喂饱一个 750B 级的多模态 MoE 模型。
想亲手验证?按 inference/README.md 跑一遍python model.py自测(prefill + 22 步 decode),再跑 inference/examples/example.txt 与 inference/examples/example_harmony.json 两个等价示例,就能把 Engram 条件记忆的每个环节走一遍。🚀
- 大模型
- 基础模型
- 多模态
- 模型量化
- DeepSeek
【免费下载链接】DeepSeek-V4.1-Flash-NVFP4
相关推荐
DeepSeek-V4.1-Flash-1017 Engram机制揭秘:n-gram哈希查表如何为模型注入记忆
DeepSeek V4.1 Flash 1017 Engram机制揭秘:n gram哈希查表如何为模型注入记忆 DeepSeek V4.1 Flash 1017
人工智能大模型基础模型多模态DeepSeek模型量化DeepSeek-V4.1-Flash-Quark-MXFP4的外挂记忆:Engram n-gram哈希查找机制逐行解析
DeepSeek V4.1 Flash Quark MXFP4的外挂记忆:Engram n gram哈希查找机制逐行解析 DeepSeek V4.1 Flash
大模型模型量化多模态解析DeepSeek-V4.1-Flash-Quark-PTPC-FP8的Engram机制:3.8亿n-gram哈希记忆表如何加速推理
解析DeepSeek V4.1 Flash Quark PTPC FP8的Engram机制:3.8亿n gram哈希记忆表如何加速推理 DeepSeek V4.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考