Prhub

#34143 docs(diffusion): refresh skills for latest runtime

原始 PR 作者 BBuf 合并时间 2026-08-09 10:30 文件变更 7 提交数 1 评论 1 代码增减 +224 / -26

执行摘要

刷新 diffusion 技能文档与基准脚本,对齐最新运行时

PR body 明确说明:技能文档早于近期合并的 diffusion 模型、部署控制、量化 checkpoint 和内核快路径。具体问题是 --validate-nightly-alignment 因 comparison_configs.json 仍包含对比驱动的 --warmup 标志而失败(原生 CLI 已迁移到 --warmup-mode)。保持技能与实现一致,避免陈旧命令、重复优化、误导性的 ModelOpt 后端建议和错误的阶段级 benchmark 归因。

该 PR 值得快速浏览,重点看 bench_diffusion_denoise.py 两处逻辑变更和 existing-fast-paths.md 的 fast-path 清单——它们直接反映了近期 diffusion 内核优化(FLUX/GLM/SANA LayerNorm+modulate、Wan causal VAE 等)的落地状态。若你负责 diffusion 性能分析或维护 agent 技能,建议以此 PR 为基线核对本地技能版本;若只是普通用户,了解 SGLANG_DIFFUSION_SYNC_STAGE_PROFILING 的语义即可,不需要精读。

讨论亮点

本 PR 没有收到实质性的 review 评论或讨论线程(review_comments_count 为 0,comments 仅有作者触发的 /tag-and-rerun-ci 命令)。PR body 中说明了验证过程,包括 bench_diffusion_denoise.py --validate-nightly-alignment 全部通过、ruff check 通过等;也提到本地 macOS 环境因 Transformers 版本过旧且 SciPy/NumPy ABI 不匹配,无法收集 diffusion CPU 测试。

实现拆解

本 PR 以文档刷新为主,附带一个基准脚本的小幅逻辑调整,整体分四步:

  1. 刷新 benchmark/profile 技能文档sglang-diffusion-benchmark-profile/SKILL.mdbenchmark-and-profile.mdexisting-fast-paths.md):补充 SGLANG_DIFFUSION_SYNC_STAGE_PROFILING 环境变量的使用说明,明确 stage 级计时必须同步,否则异步 GPU 工作可能泄漏到后续阶段导致 DecodingStage 虚高 2-3 倍;在 existing-fast-paths.md 中扩展了最新融合内核清单(modulate_scale_shiftfused_ln_modulatenative_bf16_rmsnormwan_causal_cache、VAE quality gates 等)及对应验证测试文件。

  2. 调整基准脚本逻辑scripts/bench_diffusion_denoise.py):在 _expected_nightly_cli_args 中把 --warmup--warmup-mode 一并排除在 preset 漂移校验之外,因为对比驱动仍使用旧标志;在 run_benchmark_once 中通过 env.setdefault("SGLANG_DIFFUSION_SYNC_STAGE_PROFILING", "1") 默认开启阶段同步,除非调用方显式设 0 退出。

  3. 更新 ModelOpt 量化技能sglang-diffusion-modelopt-quant/SKILL.md):补充 FP4 GEMM 后端默认值(FlashInfer TensorRT-LLM)、NVFP4 支持家族扩展(Qwen Image 系列)、已发布 ModelOpt checkpoint 仓库数量与命名规则,并增加完整 Diffusers repo 的 --model-path 用法示例。

  4. 更新性能与加模型技能sglang-diffusion-performance/SKILL.mdsglang-diffusion-add-model/SKILL.md):性能表新增 Performance Mode、Breakable CUDA Graph、Cross-node SP、质量门控、TeaCache/Spectrum/Progressive Resolution、Causal KV-Cache 量化等条目,并明确各选项的相互排斥关系与限制;add-model 技能补充 Krea-2、LingBot Video MoE 30B 的流水线实现位置和 native task-contract 差异说明。

测试方面没有新增测试文件,但脚本的 --validate-nightly-alignment 已通过全部 11 个映射 nightly preset 的验证;文档提及的新路径均通过源文件存在性检查。

文件 模块 状态 重要度
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/scripts/bench_diffusion_denoise.py 基准脚本 modified 5.77
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/existing-fast-paths.md 技能文档 modified 3.96
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-modelopt-quant/SKILL.md 技能文档 modified 3.3
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-performance/SKILL.md 技能文档 modified 3.26
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/benchmark-and-profile.md 技能文档 modified 2.84
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-add-model/SKILL.md 技能文档 modified 2.47
python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile/SKILL.md 技能文档 modified 2.17

关键符号

_expected_nightly_cli_args run_benchmark_once validate_nightly_alignment

关键源码片段

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

唯一源码变更文件,修复 nightly preset 对齐校验误报并默认启用 stage 同步,直接影响 benchmark 结果可信度。

def _expected_nightly_cli_args(case: dict) -> dict[str, str]:
    expected = {
        "width": str(case["width"]),
        "height": str(case["height"]),
    }
​
    for key, flag in (
        ("num_frames", "num-frames"),
        ("fps", "fps"),
        ("num_inference_steps", "num-inference-steps"),
        ("guidance_scale", "guidance-scale"),
    ):
        if key in case:
            expected[flag] = str(case[key])
​
    if case.get("num_gpus", 1) > 1:
        expected["num-gpus"] = str(case["num_gpus"])
​
    serve_args = shlex.split(case["frameworks"]["sglang"].get("serve_args", ""))
    parsed_serve_args = _parse_cli_args(serve_args)
    for flag, value in parsed_serve_args.items():
        # Nightly 对比驱动仍持有旧版 --warmup 开关;warmup-mode 迁移后它不再是
        # sglang generate 的合法参数,因此校验 preset 漂移时两种写法都要跳过。
        if flag in {"enable-torch-compile", "warmup", "warmup-mode"}:
            continue
        expected[flag] = _normalize_cli_value(value)
​
    return expected
def run_benchmark_once(
    model_key: str,
    label: str,
    output_dir: Path,
    warmup: bool = True,
    torch_compile: bool = True,
) -> dict:
    """Run a single benchmark pass and return results dict."""
    perf_path = output_dir / f"{model_key}_{label}.json"
​
    cmd = build_sglang_cmd(
        model_key,
        perf_dump_path=str(perf_path),
        warmup=warmup,
        torch_compile=torch_compile,
        artifact_dir=output_dir,
    )
​
    env = os.environ.copy()
    env.setdefault("FLASHINFER_DISABLE_VERSION_CHECK", "1")
    # perf dump 会被当作分阶段 denoise 测量来消费。在阶段边界排空设备队列,
    # 避免异步 denoise 工作泄漏到后续阶段(最明显的是 DecodingStage)。
    # 调用方环境里显式设 0 仍可退出该行为,用于纯端到端实验。
    env.setdefault("SGLANG_DIFFUSION_SYNC_STAGE_PROFILING", "1")
    cfg = MODELS[model_key]
    for key, value in cfg.get("env", {}).items():
        env.setdefault(key, str(value))
    if env.get("HF_TOKEN") and not env.get("HUGGINGFACE_HUB_TOKEN"):
        env["HUGGINGFACE_HUB_TOKEN"] = env["HF_TOKEN"]

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

主要风险集中在基准脚本的默认行为变更:

  • bench_diffusion_denoise.py 默认设置 SGLANG_DIFFUSION_SYNC_STAGE_PROFILING=1,会改变 perf dump 的 stage 计时口径。若用户用旧脚本生成的未同步结果与新结果对比,可能得出错误的性能结论;文档已要求成对对比时保持该设置一致,但存量脚本用户可能忽略。
  • _expected_nightly_cli_args--warmup 排除出漂移校验,虽然修复了误报,但也意味着若对比驱动未来真的需要支持 --warmup-mode 而脚本未同步更新,校验可能继续通过而掩盖问题。
  • 文档中大量新增的路径、参数、内核清单若与 main 分支后续演进脱节,会再次产生陈旧文档风险;PR 只做了静态存在性检查,未做运行级验证。

对用户的影响:使用 Claude skills 的开发者(尤其是通过 agent 驱动的 diffusion 工作流)会获得与当前 main 一致的命令、参数和瓶颈定位清单,避免基于过时信息做重复优化或误判。对系统影响:脚本默认启用 stage 同步后,benchmark 输出的 DecodingStage 等阶段指标更可信,但历史数据的可对比性下降。对团队影响:这是一次低风险的文档维护,但包含一个可观测性相关的默认值变更,需要同步到 CI 或文档入口,避免工具链前后不一致。

默认启用 stage 同步影响 benchmark 可比性 文档与实现需持续对齐

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论