Prhub

#24288 [SKILL] Add diffusion benchmark presets for edit and Hunyuan3D models

原始 PR 作者 BBuf 合并时间 2026-05-05 08:18 文件变更 4 提交数 8 评论 7 代码增减 +217 / -6

执行摘要

新增 4 个 diffusion benchmark 预设(图像编辑和 3D 形状)

需要系统化评测扩散模型在图像编辑和 3D 生成场景下的去噪延迟和峰值显存,为后续优化提供可复现的基准。PR Body 提供了 FireRed 在单 GPU 与双 GPU Ulysses/CFG parallel 下的对比数据,说明选择 CFG parallel 的决策依据。

值得 benchmark 使用者和大模型 perf engineers 关注。PR 展示了如何通过实测数据(FireRed 1.0/1.1)做出多 GPU 策略选择(CFG parallel vs. Ulysses),以及如何用 config_overrides 实现模型级配置覆盖。但需注意文档与脚本的同步问题,建议采纳 review 中的修改建议。

讨论亮点

在 Code Review 中,gemini-code-assist[bot] 提出两个关键问题:

1) config_overrides 写入的目录应使用 benchmark 输出目录而非输入资产目录(ASSET_DIR),以避免只读环境问题;
2) benchmark-and-profile.md 中的 Hunyuan3D 手动命令示例未包含 --config 参数以禁用 paint stage,与脚本预设不同步。目前这两个问题在 PR 中未明确解决,需后续跟进。

实现拆解

  1. 新增 benchmark 预设:在 bench_diffusion_denoise.pyMODELS 字典中添加 joyai-editfirered-edit-1.0firered-edit-1.1hunyuan3d-shape 四个预设,每个预设包含模型路径、提示词、输入图片路径和额外参数。
  2. 引入 config_overrides 机制:为支持 Hunyuan3D-2paint_enable: False 配置,在 build_sglang_cmd 函数中新增 config_overrides 处理逻辑:将字典序列化为 JSON 文件并通过 --config 参数传递给 sglang generate
  3. 更新 GPU 需求函数:在 required_gpus_for_model 中添加 joyai-editfirered-edit-1.0firered-edit-1.1 三个预设返回 2 GPU 的需求。
  4. 完善文档:在 benchmark-and-profile.md 中新增预设表格条目和手动命令示例;在 SKILL.md(性能文档)中添加图像编辑和 3D shape 的执行命令,并总结多 GPU 选择结论;在基准测试技能入口 SKILL.md 中更新参考列表。
文件 模块 状态 重要度
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/scripts/bench_diffusion_denoise.py 基准脚本 modified 7.12
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/benchmark-and-profile.md 文档 modified 3.75
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-performance/SKILL.md 文档 modified 3.92
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/SKILL.md 文档 modified 1.72

关键符号

required_gpus_for_model build_sglang_cmd

关键源码片段

python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/scripts/bench_diffusion_denoise.py configuration

核心 benchmark 脚本,新增 4 个模型预设和 config_overrides 处理逻辑,支撑 image-edit 和 3D shape 基准测试。

# MODELS 字典新增预设 — 保持与 benchmark-and-profile.md 同步
MODELS = {
    # 16. Skill-only extra preset: JoyAI Image Edit
    "joyai-edit": {
        "path": "jdopensource/JoyAI-Image-Edit-Diffusers",
        "prompt": "Make the cat wear a red hat",
        "image_path": str(ASSET_DIR / "cat.png"),
        "extra_args": [
            "--width=1024", "--height=1024", "--num-inference-steps=40",
            "--guidance-scale=4.0", "--dit-layerwise-offload false",
            "--dit-cpu-offload false", "--num-gpus=2",
            "--enable-cfg-parallel", "--ulysses-degree=1",
        ],
    },
    # 17. Skill-only extra preset: FireRed Image Edit 1.0
    "firered-edit-1.0": {
        "path": "FireRedTeam/FireRed-Image-Edit-1.0",
        "prompt": "Make the cat wear a red hat",
        "image_path": str(ASSET_DIR / "cat.png"),
        "extra_args": [
            "--width=1024", "--height=1024", "--num-inference-steps=40",
            "--guidance-scale=4.0", "--dit-layerwise-offload false",
            "--dit-cpu-offload false", "--num-gpus=2",
            "--enable-cfg-parallel", "--ulysses-degree=1",
        ],
    },
    # 18. Skill-only extra preset: FireRed Image Edit 1.1
    "firered-edit-1.1": {
        "path": "FireRedTeam/FireRed-Image-Edit-1.1",
        "prompt": "Make the cat wear a red hat",
        "image_path": str(ASSET_DIR / "cat.png"),
        "extra_args": [
            "--width=1024", "--height=1024", "--num-inference-steps=40",
            "--guidance-scale=4.0", "--dit-layerwise-offload false",
            "--dit-cpu-offload false", "--num-gpus=2",
            "--enable-cfg-parallel", "--ulysses-degree=1",
        ],
    },
    # 19. Skill-only extra preset: Hunyuan3D Shape Generation
    "hunyuan3d-shape": {
        "path": "tencent/Hunyuan3D-2",
        "prompt": "generate 3d mesh",
        "image_path": str(ASSET_DIR / "cat.png"),
        "config_overrides": {"paint_enable": False}, # 关闭上色阶段,聚焦去噪
        "extra_args": [
            "--num-inference-steps=50", "--guidance-scale=5.0",
            "--dit-layerwise-offload false", "--dit-cpu-offload false",
        ],
    },
}# 在 build_sglang_cmd 中处理 config_overrides
if "config_overrides" in cfg:
    # 注意:当前写入 ASSET_DIR 的子目录,可能因只读失败;建议改用输出目录
    config_dir = ensure_dir(ASSET_DIR / "generated_configs")
    config_path = config_dir / f"{model_key}.json"
    with open(config_path, "w") as f:
        json.dump(cfg["config_overrides"], f)
    cmd.append(f"--config={config_path}")

评论区精华

config 文件写入路径应使用输出目录而非 ASSET_DIR 设计

gemini-code-assist[bot] 建议将生成的配置文件写入 benchmark 输出目录,因为 ASSET_DIR 可能只读。提供的建议代码将 config_dir 改为 get_output_dir("benchmarks", REPO_ROOT) / "generated_configs"。

结论:建议未明确确认是否采纳,从最终代码看可能保留原实现,存在只读风险。 · unresolved

Hunyuan3D 手动命令示例缺少关闭上色阶段的配置 documentation

gemini-code-assist[bot] 指出 manual command example 未包含 --config 参数以禁用 paint stage,而脚本预设中已包含 config_overrides: {paint_enable: false}。建议文档对齐脚本预设。

结论:未明确采纳,文档示例仍缺少该配置,可能导致用户复现结果不一致。 · unresolved

风险与影响

  1. 配置路径可写性:当前 config_overrides 生成的 JSON 文件写入 ASSET_DIR/generated_configs,若 ASSET_DIR 为只读则会导致脚本失败。
  2. 文档同步偏离benchmark-and-profile.md 中 Hunyuan3D 手动示例未体现 paint_enable: False 配置,用户可能复现出包含 paint 阶段的完整流水线,导致去噪延迟偏高且不可比。
  3. 多 GPU 策略固化:预设强制使用 2-GPU CFG parallel,但未考虑其他硬件环境(如 A100 或不同显存),直接复用预设可能因显存不足而 OOM。

影响范围:扩散模型 benchmark 流程和性能文档使用者。
影响程度:中低。新增的预设降低了 image-edit 和 3D shape 基准测试的配置门槛,但核心脚本和文档均位于 .claude/skills 目录,不是主代码路径,不会影响 SRT 运行时。对团队而言,这些预设为后续 diffusion 优化提供了标准化评估手段。

配置路径只读风险 文档与脚本预设不同步

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论