Prhub

#15236 [CI] Add consistency test in CI

原始 PR 作者 Prozac614 合并时间 2026-04-07 09:50 文件变更 11 提交数 38 评论 19 代码增减 +1026 / -9

执行摘要

在 CI 中添加 diffusion 模型输出一致性测试,防止精度回归。

PR body中明确指出:'CI pipeline lacks strict accuracy checkpoints (guardrails). This risks accidentally merging PRs that cause precision degradation or model performance regression.' 因此,需要添加精度检查以防止模型输出质量下降,确保diffusion模型在代码变更后仍保持一致的生成准确性。

该PR值得精读,特别是对于负责CI、测试和multimodal模块的工程师。关注点包括:一致性验证方法从SSIM切换到CLIP的决策理由(可能因CLIP更能捕捉语义相似性)、阈值配置的管理策略(如案例特异性调整)、以及LoRA权重加载的扩展设计(支持确定性文件选择)。这些设计决策反映了对模型输出质量保障的重视,可作为测试框架演进的参考。

讨论亮点

由于review评论为空,讨论主要体现在Issue评论中。关键点包括:维护者mickqian要求rebase('please rebase'),贡献者Prozac614确认完成;shljessie主动提供帮助解决合并冲突和生成缺失的ground truth文件;mickqian提及需要先修复PR #22059中的flux问题('we need to fix all the flux issues in #22059 before we proceed'),表明本PR的推进依赖外部问题解决。这些讨论聚焦于协作流程和依赖管理,未涉及技术设计争议或深度权衡。

实现拆解

实现分为五个主要部分:1. CI工作流修改:在.pr-test-amd.yml和.pr-test-amd-rocm720.yml中添加SGLANG_SKIP_CONSISTENCY环境变量,允许在特定场景下跳过一致性检查。2. 测试框架扩展:在test_server_common.py中新增_validate_consistency方法,使用CLIP嵌入计算余弦相似度,并与ground truth比较;同时添加consistency_threshold.json文件定义各案例的CLIP、SSIM、PSNR和平均绝对差阈值。3. LoRA支持增强:修改lora_pipeline.py、server_args.py和hf_diffusers_utils.py,引入lora_weight_name参数,支持从多文件LoRA仓库中确定性加载特定权重文件。4. 测试案例配置:在testcase_configs.py和testcase_configs_npu.py中为DiffusionTestCase添加run_consistency_check布尔字段,控制是否执行一致性验证。5. 新增单元测试:添加test_consistency_metrics.py文件,验证像素级指标(SSIM、PSNR、平均绝对差)的正确性。

文件 模块 状态 重要度
python/sglang/multimodal_gen/test/server/test_server_common.py 测试框架 modified 8.0
python/sglang/multimodal_gen/test/server/consistency_threshold.json 测试配置 added 7.0
python/sglang/multimodal_gen/test/test_utils.py 测试工具 modified 7.0
.github/workflows/pr-test-amd.yml CI/CD modified 5.0
python/sglang/multimodal_gen/runtime/pipelines_core/lora_pipeline.py 模型管道 modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

_validate_consistency compare_with_gt load_lora_adapter maybe_download_lora

评论区精华

Rebase 和合并冲突处理 question

维护者 mickqian 要求 rebase 以同步主线代码,贡献者 Prozac614 确认完成;shljessie 主动提供帮助解决合并冲突和生成缺失 ground truth 文件。

结论:贡献者完成 rebase,外部协助解决冲突,但未详细说明技术细节。 · 已解决

依赖外部 PR 修复 flux 问题 question

mickqian 提及需要先修复 PR #22059 中的 flux 问题才能推进本 PR,表明存在跨 PR 依赖,可能影响本 PR 的合并时间线。

结论:未在讨论中明确解决,但本 PR 最终被合并,推测依赖问题已处理或优先级调整。 · pending

风险与影响

技术风险包括:1. 外部依赖风险:CLIP模型(openai/clip-vit-large-patch14)需从Hugging Face下载,可能因网络问题导致测试失败或版本不一致;ground truth文件托管在外部仓库(sglang-ci-data),增加维护复杂性和单点故障风险。2. 阈值配置敏感:consistency_threshold.json中的阈值需精细调整,过低可能导致误报(正常变更被阻止),过高可能漏掉实际回归;例如,'wan2_1_t2v_1_3b_lora_1gpu'案例的clip_threshold仅0.54,显示某些场景精度容忍度较高。3. CI时间增加:新增一致性检查可能延长测试运行时间,尤其涉及视频帧提取和嵌入计算。4. 向后兼容性:LoRA权重名称的添加(lora_weight_name)可能影响现有使用多文件LoRA的部署,需确保默认行为(weight_name=None)保持兼容。

影响范围:1. 对用户:间接提升diffusion模型输出的可靠性和一致性,防止性能回归影响终端应用质量。2. 对系统:CI流程更严格,增加了精度检查点,但可能因额外计算和外部依赖增加测试开销;同时,LoRA权重加载逻辑的扩展提高了多文件仓库的灵活性。3. 对团队:开发者需遵循新的测试要求,在添加或修改diffusion测试案例时,必须提供或更新ground truth文件到外部仓库,增加了协作复杂度;维护者需监控阈值调整以平衡测试严格性与CI稳定性。影响程度中等,主要波及multimodal diffusion测试模块和CI基础设施。

外部依赖风险 阈值配置敏感 CI 时间增加 向后兼容性

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR为SGLang仓库的CI管道新增了diffusion模型输出一致性测试,通过生成ground truth并基于CLIP余弦相似度进行验证,旨在防止代码变更导致的精度回归。关键改动涉及测试框架扩展、阈值配置定义和LoRA权重加载优化,影响范围主要覆盖multimodal diffusion测试模块和CI基础设施,是一个有意义的测试基础设施改进。

功能与动机

为什么做:PR body明确指出,现有CI管道缺乏严格的精度检查点(guardrails),这可能导致意外合并引起精度下降或模型性能回归的PR。例如,diffusion模型生成输出时,微小的代码变更可能引发图像或视频质量波动,而现有测试未能充分捕获。因此,引入一致性测试作为安全网,确保模型输出在代码演进中保持稳定。

关键表述引用:从PR body:"CI pipeline lacks strict accuracy checkpoints (guardrails). This risks accidentally merging PRs that cause precision degradation or model performance regression."

实现拆解

实现按模块拆解如下:

  1. CI工作流层:在.github/workflows/pr-test-amd.yml.github/workflows/pr-test-amd-rocm720.yml中添加SGLANG_SKIP_CONSISTENCY环境变量,允许在特定平台(如AMD)跳过检查,减少CI开销。
    yaml -e SGLANG_SKIP_CONSISTENCY=1
  2. 测试框架层:在python/sglang/multimodal_gen/test/server/test_server_common.py中新增_validate_consistency方法,核心逻辑包括:
    • 检查环境变量跳过条件。
    • 加载ground truth(本地或从sglang-ci-data仓库远程获取)。
    • 使用CLIP模型计算输出与ground truth的余弦相似度,并对比SSIM、PSNR和平均绝对差。
    • 根据阈值判断通过与否,失败时输出详细错误信息。
  3. 配置管理层:新增python/sglang/multimodal_gen/test/server/consistency_threshold.json文件,定义各测试案例的阈值,例如:
    json "flux_image_t2i": { "clip_threshold": 0.92, "ssim_threshold": 0.95, "psnr_threshold": 24.0, "mean_abs_diff_threshold": 8.0 }
  4. LoRA扩展层:修改lora_pipeline.pyserver_args.pyhf_diffusers_utils.py,添加lora_weight_name参数,支持从多文件LoRA仓库中确定性加载特定权重文件,避免随机选择导致的不一致。
  5. 测试工具层:在test_utils.py中增强函数如compare_with_gt,并新增test_consistency_metrics.py单元测试,验证像素级指标的正确性。

评论区精华

由于review评论为空,主要讨论体现在Issue评论中:

  • 协作流程调整:维护者mickqian多次要求rebase和重跑CI(例如"/rerun-failed-ci"),贡献者Prozac614及时响应,显示高效协作。

    mickqian: "please rebse"
    Prozac614: "Done"

  • 外部依赖处理:mickqian提到需先修复PR #22059中的flux问题,凸显跨PR依赖的挑战。

    mickqian: "we need to fix all the flux issues in #22059 before we proceed"

  • 社区协助:shljessie主动提供帮助解决合并冲突和生成ground truth文件,体现团队协作精神。

    shljessie: "I'd be happy to help finish this PR! I can resolve the merge conflicts and generate the missing ground truth files."

风险与影响

具体风险

  1. 外部依赖风险:CLIP模型和ground truth文件托管在外部仓库(如Hugging Face和sglang-ci-data),网络波动或仓库变更可能导致测试失败。
  2. 阈值配置敏感consistency_threshold.json中的值需根据模型和硬件动态调整;例如,"wan2_1_t2v_1_3b_lora_1gpu"案例的clip_threshold仅为0.54,表明某些场景容忍度低,易引发误报。
  3. 性能开销:一致性检查涉及图像/视频帧提取、CLIP嵌入计算和远程文件加载,可能显著增加CI运行时间,尤其在资源受限环境中。
  4. 兼容性影响:LoRA权重名称的添加可能破坏现有使用多文件LoRA的脚本,需通过默认值(weight_name=None)保持向后兼容。

影响评估

  • 用户影响:间接提升diffusion模型输出的可靠性,防止回归影响应用质量。
  • 系统影响:CI更严格,但增加了维护负担(如管理ground truth文件);LoRA扩展提高了部署灵活性。
  • 团队影响:开发者需学习新测试流程,贡献时可能需操作外部仓库,增加了入门门槛。

关联脉络

从近期历史PR分析,本PR是测试和一致性保障演进的一部分:

  • 相关PR:PR #21849(VLM一致性修复)和PR #22194(CI阈值调整)都涉及consistency标签,显示团队持续加强测试可靠性。
  • 功能线演进:本PR专注于diffusion模型,与仓库中其他speculative-decoding、multimodal测试PR(如#22199、#21425)形成互补,共同构建全面的质量保障体系。
  • Issue关联:讨论中提及PR #22059的flux问题,表明本PR的推进依赖更大范围的问题解决,反映了仓库中跨模块测试的复杂性。

参与讨论