vLLM-Omni 在线量化(Online Quantization)完全指南:加载期动态量化 FP8 / Int8 / MXFP8 / MXFP4 📅 发布时间:2026/9/17 20:10:45 👁 浏览次数: vLLM-Omni 在线量化Online Quantization完全指南加载期动态量化 FP8 / Int8 / MXFP8 / MXFP4【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni导读本文聚焦 vLLM-Omni 的在线量化Online Quantization能力在模型加载阶段实时计算量化权重与缩放因子无需预先准备独立的量化 checkpoint即可获得显存收益。文章完整覆盖在线量化的支持矩阵、Python API 与 CLI 配置方式、核心参数语义并结合仓库源码quantization 工厂、MXFP8 配置、MXFP4 配置、Int8 配置深入讲解底层加载流程与平台分发机制帮助读者在 Qwen-Image、Wan2.2 等扩散模型上正确启用并验证在线量化。什么是在线量化在线量化Online Quantization指的是 vLLM-Omni 在加载模型的过程中实时计算量化权重quantized weights与缩放因子scales的工作模式。它的核心价值在于只需一份 BF16/FP16 原始 checkpoint即可在启动阶段完成量化省去单独准备量化 checkpoint 的全部预处理流程。这一模式与预量化 checkpoint 格式有本质区别。GGUF、AutoRound、msModelSlim、序列化 TorchAO checkpoint、序列化 Int8 checkpoint 等格式均在服务启动前完成量化权重与缩放因子直接存储在磁盘上由各自方法专属的文档说明参见 量化概览 中的模式对比表。对于 MXFP8 与 MXFP4本页负责说明从 BF16 checkpoint 出发的加载期量化而由 msModelSlim 与合并工具产出的离线 checkpoint则应遵循 MXFP8 与 MXFP4 页面中的离线模式说明。从源码结构看在线/离线两条路径共用同一套方法名如mxfp8、mxfp4_dualscale由配置中的is_checkpoint_*_serialized系列标志区分模式get_quant_method()依据该标志选择对应的线性层实现。这一设计在 量化设计文档 的 Online and pre-quantized checkpoints 一节有明确阐述方法配置拥有模式标志的所有权加载器据此消费序列化张量或实时量化权重。硬件支持矩阵在线量化在不同硬件平台上的支持情况由方法实现内的平台检查决定参见 量化设计文档 中 Platform and parallelism boundaries 一节——平台检查放在方法实现而非公共工厂中以保证配置解析可移植。当前各平台支持情况如下设备FP8 W8A8Int8 W8A8MXFP8 W8A8MXFP4 W4A4NVIDIA Blackwell GPU (SM 100)✅✅⭕⭕NVIDIA Ada/Hopper GPU (SM 89)✅✅⭕⭕NVIDIA Ampere GPU (SM 80)✅✅⭕⭕AMD ROCm⭕⭕⭕⭕Intel XPU⭕⭕✅⭕Ascend NPU❌✅✅✅图例✅表示支持❌表示不支持⭕表示本指南未验证。Ampere 上的 FP8 在可用时会走 weight-only 路径。MXFP8 与 MXFP4 的文档说明面向 Ascend NPU 路径。几点值得注意的源码级佐证与补充Int8 同时覆盖 CUDA 与 Ascend NPU从 DiffusionInt8Config.get_quant_method() 可以看出非序列化即在线模式下CUDA 平台选择Int8OnlineLinearMethodNPU 平台选择NPUInt8OnlineLinearMethod其他平台直接抛出NotImplementedError。MXFP8 覆盖 NPU 与 Intel XPU在 DiffusionMXFP8Config.get_quant_method() 中NPU 在线路径使用NPUMxfp8OnlineLinearMethod基于npu_dynamic_mx_quantXPU 在线路径则复用 vLLM 的Mxfp8OnlineLinearMethod内核并通过VllmMxfp8OnlineLinearMethod扩展了 3D 张量支持。MXFP4 的 NPU 与 ROCm 分支在线 MXFP4 除 Ascend NPU 外还在 ROCm 上提供了 gfx950MI355X路径见 ROCmMxfp4OnlineLinearMethod通过 AITER 的gemm_a4w4实现 W4A4 在线量化不过本指南的验证矩阵仍以 NPU 路径为主。模型类型支持在线量化在不同模型类型上的验证状态分为三类均以扩散模型Diffusion Model为主要验证目标。扩散模型Qwen-Image、Wan2.2方法指南示例模型状态FP8 W8A8FP8Qwen-ImageWan2.2 未验证已验证 Qwen-Image 系列及其他 DiT 模型Int8 W8A8Int8Qwen-ImageWan2.2 未验证已验证 Qwen-Image 与 Z-ImageMXFP8 W8A8MXFP8Wan2.2-T2V-A14B、Wan2.2-I2V-A14B、Wan2.2-TI2V-5B已在 Ascend NPU 与 Intel XPU 上验证MXFP4 W4A4MXFP4Wan2.2-T2V-A14B、Wan2.2-I2V-A14B仅 Ascend NPUTI2V-5B 不支持补充说明来自方法页面的交叉信息FP8 的ignored_layers建议Qwen-Image 在质量回退时建议跳过图像流 MLPimg_mlp因为去噪 latent 范围随 timestep 漂移深层 DiT 块中的小误差会累积见 FP8 指南。MXFP8 的级联模型处理Wan2.2-T2V-A14B / I2V-A14B 是 MoE 级联模型在线量化会同时量化transformer与transformer_2两个 transformer见 MXFP8 指南。MXFP4 的 TI2V-5B 排除原因Wan2.2-TI2V-5B 参数量过小对 4-bit 量化噪声过于敏感W4A4 会造成不可接受的精度损失请改用 MXFP8见 MXFP4 指南。多阶段 Omni/TTS 模型Qwen3-Omni、Qwen3-TTS在线量化目前未对 omni/TTS 阶段进行验证。对于 Qwen3-Omni 及相关模型当 checkpoint 可用时优先采用 checkpoint 声明的 ModelOpt 或 AutoRound 路径这两者属于预量化 checkpoint 模式。这与 Int8 指南 中 Multi-Stage Omni/TTS Model 一节的结论一致omni/TTS 阶段的量化作用域默认限定在 AR 语言模型阶段且需要 checkpoint 内含受支持的quantization_config才会生效。多阶段扩散模型BAGEL、GLM-Image在线量化必须被路由到预期的 stage。BAGEL 与 GLM-Image 在列入受支持目标之前需要先完成模型专属验证。这与 FP8 指南 中 Multi-Stage Diffusion Model 一节一致量化需附加到指定 stage而非全局应用。配置方式Python APIfrom vllm_omni import Omni omni_fp8 Omni(modelyour-model, quantizationfp8) omni_int8 Omni(modelyour-model, quantizationint8) omni_mxfp8 Omni(modelyour-model, quantizationmxfp8) omni_mxfp4 Omni(modelyour-model, quantizationmxfp4) omni_mxfp4_dualscale Omni(modelyour-model, quantizationmxfp4_dualscale)CLIvllm serve your-model --omni --quantization fp8 vllm serve your-model --omni --quantization int8 vllm serve your-model --omni --quantization mxfp8 vllm serve your-model --omni --quantization mxfp4 vllm serve your-model --omni --quantization mxfp4_dualscale按组件路由Per-component routing对于多组件流水线如扩散 transformer VAE可以使用build_quant_config()构建按组件区分的量化配置from vllm_omni.quantization import build_quant_config config build_quant_config({ transformer: {method: fp8}, vae: None, })build_quant_config()的完整签名与解析逻辑见 factory.py它接受None/none、方法名字符串、含method键的扁平字典、按组件区分的字典、既有QuantizationConfig对象等五种输入。其中字符串fp8这类输入会先查 Omni 覆盖表_OVERRIDES未命中再落到 vLLM 的量化注册表QUANTIZATION_METHODS未知方法会抛出ValueError并列出受支持方法。按组件区分的字典会被识别为ComponentQuantizationConfig其判定逻辑_is_per_component_dict()要求字典不含method/quant_method键且所有值均为 str、dict 或 None。ComponentQuantizationConfig的路由规则见 component_config.py组件键被解释为运行时层前缀runtime layer-prefix最长前缀匹配优先前缀按长度降序排列None值表示对匹配组件禁用量化如示例中的vae: None使 VAE 保持 checkpoint 精度default键如有处理无显式匹配的前缀匹配到的子配置正常委托其get_quant_method(layer, prefix)。需要特别留意前缀匹配发生在模型权重名映射WeightsMapper之后。若映射后前缀不匹配层会静默落入 default 配置。因此新增模型集成时必须验证实际运行时前缀参见 量化设计文档 的 Per-component routing 一节。此外build_quant_config()也支持在扁平字典中附加额外参数例如config build_quant_config( {method: fp8, ignored_layers: [img_mlp]}, # 或直接传关键字参数 )方法别名是大小写不敏感且-/_等价的例如auto-round与auto_round均归一到 INC/AutoRound 适配器。若 checkpoint 的config.json中声明了quantization_configresolve_quant_config_from_disk() 会在加载时进行元数据对账无活动配置时自动检测方法不匹配时直接报错防止权重被静默错误解释磁盘标记为序列化但活动配置为在线时自动重建为离线配置ignored_layers不一致时按 checkpoint 重建。核心参数详解参数适用方法说明methodFP8、Int8、MXFP8、MXFP4量化方法fp8、int8、mxfp8、mxfp4或mxfp4_dualscaleignored_layersFP8、Int8、MXFP8、MXFP4保持 BF16/FP16 精度的层名模式activation_schemeFP8、Int8运行值dynamic选择在线激活缩放weight_block_sizeFP8可选的按块block-wiseFP8 权重量化大小num_bf16_fallback_layersMXFP4 DualScale在线mxfp4_dualscale模式下保持 BF16 的前置 transformer 块数量默认5各参数的源码级语义如下ignored_layers在所有方法配置中生效。配置的get_quant_method()会调用is_layer_skipped(prefix, ignored_layers, fused_mapping)命中的层返回UnquantizedLinearMethod()即保持 BF16 原权重其余线性层才进入量化路径。可用名称取决于模型架构例如to_qkv、to_out、img_mlp、txt_mlp见 FP8 指南 参数表。ignored_layers同样会经受WeightsMapper映射apply_vllm_mapper以保证与映射后的运行时前缀一致。activation_scheme对 Int8 而言当前仅支持dynamic在线激活缩放静态方案会直接抛ValueError见 int8_config.py 中ACTIVATION_SCHEMES [dynamic]的约束对 FP8 而言dynamic为默认且无需校准static在具备校准缩放信息时可用见 FP8 指南。num_bf16_fallback_layersMXFP4 DualScale 在线模式该参数仅在mxfp4_dualscale在线模式中生效。从 DiffusionMXFP4DualScaleMixedConfig.get_quant_method() 可以看出在线路由按优先级应用三条规则显式ignored_layers命中的层 → BF16用户指定、可任意交错块索引小于num_bf16_fallback_layers的前置块blocks.0.*~blocks.N-1.*通过正则^blocks\.(\d)\.解析→ BF16其余线性层 →NPUMxfp4DualScaleOnlineLinearMethod。默认值为5__init__中num_bf16_fallback_layers: int 5。对 Wan2.2-A14B 的精度评估表明该默认值是合理起点见 MXFP4 指南。blocks.N.*之外的层如condition_embedder默认始终走在线 MXFP4除非显式列入ignored_layers。在线量化的底层工作原理在线量化之所以能加载即量化依赖一整套按平台分发的线性层实现。以 NPU 上的 MXFP8 在线路径为例其核心流程可以拆解为三个阶段见 mxfp8_config.py1. 惰性权重创建meta device 补丁加载器_LazyWeightMixin.create_weights()将权重先注册在 meta device 上并包装一个补丁版weight_loader。当第一片loaded_weight到达时参数在目标设备上即时物化just-in-time materialization随后每片权重通过CopyNumelCounter累计加载元素数当_loaded_numel weight.numel()时自动触发process_weights_after_loading()并置位_already_called_process_weights_after_loading防止重复处理。这一机制同样用于 Int8 与 MXFP4 的在线路径int8_config.py 中的LazyWeightMixin还支持enable_offload_after_quant()每层量化完成后立即归还主机内存把加载期设备占用封顶为单层规模。2. 权重实时量化process_weights_after_loading()中调用 NPU 算子torch_npu.npu_dynamic_mx_quant(weight, dst_typefloat8_e4m3fn)把 BF16/FP16 权重实时量化为 FP8 权重加 MX 缩放每 32 个 K 维元素共享一个float8_e8m0fnu指数缩放然后规整为与离线路径共享的规范 GEMM 布局权重转置为(K, N)缩放重塑为(S/2, N, 2)。3. 前向量化算子_quantize_activation()与_quant_matmul()分别对激活做动态 MX 量化并调用npu_quant_matmul完成 W8A8 量化 GEMM。MXFPLinearMethodBase.apply()提供了平台无关的骨架展平 →_apply_inner→ 还原形状子类只需实现量化/矩阵乘两个钩子或像 dual-scale 那样重写_apply_inner。MXFP4 在线路径与此同构差异在于精度为float4_e2m1fn_x2FP4 打包、每字节两个值、权重不做预转置打包张量转置不保证连续、GEMM 需显式指定x1_dtype/x2_dtype见 mxfp4_config.py。mxfp4_dualscale在线模式则使用npu_dynamic_dual_level_mx_quant实时计算细粒度per-32与粗粒度per-512两级缩放无校准mul_scale时以单位向量填充见 NPUMxfp4DualScaleOnlineLinearMethod。Int8 在线路径在 CUDA 上通过ops.scaled_int8_quant生成量化权重与权重缩放见 Int8OnlineLinearMethod在 NPU 上通过torch_npu.npu_dynamic_quant实现并受NPU_QUANT_MATMUL_MAX_OUT_FEATURES 65535上限约束——输出维度超过该限值的层会在 TP 分片后仍超限时自动回退为未量化层日志警告并建议提高 TP 度数使该层回到范围内见 int8_config.py。FP8 在线路径本身经由 vLLM 注册表解析Omni 未为其注册覆盖项Blackwell 上还可在安装可选quack内核后自动融合alpha * (A B) bias进一步提升视频 DiT 小 GEMM 场景的性能详见 FP8 指南 的 Faster FP8 GEMM on Blackwell 小节。分布式场景的边界在线量化生成的权重与缩放是在普通加载器中创建的因此直接 checkpoint mmap--enable-distributed-layerwise-offload的直读路径无法准备在线量化张量。per-tensor 在线 FP8 可与 DLO 的默认 AllGather 路径组合各 rank 先经由普通加载器生成最终 FP8 权重再分片其他在线方法在打包与缩放布局验证完成前仅限--dlo-no-use-allgather见 量化设计文档 的 Platform and parallelism boundaries 一节。验证与注意事项对比 BF16 基线将在线量化输出与相同种子seed和生成参数下的 BF16 基线进行对比确认质量损失在可接受范围内。仓库提供了专门的轨迹相似度对比工具vllm_omni/quantization/tools/compare_diffusion_trajectory_similarity.py入口与参数见其parse_args()例如python -m vllm_omni.quantization.tools.compare_diffusion_trajectory_similarity \ --task t2i \ --model Qwen/Qwen-Image \ --candidate-quantization fp8 \ --ignored-layers img_mlp \ --prompt a cup of coffee on the table \ --height 512 --width 512 \ --num-inference-steps 20 \ --seed 142 \ --output-json /tmp/qwen_image_fp8_similarity/result.json \ --save-output-dir /tmp/qwen_image_fp8_similarity/images \ --enforce-eager该工具使用相同 prompt、种子、分辨率、调度器设置与推理步数对比参考运行与量化候选运行报告cosine_similarity、mae、mse/rmse、max_abs、l2/relative_l2、psnr_db以及生成时延与峰值显存等指标详见 量化概览 的 Output Similarity Comparison Tool 一节其中给出了建议的起步阈值如psnr_db 20.0、cosine_similarity 0.98。使用ignored_layers保护敏感层对质量敏感的 MLP 或输出投影层如img_mlp、to_out建议通过ignored_layers保留 BF16。FP8 指南指出图像流 MLP 是常见敏感目标因为去噪 latent 范围随 timestep 漂移深层 DiT 块中逐层小误差会累积放大。文档化跳过层在把新模型标记为受支持之前先在对应方法页面记录任何必需的跳过层ignored_layers选择。已有量化权重的模型请走预量化路径如果模型本身已携带量化权重应使用匹配的预量化方法指南如 ModelOpt、AutoRound、序列化 Int8、msModelSlim、离线 MXFP8/MXFP4 DualScale而非在线量化。源码层面resolve_quant_config_from_disk()会在 checkpoint 声明序列化标志但活动配置为在线时自动重建为离线配置方法不匹配时则直接报错而非隐式转换。Ascend MXFP4 生产部署建议当生产质量比避免预处理更重要时优先使用离线mxfp4_dualscalecheckpoint。离线 checkpoint 从磁盘加载经校准的mul_scale张量精度可测优于任何在线方法见 MXFP4 指南 的推荐框在线mxfp4_dualscale由于没有校准mul_scale两级缩放均为实时计算。另需注意在线单尺度mxfp4与离线双尺度mxfp4_dualscale的加载方法不可混用否则会产生错误结果或形状错误。小结在线量化是 vLLM-Omni 在无需预处理、开箱即省显存场景下的首选路径FP8 与 Int8 面向 NVIDIA CUDA 平台Ampere 及以上MXFP8 面向 Intel XPU 与 Ascend NPUMXFP4 目前仅验证于 Ascend NPU。它通过统一的quantizationmethod入口与build_quant_config()组件路由机制接入任意流水线底层由_LazyWeightMixin 平台专属process_weights_after_loading实现边加载边量化并在ignored_layers、num_bf16_fallback_layers等参数配合下为质量敏感层保留 BF16。启用任何新模型前务必使用轨迹相似度工具对照 BF16 基线完成数值验证并在方法页面记录必需的跳过层。更进一步读者可结合 量化设计文档 了解配置解析、组件路由与 checkpoint 元数据对账的完整架构结合 FP8、Int8、MXFP8、MXFP4 各方法页获取模型级验证细节与离线模式指引。【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考