
一篇讲透 DeepSeek-V3 模型检查点safetensors 权重解析与格式转换【免费下载链接】DeepSeek-V3项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-V3你从模型仓库里拖下一大堆.safetensors文件一种内存安全、加载比传统 .bin 更快的权重存储格式打开config.json却找不到头绪这些权重到底怎么被装进显存FP8 和 BF16 又差在哪别急这篇文章带你把 DeepSeek-V3 的模型检查点从文件名一路讲到能加载、能转换权重解析、索引规则与格式转换都会落到具体文件和命令上。把权重拆开看主模型和 MTP 各管什么先给这套权重一个整体印象。DeepSeek-V3 是混合专家MoE一种让每个 token 只激活一部分专家网络的架构模型总参数 671B每个 token 实际激活约 37B。可仓库里所有文件加在一起却到了 685B多出来的 14B 是哪儿来的拆开看这套权重其实就两块东西主模型和 MTP。主模型输入/输出嵌入层 61 层 Transformer 隐藏层共 671B 参数。张量大致长这样——嵌入层model.embed_tokens.weight隐藏层model.layers.0~model.layers.60输出model.norm.weight与lm_head.weightMTPMulti-Token Prediction多 token 预测训练时一次预测多个 token推理时也能拿来做投机解码加速多出的那个附加层路径是model.layers.61独享约 11.5B 参数但嵌入层和输出头跟主模型共用算进总文件就成了 14B。上图这套权重在各基准上的表现671B 总参数 / 每 token 激活约 37B。模型检查点文件的内部排布单个检查点文件打开后并不神秘它由两段拼成头部一段 JSON记录每个张量的名字、形状、dtype 和字节偏移量数据区按头部指定的偏移量排好序的二进制张量。头部里还会挂一个quantization_config声明这套权重的量化方式quantization_config: { activation_scheme: dynamic, fmt: e4m3, quant_method: fp8, weight_block_size: [128, 128] }说白了DeepSeek-V3 原生就是 FP8 权重按 128×128 块缩放。反量化靠一个伴随字段weight_scale_invfloat32 张量和权重存在一起公式就是「128×128 的权重块 × weight_scale_inv」。注意这里如果某个块没对齐 128会先补零到 128 再算缩放量化完把补上去的零去掉。两个参数如何决定加载行为加载时真正起决定作用的是config.json里两个数num_hidden_layers主模型的隐藏层数671B 版本是 61num_nextn_predict_layersMTP 模块数当前开源权重为 1。MTP 层的编号为什么从 61 开始因为它紧接在主模型隐藏层后面直接顺延不另起编号model.layers.0 ...... model.layers.60 ← 主模型 61 层 model.layers.61 ← 第 1 个 MTP 模块num_nextn_predict_layers1不同规模的模型配置都放在 inference/configs/ 目录下从 16B、236B、671B 到 V3.1 各一份按需取用即可。真正的加载流程写在inference/model.py里支持张量并行和管道并行前者把一层切到多卡、后者把不同层放到多卡两种分布式方式。三步把 FP8 权重转成 BF16官方只放了 FP8 权重。要跑标准 BF16 推理vLLM、LMDeploy 这类框架都认用官方脚本转一遍就行。1. 准备——把代码拉下来装好依赖git clone https://gitcode.com/GitHub_Trending/de/DeepSeek-V3 cd DeepSeek-V3/inference pip install -r requirements.txt2. 执行——一条命令完成反量化 落盘python fp8_cast_bf16.py --input-fp8-hf-path /path/to/fp8_weights --output-bf16-hf-path /path/to/bf16_weights脚本逻辑在 inference/fp8_cast_bf8_cast_bf16.py 里逐文件读 FP8、乘回weight_scale_inv再存成 BF16。3. 验证——对比输出目录里的model.safetensors.index.jsonBF16 版本里不应再出现任何*_scale_inv条目输出文件总大小也应是输入的约两倍。⚠️ 坑点FP8 是 1 字节/权重BF16 是 2 字节转完体积直接翻倍输出目录的空间至少按输入的两倍预留别等写满了才发觉。要切分张量入口在这里如果你要的精度不变、只是把 HF 格式重新切成官方 Demo 能直接吃的分片格式那就用 inference/convert.py。它按专家数和并行度重新切分张量产出的检查点可以直接喂给generate.py做本地推理。交接之前先记住这四点空间整套权重参数 685B671B 主模型 14B MTPFP8 落盘本身就很大转 BF16 再翻倍先把磁盘算清再动手。框架差异不同推理框架对 FP8 / BF16 的支持进度不一SGLang 和 vLLM 覆盖最全优先从这两个验证。MTP 尚在打磨model.layers.61这个模块社区还在完善完整能力要配最新社区版本才稳。索引一致性动完权重记得同步model.safetensors.index.json少一条weight_map映射加载就会直接报错。【免费下载链接】DeepSeek-V3项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-V3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考