@PyTorch:在NVIDIA NeMo框架内使用PyTorch原生库自定义模型以满足您对延迟、速度、内存和计算的严格要求…
摘要
NVIDIA展示了如何使用NVIDIA模型优化器进行量化感知蒸馏(QAD)来改进Nemotron 3.5 Lightning模型,在保持代理基准准确性的同时减少内存使用并提高吞吐量。
查看缓存全文
缓存时间: 2026/08/28 01:42
在NVIDIA NeMo框架中使用PyTorch原生库进行模型定制,以满足您对延迟、速度、内存和计算的严格要求。
NVIDIA的博客展示了如何使用NVIDIA Model Optimizer通过量化感知蒸馏改进Nemotron 3.5 Lightning模型。我们将详细介绍整个训练流程,并展示在代理基准测试中,QAD如何持续优于训练后量化压缩,在减少内存使用的同时确保高质量。
请在此阅读:
使用NVIDIA Model Optimizer通过QAD开发Nemotron 3.5 Lightning NVFP4
来源:https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/
团队通过定制模型来满足对延迟、速度、内存和计算的目标。借助开放的NVIDIA Nemotron (https://developer.nvidia.com/topics/ai/nemotron) 系列模型,开发者可以找到适合其需求的合适规模模型。
例如,新的Nemotron 3.5 Lightning NVFP4 (https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4) 检查点在保持准确性的同时,可将吞吐量提升高达4倍。通过将许多权重量化为4位,其大小从66GB全精度检查点压缩至22GB。
要将模型压缩到NVFP4 (https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/),训练后量化是一种满足大多数需求的常用方法。但若要在更紧凑的内存下实现高吞吐量,则需要更激进的量化。此时,量化感知蒸馏便是最佳选择。使用QAD训练Nemotron 3.5 Lightning (https://developer.nvidia.com/blog/nvidia-nemotron-3-5-lightning-delivers-fast-accurate-specialized-task-execution-for-long-running-agents/)使其适应量化噪声,能生成内存占用更低、吞吐量更高且精度得以保留的NVFP4检查点。
本文演示如何使用NVIDIA Model Optimizer (https://github.com/NVIDIA/Model-Optimizer) 通过QAD改进Nemotron 3.5 Lightning模型。我们将逐步介绍整个训练流程,从初始PTQ阶段到最终的蒸馏和评估。我们将展示QAD如何恢复因激进量化导致的精度下降。即使采用更保守的配置,QAD在代理基准测试中也持续优于PTQ,在减少内存占用的同时确保高质量**。**
什么是量化感知蒸馏?https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#what_is_quantization-aware_distillation
QAD使用原始全精度模型(教师)来指导量化模型(学生)。首先,通过对全精度模型运行PTQ来创建量化模型。然后,使用KL散度损失比较教师和学生的logit值,将冻结的BF16模型蒸馏到量化模型中。
图1展示了用于构建Nemotron 3.5 Lightning NVFP4检查点的两阶段QAD过程。全精度BF16模型作为冻结的教师,同时也是第一阶段(PTQ)的起点,该阶段将权重量化为W4A16以生成量化学生模型。在第二阶段,学生模型通过QAD进行训练,在模拟量化下进行前向传播,同时蒸馏损失使其与教师对齐,最终获得精度恢复接近基线的NVFP4检查点。
一个从左至右的流程图,标题为“Nemotron 3.5 Lightning NVFP4 QAD过程”。一个灰色“全精度模型(BF16)”框向上分支至蓝色“教师(全精度,冻结)”框,向右进入绿色“阶段1:应用PTQ(W4A16)”框,该框输入至灰色“量化学生(PTQ检查点)”框。学生模型流入绿色“阶段2:QAD训练”框,标注为“带模拟量化的前向传播 + 与教师的蒸馏损失”,教师通过“蒸馏损失”箭头连接至此框。最终箭头指向蓝色“QAD检查点(NVFP4,精度恢复)”框。图1:用于构建Nemotron 3.5 Lightning NVFP4检查点的两阶段QAD过程
量化感知蒸馏流程https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#the_quantization-aware_distillation_process
请按照以下步骤执行QAD流程。
步骤1:训练后量化https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#step_1_post-training_quantization
QAD的第一阶段是运行PTQ以生成量化检查点(学生)。由于计划运行QAD,因此可以执行更激进的量化。对于Nemotron 3.5 Lightning,我们发现将Mamba线性层量化为更激进的W4A16(而非FP8),可以在精度不大幅下降的情况下解锁更高的吞吐量。
通常,单独执行PTQ时,目标是实现超过99%的中值精度恢复率。当与QAD结合时,可以针对95-99%的中值精度恢复率,因为QAD将恢复更多精度。这确认了量化已足够激进,以获取尺寸和延迟收益,同时为QAD在下一阶段弥合差距留下了明确空间。
我们预期使用W4A16在评估基准上会出现小幅但显著的下降,但计划使用QAD来恢复这一下降。这确认了量化已足够激进,以获取尺寸和延迟收益,同时为QAD在下一阶段弥合差距留下了明确空间。
步骤2:量化感知蒸馏https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#step_2_quantization-aware_distillation
在QAD期间,学生模型的每一次前向传播都在模拟量化下运行,以便模型能够适应其在推理时将遇到的量化噪声。与此同时,它通过蒸馏损失被训练以匹配教师。通过教师信号,学生学习复制其来源模型的完整行为,而不仅仅是预测下一个令牌。同时针对这两个信号进行训练,使得QAD能够在激进量化下保持高质量。
欲了解更多关于QAD流程的信息,请参阅NVIDIA Model Optimizer上的QAD端到端示例 (https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/llm_qat#end-to-end-qad-example)。
如何使用Model Optimizer通过QAD开发Nemotron 3.5 Lightning NVFP4https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#how_to_develop_nemotron_35_lightning_nvfp4_with_qad_using_model_optimizer_
以下部分解释了我们使用NVIDIA Model Optimizer通过QAD开发Nemotron 3.5 Lightning NVFP4检查点的过程。
步骤1:获取PTQ检查点https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#step_1_obtain_a_ptq_checkpoint
基础模型NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16 (https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16) 是教师。为了创建学生模型,对相同基础模型运行PTQ,将其量化为W4A16-NVFP4。由于两者源自同一模型,学生拥有匹配良好的教师进行学习。
我们尝试了多种学生PTQ方案,它们在权重校准方式以及Mamba投影和KV缓存量化的激进程度上有所不同。这一选择会影响训练:最大校准方案用于动态缩放QAD,而基于MSE的方案用于冻结缩放QAD(参见本节步骤2)。
一些设置在所有方案中是共享的。所有方案都将lm_head量化为W4A16,我们称之为忠实的lm_head,而注意力投影层保持BF16。校准使用1,000个样本,在单个NVIDIA DGX B300 (https://www.nvidia.com/en-us/data-center/dgx-b300/) 上运行。最后一个方案four_over_six加NVFP4 KV是最激进的。它只将K和V推至NVFP4(W4A4),而将QK^T和attn·V的批量矩阵乘法保留在BF16中,Q保持未量化。
在PTQ阶段进行更激进的量化是有利的,因为QAD随后会恢复精度。这使您能够选择单独PTQ方案会避免的设置,例如将Mamba线性层设为W4A16而非更安全的FP8。
事实上,我们希望PTQ检查点在评估基准上显示出小幅但显著的下降,将中值精度恢复率保持在95%至99%之间。这一下降确认我们已经足够激进地推进以获取尺寸和延迟收益,同时为QAD在下一阶段弥合差距留下了明确空间。
我们评估了许多PTQ方案,重点关注以下五个方案。对于每个方案,我们使用从8k到128k的序列长度进行PTQ校准。先前的实验表明,更长的序列长度能产生更好的PTQ结果。我们发现32K序列长度在four_over_six上提供了最佳的PTQ结果,并在32K校准的four_over_six检查点上进行了所有QAD实验。评估不同的PTQ方案后,我们发现使用W4A16 Mamba线性层的four_over_six提供了精度下降与推理性能提升之间的最佳权衡。完整的精度详情请参阅QAD检查点评估 (https://developer.nvidia.com/blog/?p=121323&preview=1&_ppp=d2b7fc0a78#qad_checkpoint_evaluations) 部分。
表1显示了用于构建Nemotron 3.5 Lightning学生检查点的五个PTQ方案。每个方案由其MoE、共享层和lm_head层的权重格式、校准方法、Mamba输入/输出投影格式以及KV缓存格式定义。所有五个方案都使用W4A16 NVFP4权重,范围从基于最大校准的动态方案到基于MSE的静态方案,其中最激进的变体将KV缓存推至NVFP4。浅绿色行在训练步骤中使用动态缩放,浅灰色行使用静态缩放。
方案 MoE / 共享 / lm_head权重 校准 Mamba in/out_proj KV缓存 maxW4A16动态NVFP4maxW4A16 NVFP4FP8mamba_fp8_maxW4A16动态NVFP4maxFP8 (W+A)FP8MSEW4A16静态NVFP4MSE(均方误差)W4A16 NVFP4FP8four_over_sixW4A16静态NVFP44/6(MSE over M=6 versus M=4, arXiv:2512.02010 (https://arxiv.org/pdf/2512.02010))W4A16 NVFP4FP8four_over_six + NVFP4 KVW4A16静态NVFP44/6W4A16 NVFP4NVFP4 表1:用于构建Nemotron 3.5 Lightning学生检查点的五个PTQ方案
您可以使用NVIDIA Model Optimizer (https://github.com/NVIDIA/Model-Optimizer) 在自己的模型上重现此方案。Hugging Face PTQ示例 (https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/hf_ptq) 演示了如何使用之前解释的不同PTQ方案将Hugging Face模型量化为NVFP4。
import modelopt.torch.quantization as mtq
# 使用数据集定义前向循环
def forward_loop(model):
for batch in calib_dataloader:
model(batch)
# 将基础模型量化为NVFP4以创建PTQ学生检查点
# 示例使用W4A16_NVFP4_CFG进行量化
model = mtq.quantize(model, mtq.W4A16_NVFP4_CFG, forward_loop=forward_loop)
同一个Hugging Face PTQ示例 (https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/hf_ptq) 也涵盖了校准数据、支持的格式和导出选项。一旦您有了PTQ检查点,就可以按照前面描述的QAD训练配置和缩放策略继续。
步骤2:QAD训练https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/#step_2_qad_training
本节介绍QAD训练,包括配置和量化缩放处理。
设置训练配置
有了学生检查点,下一步是决定如何训练它。在我们的消融实验中,两个选择最为重要:训练序列长度和蒸馏数据。
**序列长度:**序列长度对于某些基准测试(尤其是长上下文基准)至关重要,训练序列过短会损失精度。训练后监督微调使用了大约522K令牌,我们的消融实验表明,522K序列长度对于保持长上下文性能是必要的。为了平衡计算资源与序列长度,我们最初使用256K序列长度进行消融,然后在最终QAD运行中扩展到522K。
**数据集:**对于数据混合,我们在最终方案确定前对几种内部混合进行了消融。对于任何希望重现此工作的人,我们建议从NVIDIA发布的开放数据集Nemotron-Post-Training v1 (https://huggingface.co/datasets/nvidia/Nemotron-Post-Training-Dataset-v1) 和 Nemotron-Post-Training v2 (https://huggingface.co/datasets/nvidia/Nemotron-Post-Training-Dataset-v2) 开始,它们涵盖了与我们所用类似的分布。
**蒸馏方案:**学生模型从PTQ检查点开始:BF16模型首先使用Nemotron-3.5-Lightning (https://github.com/NVIDIA/Model-Optimizer/tree/main/modelopt_recipes/huggingface/models/nvidia/Nemotron-3.5-Lightning-30B-A3B-BF16/ptq/w4a16_nvfp4_4o6.yaml) -30B-A3B/lightning (https://github.com/NVIDIA/Model-Optimizer/tree/main/modelopt_recipes/huggingface/models/nvidia/Nemotron-3.5-Lightning-30B-A3B-BF16/ptq/w4a16_nvfp4_4o6.yaml) 量化方案量化为NVFP4。然后从那里开始蒸馏,而不是从头训练量化权重。每个步骤,同一批数据同时通过BF16教师和NVFP4学生,学生通过logit上的KL散度蒸馏损失被训练以匹配教师,教师保持冻结作为参考信号。使用5e-6的恒定学习率进行蒸馏,无预热,禁用dropout,梯度裁剪为1.0,跨两个节点×8个GPU(TP=2, EP=4)。这与NVIDIA Model Optimizer (https://github.com/NVIDIA/Model-Optimizer/blob/main/tools/launcher/examples/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16/megatron_lm_qad.yaml) 附带的QAD工作流相同。
QAD期间的量化缩放处理
有了检查点和训练配置,最后一个选择是在QAD期间如何处理量化缩放。我们尝试了两种策略,具体应用取决于步骤1中的PTQ检查点是如何校准的。
图2展示了动态与冻结缩放的对比,两条路径共享相同的量化前向传播过程:激活、模拟量化、GEMM、损失,梯度返回至FP权重。上路径每一步都根据当前张量重新计算其量化缩放;下路径则锁定PTQ校准的缩放,仅更新权重。W(t)是训练步骤t时的BF16权重,s(t)是在该步骤从这些权重重新计算的缩放,s*是捕获一次并在整个运行中保持的缩放。
图表显示两个堆叠的路径,每个路径内包含相同的四个框:激活、模拟量化、GEMM、损失,位于绿色区域内,下方有一个权重框馈送量化器,虚线箭头循环返回。唯一不同的是每个行上方的缩放框:带有循环箭头图标的绿色框和…(图表描述未完,但根据上下文应为对动态缩放和冻结缩放的说明)
相似文章
NVIDIA Nemotron 3.5 Lightning and NeMo Switchyard Deliver Faster, Smarter, More Efficient Agentic AI
NVIDIA announced Nemotron 3.5 Lightning, a 30B mixture-of-experts open model optimized for high-volume agentic AI workloads, alongside NeMo Switchyard, an open-source library for intelligent model routing across heterogeneous model ecosystems.
@PyTorch: 模型优化与训练后量化 模型量化是一种减少VRAM使用并提高...
这篇来自NVIDIA的文章介绍了如何使用NVIDIA Model Optimizer库,通过训练后量化方法将CLIP模型量化为FP8格式,从而减少VRAM使用并提升在消费级GPU上的推理性能。
使用 NVIDIA NeMo AutoModel 加速 Transformer 微调
NVIDIA NeMo AutoModel 利用 HuggingFace Transformers v5,在微调 Mixture-of-Experts 模型时,无需修改代码(只需一个导入),即可实现 3.4 至 3.7 倍的训练吞吐量提升和 29% 至 32% 的 GPU 内存减少。
@tom_doerr: 压缩深度学习模型以加速推理 https://github.com/NVIDIA/Model-Optimizer…
NVIDIA Model Optimizer 是一个库,它使用量化、蒸馏、剪枝和推测解码等技术压缩深度学习模型以加速推理。它支持 Hugging Face、PyTorch 和 ONNX 模型,并与 NVIDIA 推理框架集成。
@heyshrutimishra:NVIDIA 刚刚发布了 Nemotron 3.5 Lightning,300 亿参数,只有 30 亿激活,专为执行层打造…
NVIDIA 发布了 Nemotron 3.5 Lightning,这是一个拥有 300 亿参数的 MoE 模型,只有 30 亿激活参数,针对智能体执行任务进行了优化。它声称在保持 OpenMDW-1.1 完全开源的同时,实现更快、更便宜的工具调用和智能体执行。