ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

3.84 亿行 Embedding 的存法大揭秘:DeepSeek-V4.1-Flash-w8a8 的 Engram 机制深度剖析

3.84 亿行 Embedding 的存法大揭秘:DeepSeek-V4.1-Flash-w8a8 的 Engram 机制深度剖析 3.84 亿行 Embedding 的存法大揭秘DeepSeek-V4.1-Flash-w8a8 的 Engram 机制深度剖析【免费下载链接】DeepSeek-V4.1-Flash-w8a8项目地址: https://ai.gitcode.com/Eco-Tech/DeepSeek-V4.1-Flash-w8a8如果你听说过 DeepSeek-V4.1-Flash-w8a8一定也好奇一个语言模型为什么要内置3.84 亿行的 Embedding 表这些 Engram 向量究竟是怎么压缩、量化和分片存储的本文带你从仓库里的 config.json 和 Aurora_best_practice.yaml 出发用最少的大白话讲清楚这套 Engram 机制的存法全貌。先搞清楚Engram 是什么把大模型想象成一个大脑Embedding 层就是它的记忆词典。DeepSeek-V4.1-Flash 在这个词典里塞进了两组超大词表模块行数每行维度BF16 占用layers.1.engram.embed384,006,168256≈ 196.5 GBlayers.14.engram.embed384,016,682256≈ 196.5 GB合计约3.84 亿行。这些数字不是拍脑袋的而是写在 config.json 的engram_layer_ids与engram_num_embeddings字段里并配套了engram_max_ngram_size: 4最长 n-gram 长度为 4、engram_vocab_size: 160000001600 万词表等参数。换句话说模型用最多 4 个词的组合去查一张 1600 万行的哈希表命中的 n-gram 映射到上亿行的存储槽位每个槽位取出一行 256 维向量8 头 × 每头 256 维再经过 gate 门控注入残差流。这就是 Engram 的查表式记忆。 对新手的一句话解释普通的 token embedding 只有 12.9 万行vocab_size: 129280而 Engram 是按词组索引的外部记忆容量大了 3 个数量级所以怎么存它成了整个仓库的核心问题。核心存法FP8 源格式 → 直接解码 BF16这份仓库最反直觉的一点Engram 表没有走 INT8 量化而是直接从原始的 FP8 格式解码成 BF16 保存。具体来说源数据是FP8 E4M3数字 每 32 个元素一组group32的UE8M0缩放因子。制作流程把它们一步解码为 BF16以完整张量layers.1.engram.embed.weight、layers.14.engram.embed.weight的形式落盘不经过 INT8 中转也没有 embedding quant scale、.parts.*分片或 compressed-tensors 配置。这一点在 README.md 开头就有明确说明。为什么这么做省一次精度损失FP8 → INT8 再 → 浮点等于双重有损压缩直接 FP8 → BF16 只损失一次。加载更简单推理端拿到就是标准 BF16 张量loader 想直接加载就加载想按块转成 INT8 缓存也行由 vLLM 运行时配置engram_storage、engram_load_dtype决定不写入 checkpoint。制作方案本身记录在 Aurora_best_practice.yaml 的engram段指定第 1、14 两层、dtype: int8运行时可选、rows_per_chunk: 1048576每块 104.8 万行便于分块 IO、fold_value_rotation: true提前折叠 V 旋转下一节细说。旋转合同V 向量预旋转K 和 gate 保持原样量化模型里有个经典难题W8A8 量化前通常要做 QuaRot 旋转见 optional/quarot.safetensors 保存的 global/query 旋转矩阵。Engram 的 V 向量也在这套旋转体系里但它的合同很讲究完整约定在 config.json 的engram_rotation_configvalue_projection_rotated: true——V 的最后 5120 行已经折叠了Q.T Wv直接输出旋转基底下的 Vvalue_basis: quarot_global—— V 使用 QuaRot 全局旋转基底key_and_gate_basis: original—— K 与 gate 保持原模型基底gate 输入仍按h_rot Q.T恢复runtime_delta_rotation: false—— 运行时禁止再对增量乘一次 Q。推理时的残差更新公式因此简化为h_rot gate * v_rot。把旋转提前折叠进权重等于把每次查表后的一次矩阵乘法省掉了——这对动辄上亿次查表的 Engram 来说是实打实的性能优化。源格式描述与完整性校验想知道每张表出厂是什么格式看 quant_model_description.json 里的optional.embedding_storageversion 2每个layers.N.engram.embed模块都会记录format: bf16、weight_dtype: BF16、weight_shape: [rows, 256]、layout: row_major且没有 scale 字段BF16 是定长浮点不需要缩放因子。配套的物理文件一目了然权重engram_embed_weight_l1.safetensors、engram_embed_weight_l14.safetensors源格式 scale 描述engram_embed_scale_l1.safetensors、engram_embed_scale_l14.safetensors主干 272 个量化分片则由 quant_model_weights.safetensors.index.json 索引如quant_model_weights-00001-of-00272.safetensors量化方式为quant_method: ascend、W8A8_DYNAMIC见 config.json。拿到手之后三步验收流程 这份导出的出厂证明是 aurora_export_manifest.json记录了分片与元数据的 SHA256、实际配置、源码与运行环境。仓库给出的验收路径全量回读检查运行python -m msmodelslim.model.aurora.integrity --output /path/to/Aurora-W8A8核对清单内所有分片看源格式描述确认embedding_storage中weight_shape行数与config.json的engram_num_embeddings一致确认运行合同核对engram_rotation_config四项保证推理端不会重复旋转 V 增量。⚠️ 注意两点完整性检查 PASS 只说明文件没坏不代表数值精度已验收权重转换与推理适配是独立验收项详见 README.md。小结为什么这套存法值得学DeepSeek-V4.1-Flash-w8a8 的 Engram 机制给超大 Embedding 的存储工程打了个样源格式直解FP8 group scale 一步解码 BF16绕开 INT8 二次有损元数据自描述每个模块的格式、形状、布局都写进quant_model_description.json推理端零猜测旋转预折叠把Q.T Wv提前吸收进权重查表后省一次矩阵乘分块友好rows_per_chunk104.8 万行配合 2GB 普通分片上限ordinary_target_shard_bytes: 2147483648加载与校验都能并行。对想部署或研究超大词组记忆的工程师来说这份仓库就是一个可以逐字段对照的超大 Embedding 量化存储参考实现。【免费下载链接】DeepSeek-V4.1-Flash-w8a8项目地址: https://ai.gitcode.com/Eco-Tech/DeepSeek-V4.1-Flash-w8a8创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

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