生成式人工智能/大语言模型

使用量化感知训练微调 gpt-oss 提高准确性和性能

对于 AI 社界而言,主要的开源基础模型版本带来了独特的架构创新与功能突破,正掀起一股令人振奋的浪潮。作为 OpenAI 实验室自 GPT-2 以来推出的首个开源模型系列,gpt-oss 始终表现卓越。该系列集成了专家级混合架构(MoE)、长达 128K 的上下文长度,以及可调节的深度推理能力。其中规模较大的变体 gpt-oss-120B,在多项公开基准测试中展现出与 OpenAI 闭源的 o3 和 o4 模型相媲美的性能。

尽管在开放基准测试中表现出色,大多数基础模型在医疗健康和金融等低容错行业的生产环境中,仍需经过有效的部署后训练技术。OpenAI 发布的 gpt-oss 在原生 MXFP4 精度下实现业界首创,但也为微调带来了独特的挑战。

在这篇博客文章中,我们分享并深入分析了 gpt-oss 微调工作流的影响。该工作流能够在保留 FP4 性能优势的同时,有效恢复训练后的准确性。

  • 在模型的 BF16 升级版本上执行监督式微调 (SFT) 。
  • 使用 NVIDIA TensorRT Model Optimizer 应用量化感知训练 (QAT) 。

采用 gpt-oss 的 SFT 和 QAT

一种令人兴奋的原生FP4格式模型训练新技术在缩短训练时间方面展现出巨大潜力,但其优化重点在于效率而非准确性的恢复。然而,在gpt-oss微调任务中,原生MXFP4精度尚未实现稳定的准确性表现。这给微调带来了挑战,因为模型必须首先提升至更高精度,以确保梯度累积的稳定性。

在上投射之后,高精度检查点成为初始SFT训练的重点;随后可通过应用QAT将模型恢复至FP4精度,并重建特定任务的性能(图2)。该方法使SFT能够强化特定任务的行为,而QAT则负责根据目标低精度格式调整权重,从而实现部署时的对齐性与性能优化。

Flowchart diagram illustrating the Quantization-Aware Training (QAT) and Supervised Fine-Tuning (SFT) training loop for gpt-oss models.
图 1。适用于 gpt-oss 的 QAT 和 SFT 工作流:从上投射检查点到量化就绪型模型l

该 recipe 的完整代码可通过 Model Optimizer 仓库 获取。此训练示例基于 Hugging Face 的 gpt-oss-recipes 中的微调示例改编,集成了 QAT 及其他推荐组件。以下是相关步骤的简要概述:

  1. 将原始 MXFP4 检查点升级到 BF16/ FP16:使用 Hugging Face 的 Transformer 库轻松完成将升级到 BF16/ FP16,可提供更稳定的梯度,并使 QAT 能够在重新量化回 FP4 时有效恢复准确性。这种上投射过程提供了一种可接受的权衡,因为完全在 FP4 中进行微调的计算优势极小,而且微调通常比预训练使用更少的 token。
  2. 执行 SFT:为您的用例和上投射精度 ( BF16 或 FP16) 模型使用适当的微调数据集,在不量化的情况下执行监督式微调。
  3. 使用 TensorRT Model Optimizer 进行量化:使用 mtq.quantize() 函数对 BF16 微调模型进行量化。此函数为 PTQ 或 QAT 准备模型。
import modelopt.torch.quantization as mtq

config = mtq.MXFP4_MLP_WEIGHT_ONLY_CFG

# Define forward loop for calibration
def forward_loop(model):
    for data in calib_set:
        model(data)

# quantize the model and prepare for QAT
model = mtq.quantize(model, config, forward_loop)
  1. 微调 FP4 量化模型:第二个微调步骤是以较小的学习率 (例如,1e-5 with Adam) 执行 QAT 步骤。
# QAT with a regular finetuning pipeline
train(model, train_loader, optimizer, scheduler, ...)

合适的 QAT 超参数和训练时长均为可优化的变量。我们发现,若跳过第一步而直接进入 QAT,模型准确率会有所下降。因此,建议先进行高精度微调,再通过 QAT 进一步优化,以取得更优的结果。在实现令人满意的收敛后,可利用 Model Optimizer API 将模型导出为标准的 PyTorch 检查点,便于在公开基准和自定义任务上进行验证。

MXFP4 QAT 微调对 gpt-oss 的影响

为验证上述 QAT 微调工作流的有效性,我们选取了两项具体的下游任务进行评估:增强非英语推理能力(基于 OpenAI Cookbook 的多语种数据集)以及降低对安全用户提示的不必要拒绝率(使用 Amazon 的 FalseReject 数据集)。初始结果显示,未经微调的 gpt-oss 在这两项任务上的表现尚有提升空间,得分分别为 16% 和 30%(见图 3)。在应用该方法后,两项任务的合格率均提升至 98%,展现出显著的性能改进。

The table shows validation pass rates of gpt-oss-20b under different training and quantization methods.
图 2。gpt-oss-20b 在原始、SFT、PTQ 和 QAT 方法中的验证通过率

尽管该模型的结果凸显了在 gpt-oss 微调中采用上投射和应用 QAT 在恢复准确性方面的有效性,但在特定任务上仍存在进一步提升性能的空间。随着 NVIDIA Blackwell 的发布,NVFP4 引入了一种全新设计的 FP4 格式,专为提升训练和推理效率而优化。结合 QAT 使用时,能够实现更优的准确性恢复(图 3)。

A flowchart illustrating deployment decision paths for models trained with MXFP4 checkpoints.
图 3。流程图显示了 MXFP4 检查点的部署选项,包括直接部署、QAT 到 MXFP4 或 QAT 到 NVFP4,以提高特定任务的准确性

NVFP4 使开发者能够在第二代 NVIDIA Transformer 引擎中利用专用指令,将高达 15 PFLOPS 的 FP4 NVIDIA Blackwell Ultra 计算能力与更优的模型精度表现相结合。E4M3 FP8 的缩放精度在“假量化”过程中表现出色,有效减少了前向传播中的量化误差,使原始模型权重更易于适配目标精度。上述 MXFP4 方案仅需修改一行代码即可迁移至 NVFP4,具体代码示例如下文所示。

* 要执行 NVFP4 PTQ/ QAT,只需替换 MXFP4_MLP_WEIGHT_ONLY_CFGconfig = mtq.NVFP4_ MLP_ WEIGHT_ ONLY_ CFG
* 或者,执行权重激活量化以提高性能 config = mtq.NVFP4_ MLP_ONLY_ CFG

在此采用 gpt-oss 微调方法后,对比 MXFP4 与 NVFP4 的验证损失,我们发现 NVFP4 在收敛表现上更为优异。使用 NVFP4 时,相关任务的验证损失降低了 2% 至 3%(见图 4)。这一改进可为要求更高的场景提供余量,例如深度推理、更严格的阈值设定,或对容错能力要求较低的下游任务。

Grouped bar chart comparing validation loss for gpt-oss-20B on two downstream tasks—Multi-Lingual and FalseReject—under different training and quantization methods.
图 4。跨 SFT、PTQ 和 QAT 的多语种和 FalseReject 任务的验证损失,适用于 NVFP4 和 MXFP4 格式

随着 NVIDIA TensorRT-LLM 即将支持 gpt-oss 中的 NVFP4,开发者将能够更便捷地采用 NVFP4 技术。我们也在积极推进 gpt-oss NVFP4 与各类主流开源推理框架的集成。在此之前,基于 MXFP4 的 SFT 与 QAT 工作流仍是一条经过验证的有效路径。待 gpt-oss 完全支持 NVFP4 后,NVIDIA Blackwell 架构将能够沿用相同方法实现更优的精度表现。

部署经过微调的模型 

执行此 recipe 后,您可以使用 便捷脚本 提供通过 Model Optimizer 库将 BF16 训练得到的检查点转换为 MXFP4 格式。

python examples/gpt-oss/convert_oai_mxfp4_weight_only.py --model_path qat_model_dir/ --output_path qat_model_mxfp4/

该 recipe 生成的 MXFP4 检查点已通过上游 SGLang、TensorRT-LLM 和 vLLM 进行验证。以下命令可用于在 TensorRT-LLM 1.1.0rc1 环境中部署。

# Use trtllm-serve to host endpoint
trtllm-serve qat_model_mxfp4/ --tokenizer <tokenizer_path> --max_batch_size <max_batch_size> --max_num_tokens <max_num_tokens> --max_seq_len <max_seq_len> --tp_size <tp_size> --pp_size <pp_size> --host 0.0.0.0 --kv_cache_free_gpu_memory_fraction 0.95

总结

GPT-OSS 微调的核心挑战在于恢复 FP4 的准确性,同时保留对低精度部署具有价值的效率优势。通过将 SFT 升级至 BF16,再结合 QAT 对权重进行调整以适应低精度计算,能够有效弥补精度差距,从而使模型在生产环境中兼具可靠性与高效性。

在实践中,该方法能够恢复模型的准确性,并提升特定任务的性能,从而优化下游应用在用户体验、安全性和可用性方面的表现。这些改进有助于提高服务质量并带来更高的投资回报。展望未来,NVFP4 可提供更严格的误差控制,为更精确的数值计算和更深层次的推理提供额外空间。随着 TensorRT-LLM 及其他框架即将支持 gpt-oss 的 NVFP4,这些优势将进一步扩大。用户现可通过 NVIDIA Model Optimizer 资源库获取完整的 SFT+QAT 方案,快速开始使用。

 

标签