【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16
本文带你彻底搞懂NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16的NVFP4 转 bf16 格式转换全过程。它是 NVIDIA Nemotron 3.5 Lightning 30B-A3B 大模型的DSpark 投机解码drafter,专为MLX(Apple Silicon)平台反量化(dequantize)而来,让 Mac 用户也能享受无损的加速推理。
背景:一次"格式不兼容"引发的转换
🤔 为什么官方模型不能直接在 Mac 上跑?事情要从 NVIDIA 的发布策略说起:
- 目标模型(target):
nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B,一个 Mamba-2 + 潜在 MoE + 注意力混合架构的大模型(model_type: nemotron_h)。 - 官方 drafter:
nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark,由 NVIDIA Model Optimizer 生成,采用NVFP4(W4A16_NVFP4)量化格式——即FP4(E2M1)权重 + FP8(E4M3)分块缩放系数。
问题在于:原版 MLX / mlx-lm 根本无法读取 NVFP4 格式。对于 Apple Silicon 用户来说,这个加速神器"看得见、用不上"。于是社区动手把它反量化成了 bf16,这就是本仓库的由来。
转换原理:一次无损反量化,而非重新训练
📌 这里要强调一个关键点,见 README.md 中的说明:这是一次格式转换(format conversion),不是重新训练(not a retrain)。
具体做了什么?
- 手工解码:把 NVFP4 中的 FP4(E2M1)权重连同 FP8(E4M3)分块缩放系数,解码还原回 bf16 精度;
- 原样保留:attention 层、
embed_tokens、markov_w1在源模型中本来就是 bf16,直接保留; - 权重零改动:除此之外所有权重保持原样,转换不改变模型能力。
还有一个巧妙的设计:mlx-dspark 在加载时会自动把 drafter重新量化回 4-bit,而这并不影响其接受率(acceptance)——反量化只是为了"能读进来",并非为了保留高精度。
为什么输出保证"无损"?
投机解码(speculative decoding)的天生优势:目标模型会逐一验证每个 token,推测只改变速度,从不改变文本。因此输出与目标模型的贪心解码完全一致(仅浮点平局除外)。
如何使用:mlx-dspark 一条命令跑通
配合 4-bit 的 MLX 目标模型mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-4bit,安装后即可启动:
pip install mlx-dspark mlx-dspark generate \ --model mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-4bit \ --drafter mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16 \ --max-draft 4 --prompt "Write a Python function for the n-th Fibonacci number."💡 几个实用参数说明:
| 参数 | 作用 |
|---|---|
--model | 主模型(4-bit 目标模型),负责最终验证 |
--drafter | 本仓库的 bf16 版 DSpark drafter,负责快速"打草稿" |
--max-draft 4 | 每次最多推测 4 个 token,实测为吞吐峰值点 |
值得一提的是,mlx-dspark 还针对 nemotron_h 这类混合架构做了专门适配:加入了nemotron_h 隐状态采样点(hidden-state tap)和精确的 Mamba-2 循环状态回滚,让无损验证循环得以在混合模型上稳定工作。
架构拆解:967M 参数的 drafter 长什么样?
打开 config.json 可以看到完整定义,architectures为Qwen3DSparkModel、dtype为bfloat16。核心结构一览:
| 组件 | 规格 |
|---|---|
| 主干 | 标准 Qwen3 GQA,6 层、hidden 2688、32 头 / 2 KV 头、head_dim 128、词表 131072 |
| 修正头 | DSparkrank-512 Markov fixup head(dspark_fixup_head_type: "markov") |
| 注意力 | DFlash 血统:因果滑动窗口(1024)块注意力 + 逐头 attention-sink bias |
| 块参数 | block_size 8、sample_from_anchor=false(预测从块槽位 1 开始) |
| 层采样 | 融合目标模型 6 个隐状态采样点(层 1、5、19、29、41、51) |
| 规模 | 总参数 967M(不含 embedding 为 615M) |
它自带embed_tokens,但复用目标模型的lm_head(has_lm_head=false),进一步压缩了体积。
实测加速:M4 Pro 上最高 1.27× 吞吐提升
⚡ 在 M4 Pro(mlx 0.32、贪心解码、预热状态)上,4-bit 目标模型基线约91 tok/s,开启--max-draft 4后:
| 内容类型 | 加速比 | 平均接受长度 |
|---|---|---|
| 代码(code) | 1.27×(约 117 tok/s) | 4.55 |
| 数学(math) | 1.24× | 4.41 |
| 对话(chat) | 1.06× | 3.74 |
一个有意思的结论:吞吐在 cap 4 处达到峰值,再往上反而下降——因为MoE 验证宽度成本的增长快于接受率的提升。也就是说,瓶颈在 MoE 目标模型,而非 drafter(其接受率其实很强)。代码和数学类场景收益最明显,日常闲聊则提升有限。
许可证与文件清单
- 许可证:遵循 LICENSE 中的OpenMDW-1.1模型许可,原始 drafter 版权归 NVIDIA 所有,本仓库以相同条款再分发反量化副本。
- 产出工具:源格式来自 NVIDIA Model Optimizer,转换由 mlx-dspark 完成。
仓库文件速览:
| 文件 | 说明 |
|---|---|
| README.md | 项目说明、用法与实测数据 |
| config.json | 模型架构与 DSpark/DFlash 配置 |
| model.safetensors | bf16 权重文件 |
| LICENSE | OpenMDW-1.1 许可协议 |
总结
- 转换本质:NVFP4 → bf16 是一次无损反量化,不是重训,权重原封不动;
- 解决的问题:让原版 MLX / mlx-lm 读不懂的 NVIDIA 官方 drafter 在 Apple Silicon 上可用;
- 效果:在 M4 Pro 上,代码场景最高1.27×无损加速(约 117 tok/s),推荐
--max-draft 4; - 适用人群:想在 Mac 上跑 Nemotron 3.5 Lightning 30B-A3B 并压榨推理速度的开发者。
如果你正被 NVFP4 格式挡在 Mac 门外,这个 bf16 转换版就是你的钥匙 🔑。
【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16
相关推荐
DSpark 生态路线图:NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16 与 mlx-dspark 社区的未来走向
DSpark 生态路线图:NVIDIA Nemotron 3.5 Lightning 30B A3B DSpark bf16 与 mlx dspark 社区的未
OpenMDW-1.1 许可证解读:NVIDIA-Nemotron-3.5-Lightning-30B-A3B-DSpark-bf16 商用与再分发合规清单
OpenMDW 1.1 许可证解读:NVIDIA Nemotron 3.5 Lightning 30B A3B DSpark bf16 商用与再分发合规清单 N
BF16 vs 8bit:NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit转换MLX格式后的模型效果对比实测
BF16 vs 8bit:NVIDIA Nemotron 3.5 Lightning 30B A3B 8bit转换MLX格式后的模型效果对比实测 📦 NVID
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考