ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

DeepSeek-V3-W4A8-Pruing权重文件怎么读?safetensors三分片结构与index索引完全解析

DeepSeek-V3-W4A8-Pruing权重文件怎么读?safetensors三分片结构与index索引完全解析

【免费下载链接】DeepSeek-V3-W4A8-Pruing

项目地址:https://ai.gitcode.com/hf_mirrors/vllm-ascend/DeepSeek-V3-W4A8-Pruing
点击查看免费下载

初次接触 DeepSeek-V3-W4A8-Pruing 模型仓库时,面对 3 个 safetensors 分片文件、一个 578KB 的 index 索引 JSON,新手最容易发懵:为什么权重要拆成 3 片?index 文件里的 weight_map 到底在索引什么?这篇文章带你逐层拆解 safetensors 三分片结构与 index 索引的完整对应关系,看完你就能独立读懂任意量化模型的权重布局。

仓库文件全景:先看目录里有什么

整个仓库可以分成三类文件,各司其职:

类别文件作用
权重数据quant_model_weight_w8a8_dynamic-00001-of-00003.safetensors等 3 个分片存放模型全部张量数据
权重索引quant_model_weight_w8a8_dynamic.safetensors.index.json记录"哪个张量在哪个分片"
量化说明quant_model_description.json记录每个参数的量化类型
模型配置config.json、configuration_deepseek.py定义模型结构与加载入口
词表tokenizer.json、tokenizer_config.json分词与对话模板

📌 记住一条主线:index 索引管"位置",description 管"精度",safetensors 分片管"数据"。

safetensors 三分片各自装了什么?

大模型权重通常按大小上限切成多个 shard(分片)。本模型共 4810 个张量键(key),被均匀地分配到 3 个分片中,分布并不均匀:

分片张量键数量占比内容
00001496约 10.3%词嵌入model.embed_tokens、第 0~2 层全部参数、第 3 层 MoE 专家 0~16
000023132约 65.1%第 3 层 MoE 专家 17~190 的量化权重
000031182约 24.6%第 3 层 MoE 专家 191~255、路由 gate、shared_experts、model.norm、lm_head

💡 为什么第 2 片特别大?因为 config.json 中n_routed_experts为 256、num_hidden_layers为 4,第 3 层是 MoE 层,256 个专家的权重占了全模型的大头,而 MoE 层被切分在 3 个分片里。

分片 1:从词嵌入到 MoE 专家 16

打开索引文件开头,第一个键就是词嵌入:

"model.embed_tokens.weight": "quant_model_weight_w8a8_dynamic-00001-of-00003.safetensors"

随后按层顺序排布第 0~2 层的self_attn(q_a_proj、q_b_proj、kv_a_proj_with_mqa、o_proj 等 MLA 投影)与mlp参数,直到model.layers.3.mlp.experts.17.gate_proj.scale_bias为止。

分片 2:MoE 专家权重的"主战场"

第 2 片几乎全部是model.layers.3.mlp.experts.17到experts.190的键,每个专家都带有 gate_proj / up_proj / down_proj 三组矩阵及其量化伴随张量:

model.layers.3.mlp.experts.17.up_proj.weight model.layers.3.mlp.experts.17.up_proj.weight_scale model.layers.3.mlp.experts.17.up_proj.weight_offset model.layers.3.mlp.experts.17.up_proj.weight_scale_second model.layers.3.mlp.experts.17.up_proj.scale_bias

这正是 W4A8 量化的典型特征——每个weight都配套 scale / offset / scale_bias 等伴随参数,键数量是普通模型的 5~6 倍。

分片 3:专家尾部 + 归一化 + 输出头

第 3 片从experts.191.up_proj.weight开始,收在模型的"最后三件套":

"model.norm.weight": "...-00003-of-00003.safetensors", "model.norm.bias": "...-00003-of-00003.safetensors", "lm_head.weight": "...-00003-of-00003.safetensors"

lm_head是输出词表投影(词表大小 129280),永远位于权重文件的末尾,这是判断一个分片是否为"末片"的最快标志。

index 索引的完整解析:metadata + weight_map

索引文件结构非常简洁,只有两个顶层字段:

{ "metadata": { "total_size": 12073335872 }, "weight_map": { "张量名": "分片文件名", ... } }
  • metadata.total_size:全模型张量总字节数12073335872,约11.25 GB。加载器用它校验分片是否完整,是判断"下载齐没齐"的第一依据。
  • weight_map:4810 条"张量名 → 分片名"映射。推理框架(如 vLLM / MindIE)加载时只读这个索引,按需打开对应分片并做零拷贝内存映射,而不是把整个模型读进内存。

🔍 实用技巧:想确认某个参数在哪个分片,直接搜索weight_map中的键名即可,例如查model.layers.3.mlp.gate.weight会指向 00003 分片——这就是 MoE 路由表所在位置。

用 quant_model_description.json 看懂每个参数的精度

如果说 index 回答"在哪",那么 quant_model_description.json 回答的是"以什么精度存储"。文件头部声明:

"version": "1.0.0", "model_quant_type": "W8A8_DYNAMIC", "group_size": 256

其中group_size: 256表示量化按 256 个元素一组做分组缩放。全文档按参数统计,精度类型分布如下:

量化类型参数数量分布位置
W4A8_DYNAMIC4608第 3 层 MoE 路由专家的 gate/up/down_proj
W8A8112各层 MLA 注意力投影(q_a/q_b/kv_a/o_proj)
FLOAT54词嵌入、layernorm、bias 等保持高精度
W8A8_DYNAMIC36第 0~2 层 dense MLP 的 gate/up/down_proj

这与 config.json 中的三个字段一一对应:

"mla_quantize": "w8a8", "quantize": "w8a8_dynamic", "moe_quantize": "w4a8_dynamic"

📎 项目名里的 "W4A8" 指的就是 MoE 专家部分:权重 4-bit、激活 8-bit 的动态量化,这也是整个模型最省显存的功臣。

新手上手 3 步:下载、校验、加载

第 1 步:获取完整权重

在模型仓库页面下载全部文件,或执行:

git clone https://gitcode.com/hf_mirrors/vllm-ascend/DeepSeek-V3-W4A8-Pruing

第 2 步:校验完整性

  • 三个分片文件 + index 文件必须齐全,缺一不可;
  • index 中metadata.total_size(约 11.25 GB)应与各分片实际大小之和一致。

第 3 步:交给推理框架加载

配置 configuration.json 声明了framework: pytorch、task: text-generation;config.json 的auto_map字段把AutoConfig/AutoModel指向 configuration_deepseek.py 与 modeling_deepseek.py,因此框架会自动识别DeepseekV3ForCausalLM架构,通过 index 按需读取分片,无需手工指定分片顺序。

总结:一张图记住权重读取链路

config.json ──> 决定架构与量化方案 │ ▼ .safetensors.index.json ──> weight_map:张量名 → 分片文件(位置索引) │ ▼ 00001 / 00002 / 00003 分片 ──> 实际张量数据(safetensors 零拷贝读取) │ ▼ quant_model_description.json ──> 每个张量的精度类型(W4A8 / W8A8 / FLOAT)

核心结论只有一句话:index 索引是"目录",分片是"章节",description 是"书脊上的标注"。掌握weight_map的键名 → 分片名映射规律(按层顺序排布、MoE 专家体量大导致分片 2 最厚、lm_head收尾于分片 3),你面对任何 safetensors 多分片量化模型都能快速建立全局认知。

【免费下载链接】DeepSeek-V3-W4A8-Pruing

项目地址:https://ai.gitcode.com/hf_mirrors/vllm-ascend/DeepSeek-V3-W4A8-Pruing
点击查看免费下载

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

RELATED READING

延伸阅读

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