【免费下载链接】DeepSeek-V4-Flash-nvfp4-DSpark项目地址https://ai.gitcode.com/hf_mirrors/nvidia/DeepSeek-V4-Flash-nvfp4-DSpark点击查看免费下载DeepSeek-V4-Flash-nvfp4-DSpark是 NVIDIA 基于 Model Optimizer 量化NVFP4的 DeepSeek-V4-Flash MoE 模型并内嵌了 DeepSeek 官方的 DSpark 投机解码头。想把它跑在自己的多张 GPU 上本文带你用 convert.py 把 HF 权重转换成多卡推理格式并讲透 MXFP4→NVFP4 无损 Cast 的原理。为什么要做权重转换模型目录下的 46 个model-00001-of-00046.safetensors分片是 Hugging Face 格式——它们面向单进程全量加载和推理框架如 vLLM搭配即可使用。而本项目自带的极简多卡推理引擎generate.py model.py则期望每张卡只加载属于自己的那一片文件名形如model0-mp4.safetensors model1-mp4.safetensors model2-mp4.safetensors model3-mp4.safetensorsconvert.py就是中间的桥梁它一次性做三件事步骤做了什么说明️ 命名转换HF 权重名 → 推理引擎权重名只改键名数值不动✂️ 张量并行切分按--model-parallel把权重切成 MP 份专家按编号分、dense 权重按维度切 专家 Cast可选MXFP4 → NVFP4 无损转换让目标模型与 DSpark 草稿头共用一套量化配置 关键认知这不是重新量化也不是微调。转换前后模型的计算结果一致改变的只是权重的组织与打包方式。HF 目录46 个分片 tokenizer │ convert.py改名 → 切分 → cast ▼ model{rank}-mp{mp}.safetensors × MP │ torchrun 多卡加载 ▼ generate.py 交互式对话 / 批量推理转换规则拆解命名映射、专家切分与 dense 层切分打开 convert.py三条核心规则一目了然。1️⃣ 命名映射HF 名字 → 推理引擎名字脚本里的mapping字典inference/convert.py把 HF 命名翻译成推理引擎的内部命名例如q_proj → wq、kv_a_proj_with_mqa → wkv_a、gate_proj/up_proj/down_proj → w1/w3/w2、lm_head → head。另外还有几处直接替换self_attn → attn、mlp → ffn、weight_scale_inv → scaleinference/convert.py。只改键名数值完全不动——所以这一步没有任何精度变化。2️⃣ 张量并行切分MP 张卡每人一份专家权重MoE FFN模型共有256个路由专家见 inference/config.json 的n_routed_experts。--model-parallel 4时第 i 张卡只保留编号落在[64i, 64i64)区间的专家inference/convert.py。专家之间彼此独立编号连续分配即可保证均匀。Dense 投影层wq、wq_b、wkv_b、w1、w3沿行方向切分wo、w2沿列方向切分mapping表中的dim0 / dim1inference/convert.py——这是标准的张量并行布局列切后各卡算出的部分和在列切侧做 all-reduce 合并。公共权重attn_sink、weights_proj、共享专家等不在mapping中指定维度不切分每张卡保留完整副本。3️⃣ Tokenizer 随附拷贝转换结束后tokenizer.json与tokenizer_config.json会被自动拷贝到输出目录inference/convert.py这样输出目录就是一个自包含的推理目录generate.py加载模型和 tokenizer 时只用指向它一处。原理篇MXFP4 → NVFP4 无损 Cast 到底无损在哪这是convert.py里最精彩的部分cast_e2m1fn_to_e4m3fninference/convert.py。先交代背景MXFP44-bit 浮点值e2m132 元素一组的 scalescale 用 e8m0只有指数的 8-bit 格式即 2 的整数次幂。DSpark 草稿头里的 256 个专家在官方发布时就是这个格式。NVFP4同样是 e2m1 的 4-bit 值但16 元素一组组 scale 用 e4m3 浮点。本 checkpoint 主干43 层 MoE 专家就是这个格式见 hf_quant_config.json。由于两者值域一致4-bit 值能表示的数完全相同只换 scale 的打包方式即可逐位无损地转换。实现分四步解包 查表MXFP4 权重以 int8 存储、一字节打包 2 个 4-bit 值。脚本把它们拆成高低两个 nibble查一张 16 项查找表FP4_TABLEinference/convert.py还原出 e2m1 的全部取值±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6与 0。重排分块把权重组重排成128 × 128的小块bOut × 128 × bIn × 128并把每 32 个值共享的 MXFP4 scale 广播到对应的 4-bit 值上实现 128 元素块内逐值对齐。归一化偏移对每个 128 元素块取块内 scale 的最大值右移 6 个偏移比特算出块内每个 scale 相对最大值的比例。因为 MXFP4 的 scale 是 2 的整数次幂这个比例永远是 2 的整数次幂乘回 4-bit 值上时没有任何舍入。写回 e4m3偏移后的值量化为 e4m3。为什么乘数上限取2^6因为 e2m1 最大绝对值是 6.0而6.0 × 2^6 384 448e4m3 的表示上限2^7就会溢出inference/convert.py。新的块 scale 再以 e8m0 存出。整条链路只有精确嵌入e2m1 ⊆ e4m3 的表示范围2 的幂缩放两类操作每个数值转换前后严格相等——这就是无损的含义。 两种专家格式怎么选默认不加参数专家权重保持 int8 打包的 e2m1 原样直接按float4_e2m1fn_x2视图读取inference/convert.py原生 MXFP4 语义零改动。--expert-dtype fp8走上面的无损 cast专家变成 e4m3 e8m0 的块量化格式。数值完全相同只是存储格式统一成了 NVFP4 风格。inference/README.md 提示使用该选项时需同步删掉 config.json 里的expert_dtype: fp4。实操一键转换与多卡推理完整命令第一步转换 HF 权重CPU 即可无需 GPUexport EXPERTS256 # 模型的路由专家数本模型固定 256 export MP4 # 模型并行卡数须能整除 256 export CONFIGconfig.json python convert.py \ --hf-ckpt-path ${HF_CKPT_PATH} \ --save-path ${SAVE_PATH} \ --n-experts ${EXPERTS} \ --model-parallel ${MP}运行结束后${SAVE_PATH}里会生成model0-mp4.safetensors…model3-mp4.safetensors以及拷贝过来的 tokenizer 文件。第二步多卡交互式对话torchrun --nproc-per-node ${MP} generate.py \ --ckpt-path ${SAVE_PATH} \ --config ${CONFIG} \ --interactive启动后输入/exit退出对话。第三步批量推理 / 多机部署从文件批量推理torchrun --nproc-per-node ${MP} generate.py \ --ckpt-path ${SAVE_PATH} --config ${CONFIG} --input-file ${FILE}多机推理NCCL 跨机通信见 inference/generate.pytorchrun --nnodes ${NODES} \ --nproc-per-node $((MP / NODES)) \ --node-rank ${RANK} \ --master-addr ${ADDR} \ generate.py --ckpt-path ${SAVE_PATH} --config ${CONFIG} --input-file ${FILE}完整命令与参数说明见 inference/README.md。常见问题速查 ⚠️现象原因与对策加载分片报文件不是合法 safetensors46 个分片可能还停留在 Git LFS 指针状态文件仅几百字节请确认大文件已完整拉取Number of experts must be divisible by model parallelism--model-parallel必须整除--n-experts如 4、8、16、32、64、128、256启动时缺model{rank}-mp{mp}.safetensors推理的卡数必须与转换时的--model-parallel一致generate.py按model{rank}-mp{WORLD_SIZE}.safetensors精确取名inference/generate.py精度与官方不一致先检查EXPERTS是否为 256以及是否误改了 config.json 中的维度参数 小提示转换是幂等的——同一输入重复运行convert.py会得到相同结果权重数值不变只是重新切分与打包。产物文件可以直接用 safetensors 工具打开抽查张量名与形状。写在最后回顾整条链路convert.py把 HF 的 46 个分片按改名 → 切分 → cast三步变成 MP 张卡各自专属的切片文件其中专家权重按编号均匀分配dense 层按标准张量并行布局切分MXFP4 专家则借精确嵌入 2 的幂缩放实现逐位无损的 NVFP4 转换。转换完成后torchrun拉起 generate.py对话即刻开始。仓库结构速览权重转换与推理inference/convert.py 转换脚本、model.py 模型定义、kernel.py 自定义 GEMM/注意力 kernel、config.json 模型配置对话编码格式encoding/encoding_dsv4.py 官方编码参考实现量化配置hf_quant_config.json掌握这套流程后你不仅能让本模型跑在多卡上同样思路也适用于其他MoE 分组量化模型的权重切分与格式迁移。赞分享【免费下载链接】DeepSeek-V4-Flash-nvfp4-DSpark项目地址https://ai.gitcode.com/hf_mirrors/nvidia/DeepSeek-V4-Flash-nvfp4-DSpark点击查看免费下载相关推荐OHIF 3.11 ToolbarService 迁移指南从 ViewportActionCornersService 到统一工具栏体系OHIF 3.11 ToolbarService 迁移指南从 ViewportActionCornersService 到统一工具栏体系 导读 本文是 OHI人工智能大模型基础模型模型量化DeepSeek用免费开源天气API做应用Open-Meteo 实用指南用免费开源天气API做应用Open Meteo 实用指南 Open Meteo是一款免费的开源天气API为天气预报应用、智能家居等场景提供无需API密钥的气大模型模型量化DeepSeekSDR把整片频谱装进桌面的跨平台软件定义无线电接收利器SDR把整片频谱装进桌面的跨平台软件定义无线电接收利器 SDR 是一款跨平台的软件定义无线电软件让你在电脑上实时接收并解码各类无线电信号。它最核心的上一篇VeleroArkark get 命令完全指南资源查询语法、输出格式与源码实现解析下一篇Flax Linen 模块参数设计dataclass 属性与调用时参数的选择及 merge_param 详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考