Prhub

#28928 [diffusion] Add Qwen-Image ModelOpt NVFP4 support

原始 PR 作者 BBuf 合并时间 2026-06-25 22:56 文件变更 10 提交数 13 评论 9 代码增减 +202 / -30

执行摘要

为 Qwen-Image 添加 ModelOpt NVFP4 量化支持

使 Qwen-Image 系列模型能在 Blackwell 硬件上以 NVFP4 精度运行,大幅降低显存占用并维持推理质量。基于 ModelOpt PR #1706 导出的 checkpoint 和 #28557 的草稿支持,为 SGLang Diffusion 增加原生 NVFP4 加载能力。

该 PR 设计清晰,特别是调制层名称规范化函数值得作为其他量化集成范本。建议后续为 Edit 系列添加 CI 覆盖,并考虑将 NVFP4 支持扩展到其他 diffusion 模型。

讨论亮点
  • 规范化函数简化:gemini-code-assist[bot] 建议使用 endswith(tuple) + removesuffix 替代显式循环,BBuf 采纳简化。
  • 文档更新建议:mickqian 询问是否更新 cookbook,BBuf 确认已完成。
  • CI 验证:BBuf 确认全部 CI 通过,AMD 失败与本次变更无关。

实现拆解

  1. 注册 NVFP4 模型路径:在 python/sglang/multimodal_gen/registry.py 中为 QwenImageSamplingParams 增加 nvidia/Qwen-Image-NVFP4 路径,使 NVFP4 完整模型库可通过 --model-path 直接加载。
  2. 添加调制层名称规范化:在 quantization_utils.py 中新增 _canonicalize_modulation_exclude 函数,将序列化权重中的 .img_mod.1/.txt_mod.1 映射为运行时前缀 .img_mod/.txt_mod,确保 NVFP4 配置中的排除列表正确。
  3. 集成到 NVFP4 配置构建:在 _build_nvfp4_config_from_safetensors_files 中在排序排除模块前应用该规范化,避免因名称不一致导致量化层被错误排除。
  4. 添加 B200 一致性测试:在 gpu_cases.py 中为 lmsys/qwen-image-2512-modelopt-nvfp4-sglang 注册一个 50 步 NVFP4 case,并更新 perf_baselines.jsonconsistency_threshold.json 使测试可通过。
  5. 更新部署文档和 Cookbook:修改 qwen-image-deployment.jsx 增加硬件平台(B200/B300/H200/H100)和精度(BF16/NVFP4)选择逻辑;更新 quantization.mdxQwen-Image.mdx 以反映新的 NVFP4 支持。
文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/utils/quantization_utils.py 量化层 modified 6.79
python/sglang/multimodal_gen/registry.py 模型注册 modified 4.82
docs_new/src/snippets/diffusion/qwen-image-deployment.jsx 部署脚本 modified 6.59
docs_new/docs/sglang-diffusion/quantization.mdx 量化文档 modified 4.9
python/sglang/multimodal_gen/test/server/gpu_cases.py GPU 测试 modified 4.5
python/sglang/multimodal_gen/test/server/perf_baselines.json 性能基线 modified 4.33
python/sglang/multimodal_gen/test/server/consistency_threshold.json 一致性阈值 modified 4.19
python/sglang/multimodal_gen/test/server/testcase_configs.py 测试配置 modified 4.19
python/sglang/multimodal_gen/test/test_utils.py 测试工具 modified 3.7
docs_new/cookbook/diffusion/Qwen-Image/Qwen-Image.mdx Cookbook modified 3.7

关键符号

_canonicalize_modulation_exclude

关键源码片段

docs_new/src/snippets/diffusion/qwen-image-deployment.jsx core-logic

部署交互组件:增加硬件平台(B200/B300/H200/H100)和精度(BF16/NVFP4)选择,根据配置自动切换模型路径。

const config = {
    modelFamily: 'Qwen-Image',
    options: {
        hardware: {
            items: [
                // 默认硬件改为 B200
                { id: 'b200', label: 'B200', default: true },
                { id: 'b300', label: 'B300', default: false },
                // ... 其他硬件
            ]
        },
        precision: {
            name: 'precision',
            title: 'Precision',
            items: [
                { id: 'bf16', label: 'BF16', default: true },
                {
                    id: 'nvfp4',
                    label: 'NVFP4',
                    default: false,
                    disabledWhen: (values) => !['b200', 'b300'].includes(values.hardware),
                    disabledReason: 'ModelOpt NVFP4 requires Blackwell hardware such as B200 or B300'
                }
            ]
        }
    },
    generateCommand: function(values) {
        const isBlackwell = ['b200', 'b300'].includes(values.hardware);
        const isNvfp4 = values.precision === 'nvfp4' && isBlackwell;
        // NVFP4 使用 lmsys 发布的量化 checkpoint
        const modelPath = isNvfp4
            ? 'lmsys/qwen-image-2512-modelopt-nvfp4-sglang'
            : 'Qwen/Qwen-Image';
        return `sglang serve --model-path ${modelPath} ...`;
    }
};// 切换硬件时自动重置精度
const handleRadioChange = (optionName, value) => {
    setValues((prev) => {
        const next = { ...prev, [optionName]: value };
        if (optionName === 'hardware' && !['b200', 'b300'].includes(value) && next.precision === 'nvfp4') {
            next.precision = 'bf16';
        }
        return next;
    });
};

评论区精华

简化 `_canonicalize_modulation_exclude` 实现 style

gemini-code-assist[bot] 建议使用 `str.endswith(tuple)` + `str.removesuffix` 替代原先的显式循环,使代码更简洁可读。

结论:BBuf 采纳建议并提交简化版本(commit 0aee57e)。 · 已解决

更新 Qwen-Image NVFP4 相关文档 documentation

mickqian 询问是否需要同步更新 cookbook 和量化文档以反映 NVFP4 支持。

结论:BBuf 确认已在后续提交中更新了 docs_new 下的部署脚本和量化矩阵。 · 已解决

风险与影响

  1. 依赖 ModelOpt 导出格式:NVFP4 checkpoint 依赖于 ModelOpt 特定版本的序列化格式,若 ModelOpt 更新可能不兼容。
  2. 单 case 覆盖不足:一致性测试仅包含 Qwen-Image-2512 一个 case,其他模型(Qwen-Image、Edit 系列)未被 CI 覆盖。
  3. Blackwell 独占:NVFP4 路径仅能在 B200/B300 上运行,其他硬件无法使用。
  4. 性能基线保守:新 case 的预期性能时间设为 120s,若实际收敛慢可能超时。

对用户:Blackwell 用户现在可直接加载 lmsys/* 的 Qwen-Image NVFP4 checkpoint,获得显存节省和推理加速。
对系统:CI 新增一个 NVFP4 case,估算增加 2 分钟运行时间。
对团队:需关注 ModelOpt 版本演进,确保导出格式兼容。

Blackwell 独占 单一 CI 覆盖 依赖 ModelOpt 版本 阈值保守

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论