【免费下载链接】DeepSeek-V4-Pro-0813-nvfp4-DSpark
DeepSeek-V4-Pro-0813-nvfp4-DSpark 是 DeepSeek-V4-Pro-0813 的NVFP4 全量量化版,由 NVIDIA Model Optimizer(ModelOpt)配方量化得到。它把 MoE 路由专家从原生 MXFP4 无损转成 NVFP4,让 target 与 draft 共用同一份自洽检查点。本文带你走一遍它的三阶段 NVFP4 量化流程——校准(calibration)采集激活 amax、导出(export)无损位转换——并解读 ModelOpt 配方里的关键参数,帮你彻底搞懂"只量化专家、混合精度"的工程取舍。
🧭 先搞懂:这个模型是什么,为什么要 NVFP4
DeepSeek-V4-Pro-0813是一个总参数1.65T、激活 49B的自回归 MoE 模型,采用混合注意力(Compressed Sparse Attention + Heavily Compressed Attention)和 Manifold-Constrained Hyper-Connections,最大上下文 100 万 token。它原生把路由专家存成MXFP4,注意力与共享专家用 FP8,norm/embedding 保留 BF16。
一句话理解 NVFP4 的价值:用更细粒度的缩放因子,在 4-bit 精度下更贴近原始分布,从而让 1.65T 这样的超大 MoE 能塞进 Blackwell(B200/B300)的显存里高效推理。
这个检查点和nvidia/DeepSeek-V4-Pro-0813-NVFP4的区别只有一个:后者的 DSpark 草稿头仍停留在源 MXFP4 格式,target 与 draft 专家格式不一致;而DSpark 版把草稿专家的 MXFP4 无损 cast 成 NVFP4,得到一个"一个检查点同时当 target 和 draft"的自洽产物。主干权重与 NVFP4 版逐位一致(bit-identical)。
完整说明见 README.md。
📦 三阶段流程总览
ModelOpt 配方按顺序跑三步,分别对应重切分 → 校准 → 导出:
| 阶段 | 脚本 | 运行位置 | 目标 | 关键产物 |
|---|---|---|---|---|
| 1. Reshard | convert.py | CPU | 把 HF 检查点切成模型并行布局 | model{i}-mp8.safetensors |
| 2. Calibrate | ptq.py | 8×GPU (torchrun) | 采集路由专家激活范围 amax | amax dump |
| 3. Export | quantize_to_nvfp4.py | GPU | 导出 NVFP4 检查点 | NVFP4 检查点 |
说明:第 1 步的
convert.py就是本仓库里带完整源码的 DeepSeek 官方切分脚本(见 inference/convert.py);第 2、3 步的ptq.py、quantize_to_nvfp4.py属于 ModelOpt 官方仓库的examples/deepseek/deepseek_v4配方,这里讲解它们的职责与参数。
🔧 阶段一:Reshard 重切分到模型并行布局
量化前,得先把 HF 格式的大检查点按专家维度切成 8 份(model-parallel 8),让后续 8 卡各拿一份路由专家做校准。这一步只跑在 CPU,用 DeepSeek 自己的convert.py:
python convert.py \ --hf-ckpt-path <DeepSeek-V4-Pro-0813> \ --save-path <mp8_checkpoint> \ --n-experts 384 \ --model-parallel 8 \ --expert-dtype fp4要点解读:
--n-experts 384:该模型每层有 384 个路由专家(见 config.json 的n_routed_experts: 384)。--model-parallel 8:把专家均分到 8 份,要求 384 能被 8 整除。--expert-dtype fp4:保留 FP4 专家格式(也可传fp8,见下)。
切分逻辑在 inference/convert.py:遍历每个张量,凡是名字里带experts(且不是shared_experts)的权重,按expert index // (384/8)决定落到哪一份 shard。
关于 MXFP4 的"无损"种子:脚本里有个 cast_e2m1fn_to_e4m3fn() 函数,把 E2M1 nibble(4-bit 数据)无损地映射成 E4M3(8-bit)——这正是阶段三"换格式不丢权重位"思想的底层基础。它先把 int8 里高低 4 位拆开、查FP4_TABLE还原成真实数值,再按 128 块重写缩放因子。
本仓库的 inference/README.md 展示了同一脚本的
--expert-dtype fp8用法:想跑 FP8 专家,就把 inference/config.json 里的"expert_dtype": "fp4"去掉并加--expert-dtype fp8即可。
🎯 阶段二:校准(Calibration)采集激活范围 amax
这是整个流程里最影响精度的一步。用 8 卡torchrun跑ptq.py,让一批真实样本过模型,记录每个路由专家线性层的激活最大值 amax:
torchrun --nproc-per-node 8 deepseek_v4/ptq.py \ --model_path <mp8_checkpoint> \ --config <DeepSeek-V4-Pro-0813>/inference/config.json \ --calib_size 512 \ --calib_seq 4096 \ --output_path <amax_dump>关键参数(新手最容易踩坑处):
--calib_size 512:每个校准集取 512 条。脚本默认用两个数据集——cnn_dailymail(约 30 万篇英文新闻)和Nemotron-Post-Training-Dataset-v2(多轮对话),各 512 条,合计 1024 条。--calib_seq 4096:tokenizer 截断上限。这是本模型最关键的设置——默认的 512 覆盖不到长上下文的激活范围,会导致 amax 偏小、量化溢出。把它调到 4096 才能采到真实的长程激活峰值。
🔑 核心结论:NVFP4 里唯一真正"校准"出来的量,就是这一步采到的激活 amax。权重位本身是位转换、无需重算,所以校准集是否覆盖真实业务分布,直接决定最终精度。
配方同样支持声明式写法,通过--recipe指向models/deepseek-ai/DeepSeek-V4-Pro-0813/ptq/nvfp4_experts_only的 YAML,该 YAML 被测试钉死与内置默认一致,两条路径产出的量化器配置完全相同。
⚡ 阶段三:导出 NVFP4 检查点 + 无损位转换
最后一步把校准好的 amax 落盘,并做MXFP4 → NVFP4 的无损 cast:
python deepseek_v4/quantize_to_nvfp4.py \ --amax_path <amax_dump> \ --source_ckpt <DeepSeek-V4-Pro-0813> \ --output_ckpt <output> \ --cast_mxfp4_to_nvfp4 \ --device cuda🧮 为什么--cast_mxfp4_to_nvfp4是"无损"的?
理解这一点,就看 MXFP4 和 NVFP4 的存储结构:
| 维度 | MXFP4(源) | NVFP4(目标) |
|---|---|---|
| 权重数据位 | E2M1 nibble | 同一套 E2M1 nibble 网格(不变) |
| 缩放因子类型 | E8M0(纯 2 的幂) | E4M3(带尾数) |
| 缩放因子粒度 | 每 32 元素 1 个 | 每 16 元素 1 个 |
| 是否重算权重位 | — | ❌ 不重算,直接位转换 |
因为 NVFP4复用了 MXFP4 的 E2M1 nibble 网格,权重比特可以原样搬过去,只需重写块 scale(从 32 元素的 E8M0 换成 16 元素的 E4M3)。所以这是"无损位转换"——不丢任何一位权重精度。
一个反直觉的结论:这个 NVFP4 检查点反而比源检查点更大——权重字节数不变,但缩放因子字节翻倍(粒度从 32 细化到 16)。精度换存储,是 NVFP4 的固有代价。
只量化专家:混合精度配置解析
这份检查点只把 Transformer 块内的路由专家(MoE linear)量化成 NVFP4,其余保持原精度。量化配置记录在 hf_quant_config.json 与 config.json:
"quant_algo": "MIXED_PRECISION":混合精度,不是全局统一量化。"group_size": 16:NVFP4 的块大小(每 16 元素一个 scale)。"moe_quant_algo": "NVFP4":仅 MoE 路由专家用 NVFP4。- 排除项
exclude_modules(见 hf_quant_config.json):*.attn.*→ 注意力层保持FP8*.ffn.shared_experts.*→ 共享专家保持FP8head→ 输出层保持原精度
quantized_layers里列出了layers.0~59.ffn.experts和mtp.0/1/2.ffn.experts全部设为NVFP4——61 层主干 + 3 层 DSpark MTP 草稿专家全部覆盖。
这种"选择性量化"是超大 MoE 的标准工程取舍:把占显存大头的路由专家压到 4-bit,而对精度敏感的注意力、共享专家和输出层保留更高精度,从而在近乎无损的前提下拿到最大显存收益。
📊 效果验证:精度几乎无损 + 推测解码加速
精度:NVFP4 与 MXFP4 源模型基本持平
主干权重 bit-identical,推测解码又不改变 target 输出,所以精度沿用 NVFP4 版的实测:
| 精度 | GPQA Diamond | AA-LCR | τ²-Bench | SciCode | IFBench | Terminal-Bench Hard |
|---|---|---|---|---|---|---|
| MXFP4(源) | 88.51 | 68.67 | 96.49 | 53.45 | 76.53 | 51.39 |
| NVFP4 | 88.42 | 69.33 | 98.25 | 53.75 | 75.68 | 50.69 |
可以看到多数基准 NVFP4 持平甚至略胜(AA-LCR、τ²-Bench、SciCode 反超),验证了"无损位转换 + 只量化专家"路线的稳健性。
速度:DSpark 推测解码平均接受长度 ≈ 3.8
DSpark 用半自回归草稿骨架成块提出候选 token,配合轻量 Markov 头和置信头做调度验证。实测(num_speculative_tokens=7,8×B300):
- MT-Bench 整体平均接受长度 3.795(coding 5.366、math 5.479 最高,roleplay 2.488 最低)。
- SPEED-Bench 32K 长上下文整体平均 3.898,其中
low_entropy4.613、high_entropy2.693。
接受长度 >1 就意味着每步能吐出多个 token,直接降低解码延迟。
🚀 上手部署:SGLang / vLLM 两条路
模型支持 SGLang 与 vLLM 两个运行时,硬件面向 NVIDIA Blackwell B200。
SGLang(用于精度基准):
python3 -m sglang.launch_server \ --model-path nvidia/DeepSeek-V4-Pro-0813-nvfp4-DSpark \ --tp 8 --trust-remote-code \ --tool-call-parser deepseekv4 \ --reasoning-parser deepseek-v4vLLM(用于 DSpark 推测解码):需一个同时提供 NVFP4 MoE 后端与 DSpark 的构建。num_speculative_tokens至少要 ≥dspark_block_size(5),取 7 是遵循 DeepSeek 官方建议。去掉--speculative-config即关闭推测解码。
⚠️ 新手易踩坑:若开启 CUDA graphs 后在 FlashMLA 构建 TMA descriptor 时启动失败,请加
--enforce-eager。vLLM 会自动选择 NVFP4 MoE 后端,无需额外环境变量;用--model-loader-extra-config多线程加载可显著加快这个体量检查点的启动。
📂 关键文件导航
| 文件 | 作用 |
|---|---|
| README.md | 模型卡、三阶段配方、部署与评测 |
| hf_quant_config.json | NVFP4 量化配置(算法、块大小、排除项) |
| config.json | 模型结构 + 量化层清单(61 层 + 3 层 MTP) |
| generation_config.json | 采样参数(temperature 1.0, top_p 1.0) |
| inference/convert.py | 阶段一 Reshard 脚本 + MXFP4→FP8 无损 cast |
| inference/config.json | 推理超参(61 层、384 专家、DSpark 配置) |
| inference/model.py | 模型定义(MoE + 混合注意力 + Hyper-Connections) |
| inference/kernel.py | FP8/FP4 GEMM 与量化 kernel |
| encoding/encoding_dsv4.py | 自定义 prompt 编码(thinking / 工具调用 / reasoning effort) |
补充:vLLM 原生套用本仓库的 encoding/encoding_dsv4.py 作为编码器(
tokenizer_mode=deepseek_v4),无需chat_template.jinja。它支持 thinking / non-thinking 两种模式与low/high/max三档 reasoning effort,详见 encoding/README.md。
🎬 小结
DeepSeek-V4-Pro-0813-nvfp4-DSpark 的三阶段 NVFP4 量化流程,核心是**"重切分 → 校准采 amax → 无损位转换导出"**:
- Reshard(CPU,
convert.py)把 384 个路由专家切成 8 份并行布局; - Calibrate(
ptq.py,--calib_seq 4096)采到真正决定精度的激活 amax; - Export(
quantize_to_nvfp4.py)借 E2M1 nibble 网格复用做 MXFP4→NVFP4 无损位转换。
最终得到一份"target + draft 一体"、精度几乎无损、还能开 DSpark 推测解码加速的自洽 NVFP4 检查点——这也是超大 MoE 落到 Blackwell 上高能效推理的完整范本。
【免费下载链接】DeepSeek-V4-Pro-0813-nvfp4-DSpark
相关推荐
量化几乎零损失:DeepSeek-V4-Flash-nvfp4-DSpark的NVFP4精度与DSpark接受长度数据全解读
量化几乎零损失:DeepSeek V4 Flash nvfp4 DSpark的NVFP4精度与DSpark接受长度数据全解读 DeepSeek V4 Flash
Mac 磁盘空间不足怎么办?用 Mole 快速完成 Mac 系统清理的完整指南
Mac 磁盘空间不足怎么办?用 Mole 快速完成 Mac 系统清理的完整指南 Mac 用久了,磁盘空间告急、系统越来越慢,删文件又怕删错?Mole 是一款免费
Phaser Compact Texture Atlas(PCT)格式规范详解:从行格式到加载器实现
Phaser Compact Texture Atlas(PCT)格式规范详解:从行格式到加载器实现 导读 Phaser Compact Texture Atl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考