ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Windows 平台扩散模型量化与 ONNX Runtime 推理指南:基于 Model-Optimizer 的 FP4/FP8 Backbone 量化部署

Windows 平台扩散模型量化与 ONNX Runtime 推理指南:基于 Model-Optimizer 的 FP4/FP8 Backbone 量化部署 人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载本指南系统讲解如何在 Windows 环境下使用 Model-Optimizer 对扩散模型Stable Diffusion 3.x、Flux 等的去噪主干网络Backbone执行 PTQ 后训练量化FP8 / NVFP4导出为 ONNX 格式并借助 ONNX RuntimeTRTRTX 执行提供程序完成端到端推理。读完本文你将掌握从环境搭建、Backbone 量化、ONNX 后处理到 ONNX Runtime 推理的完整实战链路并能独立排查常见报错。背景为什么量化扩散模型的 Backbone在扩散模型中Backbone指去噪过程中承担主要计算的神经网络它负责在每个扩散步预测噪声是整个管线中计算量最大的部件。早期模型如 SDXL使用 U-Net 作为 Backbone而 SD3、Flux 等新一代模型则采用基于 Transformer 的 Backbone如SD3Transformer2DModel、FluxTransformer2DModel。Model-Optimizer 的 diffusers 量化示例 说明了如何量化这类 Backbone并能将量化后的 Backbone 导出为 ONNX供后续部署或优化使用。从 examples/diffusers/README.md 可知Backbone 部分通常占据扩散模型端到端推理延迟的 95% 以上因此对 Backbone 做 INT8 / FP8 / NVFP4 后训练量化PTQ可以在保持模型质量的前提下将模型体积压缩 2x–4x 并加速推理。环境安装与前置条件官方建议为 ONNX 导出、量化、推理等不同阶段分别创建独立的 Python 虚拟环境以避免依赖冲突。安装 Model-Optimizer 工具包及其依赖。Windows 平台下通常需要MSVC Compiler / Visual Studio / VC Redistributable、CUDA 等仓库内可参考 Windows 安装文档 与 examples/windows/README.md。安装 diffusers 量化示例 所需的依赖见 requirements.txt。推理阶段所需依赖请参照下文「使用 ONNX Runtime 推理」一节。注意模型量化/校准对 GPU 算力要求相对较高但量化所在的 GPU 不必与最终部署目标 GPU 相同。第一步用 Model-Optimizer 量化 Backbone仓库 examples/diffusers/quantization/quantize.py 提供了完整的量化脚本。核心流程为加载DiffusionPipeline→ 构建量化配置 → 用校准数据跑前向forward_loop→ 调用mtq.quantize()→ 按模型类型禁用部分量化器mtq.disable_quantizer→ 保存 checkpoint 并可选导出 ONNX。从源码看Quantizer.get_quant_config()会根据--format选择不同的预设配置定义于 config.pyFP8 使用FP8_DEFAULT_CONFIGNVFP4 对 SDXL 类模型使用NVFP4_FP8_CONV_CONFIG、对 Flux 类模型使用NVFP4_FP8_MHA_CONFIGFP4 线性层 FP8 多头注意力其余模型使用NVFP4_DEFAULT_CONFIG。--quantize-mha会额外追加*[qkv]_bmm_quantizer的 (4, 3) 位量化规则。量化配置的完整字段定义见 quantize_config.py参数默认值说明--modelflux-dev模型类型如sdxl-1.0、sd3-medium、sd3.5-medium、flux-dev、flux-schnell、ltx-video-dev、wan2.2-t2v-14b等--formatint8量化格式int8/fp8/fp4--quant-algomax量化算法max/svdquant/smoothquant--model-dtypeHalf管线加载精度Half/BFloat16/Float--trt-high-precision-dtypeHalfTensorRT 高精度层精度--quantize-mha关将 MHA 量化为 FP8INT8 格式下不支持--block-size16NVFP4 量化块大小--batch-size2校准 batch 大小--calib-size128校准样本总数--n-steps30校准去噪步数--cpu-offloading关显存不足时启用 CPU offloading--quantized-torch-ckpt-save-path无量化 PyTorch checkpoint 保存路径--onnx-dir无ONNX 导出目录--hf-ckpt-dir无HuggingFace checkpoint 导出目录典型的 NVFP4 量化命令对应本文的 Windows 验证环境python quantize.py \ --model sd3.5-medium \ --model-dtype Half \ --format fp4 \ --batch-size 2 \ --calib-size 128 \ --n-steps 30 \ --quantize-mha \ --quantized-torch-ckpt-save-path ./sd3.5_medium_nvfp4.pt \ --onnx-dir ./onnx_backbone若希望恢复--restore-from先前量化的 checkpoint脚本会自动通过检查TensorQuantizer的类型推断恢复出的量化格式NVFP4 / FP8 / INT8见quantize.py中的_infer_restored_quantization_format。第二步导出量化 Backbone 为 ONNX量化完成后quantize.py 中的ExportManager.export_onnx()会调用 onnx_utils/export.py 的modelopt_export_sd()完成 ONNX 导出这里有两个关键事实需要牢记导出使用 opset 20modelopt_export_sd中固定opset_version 20这是示例验证时torch.onnx.export支持的最高 opset 版本。FP4/FP8 量化模型的 ONNX 图包含 TRT 特定自定义算子例如用于动态量化的TRT_FP4DynamicQuantize以及 domain 为trt的DequantizeLinear。modelopt_export_sd对 FP4 精度会先通过configure_linear_module_onnx_quantizers()配置线性层量化器再调用NVFP4QuantExporter.process_model()生成含 TRT 自定义算子的最终模型。该导出函数还针对不同模型生成了动态轴与 dummy 输入SD3.5 的out_hidden_states、Flux 的img_ids/txt_ids/guidance等FP8 的 Flux 模型还会额外做 RoPE 权重类型修正flux_convert_rope_weight_type。第三步使用 ONNX Runtime 推理optimum-onnxruntime为包括扩散模型在内的多种模型提供了可直接运行于 ONNX Runtime 的 pipeline。整体流程如下。3.1 使用 Optimum-CLI 导出 FP16 ONNX 模型运行 SD、Flux 这类多模态模型需要管线中所有组件的 ONNX 文件文本编码器、VAE 编码/解码器等。HuggingFace 的optimum-cli可用于将模型导出为 ONNX一般使用onnxruntime-gpu完成 FP16 导出。导出 SD3.5-Medium FP16 ONNX 模型的命令optimum-cli export onnx --model stabilityai/stable-diffusion-3.5-medium --dtype fp16 --device cuda --task text-to-image --opset 20 ./sd3.5_medium_fp16该命令会为管线中的每个组件生成 ONNX 文件并在输出根目录下为每个组件建立独立子目录。建议在独立的 Python 虚拟环境中执行 ONNX 导出。3.2 后处理一将量化 Backbone 的 opset 升级到 23ONNX 的opset 23才支持 Q/DQ 节点中的 FP4 数据类型。因此需要把量化 Backbone ONNX 模型的 opset 升级到 23该过程会修改 ONNX 图中所有在 opset 21 至 23 之间含两端定义发生变化的受影响节点最后将模型的 opset 字段设为 23。示例代码如下model onnx.load(onnx_path) # ... # update affected nodes, if any, as per new opset # ... new_opset_imports [ helper.make_opsetid(, 23), # Default domain # # Update other domains as needed, for example: # helper.make_opsetid(com.microsoft, 1) # Microsoft domain for contrib-ops helper.make_opsetid(trt, 1) # TRT domain for TRT specific custom-ops ] updated_quantized_onnx_model onnx.helper.make_model(model.graph, opset_importsnew_opset_imports) # ... # save updated quantized onnx model # ...3.3 后处理二更新 TRT 自定义算子的输出类型信息由于 ONNX Runtime 无法自动推断 TRT 自定义算子的输出张量类型需要显式为量化 Backbone ONNX 模型中 TRT 自定义算子的输出补充类型信息否则可能在创建 Session 或推理时触发类型推断错误。本示例提供了现成脚本 type_update_trt_custom_ops.pypython type_update_trt_custom_ops.py --input_pathE:\model.onnx --output_pathE:\output\model.onnx从脚本源码可以看到其内部逻辑遍历图中所有节点对TRT_FP4DynamicQuantize节点将output_0标记为TensorProto.FLOAT4E2M1NVFP4将output_1标记为TensorProto.FLOAT8E4M3FNFP8对 domain 为trt的DequantizeLinear节点将其输出标记为TensorProto.FLOAT。若对应的value_info不存在则新建不指定 shape最后以外部数据形式保存模型save_as_external_dataTrueall_tensors_to_one_fileTrue。3.4 使用 TRTRTX 执行提供程序运行 FP4 / FP8 模型ONNX Runtime 的TRTRTX Execution Provider已更新以支持 FP4/FP8 量化模型中的 TRT 特定自定义算子。你可以从源码构建或在 PyPI 上安装官方提供的 wheel。安装与使用细节请参考 ONNX Runtime 官方 TRTRTX EP 文档。已知限制目前 NVFP4 模型在 TRTRTX EP 上执行存在一些已知的性能问题建议持续关注官方后续更新。3.5 放置量化 Backbone 的 ONNX 模型将第 3.2 / 3.3 步处理后得到的量化 Backbone ONNX 模型文件放到 3.1 步导出的 ONNX 模型结构中对应组件Backbone的子目录内替换其中的 FP16 版本。3.6 使用 optimum-onnxruntime 推理optimum-onnxruntime提供ORTStableDiffusion3Pipeline、ORTFluxPipeline等高层 pipeline可方便地加载上述导出的 ONNX 图并执行推理。实践时可以参考 ONNX Runtime 推理示例仓库中的 Stable Diffusion 推理示例脚本。支持矩阵以下为 Windows ONNX RuntimeTRTRTX EP路径下经过验证的模型支持情况模型fp8nvfp4¹SD3-Medium-Diffusers❌✅SD3.5-Medium✅✅Flux.1.Dev²✅✅¹ NVFP4 推理需要 Blackwell 系列 GPU 才能获得加速收益。² 在 RTX5090 上量化 Flux.1.Dev 时建议启用 CPU offloading 并配备 128 GB 以上的系统内存。PTQ 后的精度损失因具体模型与量化方法而异基础模型越小精度损失通常越明显。若精度不达标可尝试禁用 KV-Cache 或 MHA 量化或调整校准设置校准样本数据、样本数量、扩散步数等也可考虑 QAT / QAD当前尚未在 Windows RTX 上支持/验证。已验证环境Validated Settings以下是在本示例路径上完成验证的软硬件组合可作为复现基线Python 3.11.9CUDA 12.9、cuDNN 9.5cudnn-windows-x86_64-9.5.0.50_cuda12-archiveWindows 11Build 22621RTX 5090 RTX Driver 581.42Visual Studio 2022Community 版基础模型stabilityai/stable-diffusion-3.5-medium任务类型text-to-imageONNX 导出HuggingFace Optimumopset 20FP16 ONNX 模型推理 EP功能验证TRTRTX EP量化配置NVFP4 max校准FP4 线性层、FP8 MHA常见问题排查1. FP16 ONNX 导出报 no cuda kernel image is available 类错误使用 HuggingFaceoptimum-cli导出 FP16 ONNX 时偶尔会出现该错误。通常与安装的onnxruntime-gpu版本有关可尝试更换/升级onnxruntime-gpu版本。2. Flux / Stable Diffusion 导出 ONNX 报aten::rms_norm不支持使用 Model-Optimizer 的 diffusers 示例 导出时可能出现如下错误torch.onnx.errors.UnsupportedOperatorError: Exporting the operator aten::rms_norm to ONNX opset version 20 is not supported将diffusers降级到 0.34 版本而非 0.35 或更高可以规避该问题另一种方式是对导出脚本施加一个小补丁类似社区 PR 中提出的做法。另外quantize.py 的主入口在启动时会用diffusers的RMSNorm替换torch.nn.RMSNorm这本身就是为了缓解新旧版本间 RMSNorm 算子差异的手段。3. 新版 transformers 导入错误使用 transformers 4.53、4.56 等较新版本时可能遇到ImportError: cannot import name CLIPSdpaAttention from transformers.models.clip.modeling_clip可将 transformers 降级到较早版本例如 4.51.3 或 4.49以解决。小结完整的落地路径可归纳为四步用 quantize.py 对 Backbone 做 FP8/NVFP4 PTQ 量化 → 用modelopt_export_sd导出 opset 20 的量化 ONNX含 TRT 自定义算子→ 用 Optimum-CLI 导出全管线 FP16 ONNX 并将量化 Backbone 的 opset 升级到 23、通过 type_update_trt_custom_ops.py 补齐 TRT 算子输出类型 → 最后用 TRTRTX EP ORTStableDiffusion3Pipeline/ORTFluxPipeline完成推理。这套方法目前已在 Windows RTX 5090 上对 SD3.5-Medium、Flux.1.Dev 等模型完成验证是 Windows 环境下将扩散模型量化并交付 ONNX Runtime 推理的一条可直接复用的工程路径。赞分享人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载相关推荐Model Optimizer 扩散模型量化部署实战ONNX 导出与 TensorRT 引擎构建完整指南Model Optimizer 扩散模型量化部署实战ONNX 导出与 TensorRT 引擎构建完整指南 本篇指南基于 Model Optimizer 仓库中人工智能大模型模型优化模型量化模型压缩Model Optimizer Windows 平台 ONNX PTQ 量化实战指南INT4 AWQ/RTN 与 FP8 的完整工作流Model Optimizer Windows 平台 ONNX PTQ 量化实战指南INT4 AWQ/RTN 与 FP8 的完整工作流 导读 本文基于 Mod人工智能大模型模型优化模型量化模型压缩Model-Optimizer ONNX 后训练量化PTQ实战指南从 INT8/FP8/INT4 量化到 TensorRT 部署Model Optimizer ONNX 后训练量化PTQ实战指南从 INT8/FP8/INT4 量化到 TensorRT 部署 导读 本文围绕 exam人工智能大模型模型优化模型量化模型压缩创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表