Prhub

#40623 [CI] Split disaggregated tests into own test-area

原始 PR 作者 NickLucche 合并时间 2026-04-23 23:20 文件变更 3 提交数 2 评论 5 代码增减 +100 / -86

执行摘要

拆分 disaggregated CI 测试到独立测试区域

PR发起人指出PD disaggregation代码和相关性在过去一年中已增长到需要独立测试框架的程度。参考了此前PR #36945的做法,使分布式任务更小、更独立运行,同时为PD设置分配更多预算(因为这些测试本来就成本高昂)。另外补充了之前缺失的FlashInfer评估运行,这对Blackwell+开发至关重要。

建议在合并后立即跟进一个修复PR:添加设置SW_ATTN=1的CI步骤,或将gemma-3配置移回tp_configs并增加FlashInfer兼容性检查。同时考虑采纳gemini-code-assist的依赖文件建议。

讨论亮点
  1. gemini-code-assist机器人提出的改进建议(未解决):

    • 建议为所有测试步骤添加vllm/v1/worker/kv_connector_model_runner_mixin.pysource_file_dependencies,以确保模型运行器变更时能触发这些测试。
    • 建议为FlashInfer测试步骤指定device: h100以运行在适当硬件上。
    • 指出CROSS_LAYERS_BLOCKS=True与其他步骤使用1不一致,建议统一改为CROSS_LAYERS_BLOCKS=1
    • 这些建议未被采纳或回复,但PR仍被批准合并。
  2. orozery的Issue评论(关键问题):指出gemma-3配置被从tp_configs移到了sw_attn_configs,但CI的disaggregated.yaml中没有设置SW_ATTN=1的步骤,导致gemma-3测试实际上不再在CI中运行。这是一个回归。建议要么添加SW_ATTN=1的步骤,要么保持gemma-3在tp_configs中并只在不使用FlashInfer时排除。

实现拆解

  1. 创建新测试区域文件:在.buildkite/test_areas/下新建disaggregated.yaml,包含所有原distributed.yaml中与PD disaggregation相关的测试步骤(共8个步骤),包括NixlConnector精度、DP/EP、CrossLayer、Hybrid SSM、MultiConnector、Spec Decode等配置,并新增一个Distributed FlashInfer NixlConnector PD accuracy步骤。

  2. 从distributed.yaml移除旧步骤:删除distributed.yaml中对应的7个测试步骤(约85行),替换为一个新的Pipeline + Context Parallelism步骤和一个RayExecutorV2步骤,保持文件结构。

  3. 调整gemma-3测试配置:在tests/v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh中,将gemma-3滑动窗口测试从tp_configs数组移到新创建的sw_attn_configs数组,并添加注释说明gemma3不兼容FlashInfer。这样确保了gemma-3只在SW_ATTN环境变量设置时运行(如CI中),而不是在默认路径下。

文件 模块 状态 重要度
.buildkite/test_areas/disaggregated.yaml 测试配置 added 5.73
.buildkite/test_areas/distributed.yaml 测试配置 modified 5.04
tests/v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh 测试脚本 modified 3.92

关键源码片段

tests/v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh test-coverage

调整了 gemma-3 滑动窗口测试的配置归属,从 tp_configs 移到 sw_attn_configs,并添加了兼容性注释。

  # config_sweep_accuracy_test.sh 部分片段
  # 原 tp_configs 中删除了 gemma-3 项(第 15 行被移除)
  tp_configs=(
    "GPU_MEMORY_UTILIZATION=0.6 PREFILLER_TP_SIZE=2 DECODER_TP_SIZE=2"
    ...
    # 移除了 "GPU_MEMORY_UTILIZATION=0.8 MODEL_NAMES=google/gemma-3-4b-it VLLM_SERVE_EXTRA_ARGS=--max-model-len,8192" # SW model
  )
  # 新增 sw_attn_configs 数组,包含 gemma-3 测试及 HMA 变体
  sw_attn_configs=(
    # NOTE: gemma3 does not work with FlashInfer
    "GPU_MEMORY_UTILIZATION=0.8 MODEL_NAMES=google/gemma-3-4b-it VLLM_SERVE_EXTRA_ARGS=--max-model-len,8192" # SW model
    "ENABLE_HMA_FLAG=1 GPU_MEMORY_UTILIZATION=0.8 MODEL_NAMES=google/gemma-3-4b-it PREFILLER_TP_SIZE=1 DECODER_TP_SIZE=2 VLLM_SERVE_EXTRA_ARGS=--max-model-len,8192"
    "ENABLE_HMA_FLAG=1 GPU_MEMORY_UTILIZATION=0.8 MODEL_NAMES=google/gemma-3-4b-it PREFILLER_TP_SIZE=2 DECODER_TP_SIZE=1 VLLM_SERVE_EXTRA_ARGS=--max-model-len,8192"
  )

评论区精华

gemma-3 测试配置移动导致 CI 覆盖丢失 正确性

orozery 在 Issue 评论中指出:将 gemma-3 从 tp_configs 移到 sw_attn_configs 后,由于 CI 中没有设置 SW_ATTN=1 的步骤,gemma-3 测试将再也不会运行。建议要么添加 SW_ATTN 步骤,要么保持 gemma-3 在 tp_configs 中并仅在不使用 FlashInfer 时排除。

结论:此问题未在 PR 中得到解决,但 PR 仍被批准合并。这是明显的回归风险。 · UNRESOLVED

source_file_dependencies 不完整 other

gemini-code-assist 机器人建议为每一步添加 kv_connector_model_runner_mixin.py 以及更广的 v1/ 目录依赖,以确保模型运行器变更能触发测试。

结论:建议未被采纳,但已被记录。 · UNRESOLVED

FlashInfer 测试未指定目标设备 other

gemini-code-assist 机器人建议为 FlashInfer 步骤添加 device: h100 以确保在正确的硬件上运行。

结论:未采纳,风险较低但可能影响测试覆盖率。 · UNRESOLVED

环境变量值不一致 style

gemini-code-assist 机器人指出 CROSS_LAYERS_BLOCKS=True 与其他步骤的 FLASHINFER=1 格式不统一。

结论:未采纳,但建议改为 1。 · UNRESOLVED

风险与影响

  1. gemma-3测试可能完全丢失:如orozery所指出,将gemma-3移到sw_attn_configs后,由于CI中没有设置SW_ATTN环境变量的步骤,gemma-3测试将不再自动运行。这可能导致滑动窗口注意力相关的回归无法被捕获。
  2. 依赖文件列表可能不完整:gemini-code-assist指出source_file_dependencies遗漏了关键的kv_connector_model_runner_mixin.py,可能导致部分变更无法触发相关测试。
  3. 环境变量值不统一CROSS_LAYERS_BLOCKS=True与其他步骤的=1格式不一致,可能对某些解析逻辑造成问题。
  1. 对用户:无直接影响,纯CI重构。
  2. 对系统:CI配置更清晰,disaggregated测试独立运行,缩减了distributed测试的总执行时间,同时新增了FlashInfer专用测试步骤,提升了对Blackwell+硬件的覆盖。
  3. 对团队:需要维护两个测试区域文件,但提高了CI的可扩展性和可维护性。gemma-3测试的遗漏需尽快修复。
gemma-3 测试完全丢失(CI 覆盖回归) source_file_dependencies 不完整 环境变量值不统一

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论