执行摘要
- 一句话:XPU CI 关闭编译缓存,规避 Triton 偶发段错误
- 推荐动作:该 PR 值得 CI/基础设施负责人快速浏览,理解 workaround 的适用范围与移除条件;普通开发者在处理 XPU flaky 测试时可参考此模式。核心关注点不是实现本身,而是它与上游 issue #7682 的联动:若上游移除 dlclose() 的修复落地,应及时清理这些环境变量并恢复编译缓存复用。
功能与动机
上游 issue intel/intel-xpu-backend-for-triton#7682 报告:在 Intel XPU 上长时间运行 vLLM 工作负载并启用 torch.compile 时,会间歇性崩溃(Fatal Python error: Segmentation fault),崩溃发生在 GC 遍历 tuple 时访问非法内存。复现方式为反复运行 tests/basic_correctness/test_cpu_offload.py 约 10 次即崩溃,而设置 VLLM_DISABLE_COMPILE_CACHE=1 可使该循环通过。上游初步定位为 spirv_utils 模块的 dlclose() 导致 GC 不可见的 PyKernelArgObject 引用悬垂,修复方向是移除 dlclose(),但该 issue 仍处于 open 状态。本 PR 采用已验证有效的环境变量作为 CI 侧临时缓解。
实现拆解
- 圈定受影响 job:依据上游 issue #7682 的复现路径(test_cpu_offload.py)与 Triton 编译缓存机制,锁定 5 个 Intel XPU CI 配置文件,分别是 basic_correctness.yaml、model_runner_v2_intel.yaml、models_distributed_intel.yaml、samplers_intel.yaml 和 model_executor_intel.yaml。
- 注入环境变量:在对应 pytest 命令前加 VLLM_DISABLE_COMPILE_CACHE=1,具体包括:basic_correctness.yaml 的 basic_correctness/test_cpu_offload.py;model_runner_v2_intel.yaml 的 v1/e2e/general/test_context_length.py;models_distributed_intel.yaml 的 model_executor/model_loader/test_sharded_state_loader.py;samplers_intel.yaml 的整个 samplers 目录(与已有 VLLM_XPU_USE_SAMPLER_KERNEL=1 叠加);model_executor_intel.yaml 的整个 model_executor 目录。
- 添加移除注释:每处使用处前都加入注释
# Remove VLLM_DISABLE_COMPILE_CACHE=1 once intel/intel-xpu-backend-for-triton#7682 is fixed,明确这是临时 workaround 以及移除条件,防止后续无依据清理。
- 分两轮合入:第一个提交覆盖 basic_correctness、model_runner_v2_intel、models_distributed_intel、samplers_intel 四个文件;第二个提交补充 model_executor_intel,说明同一 segfault 问题也影响该 job。
测试与校验:未新增源码或其他测试,通过 Buildkite CI #82785 验证,并由维护者 jikunshang 批准合并。
关键文件:
.buildkite/intel_jobs/basic_correctness.yaml(模块 CI 配置;类别 config;类型 configuration): 对应上游 issue #7682 的复现用例 test_cpu_offload.py,是 segfault 最直接的受影响路径,workaround 的典型样本。
.buildkite/intel_jobs/model_executor_intel.yaml(模块 CI 配置;类别 config;类型 configuration): 第二个提交补充覆盖的 job,对整个 model_executor 目录生效,是改动范围最大的配置。
.buildkite/intel_jobs/model_runner_v2_intel.yaml(模块 CI 配置;类别 config;类型 configuration): Model Runner V2 核心测试链路,test_context_length.py 被标记为受影响并加入环境变量。
.buildkite/intel_jobs/models_distributed_intel.yaml(模块 CI 配置;类别 config;类型 configuration): 分布式模型加载测试 test_sharded_state_loader.py 被识别为同一 segfault 的受影响用例。
.buildkite/intel_jobs/samplers_intel.yaml(模块 CI 配置;类别 config;类型 configuration): 展示了环境变量叠加模式:VLLM_XPU_USE_SAMPLER_KERNEL=1 与 VLLM_DISABLE_COMPILE_CACHE=1 同时使用。
关键符号:未识别
评论区精华
本 PR 的 review 无实质技术交锋。claude[bot] 仅提示该 PR 来自 fork、自动 review 已禁用,维护者可评论 @claude review 触发一次性 review;维护者 jikunshang 直接批准(APPROVED),未留下评论。技术决策主要体现在提交信息与代码注释中:明确这是 workaround、指向上游 issue #7682,并注明移除条件。
- fork PR 自动 review 未启用 (other): 维护者 jikunshang 直接批准合并,未触发额外人工 review。
风险与影响
- 风险:
- 回归风险:若有人在注释引导下提前移除 VLLM_DISABLE_COMPILE_CACHE=1,而上游 issue #7682 尚未修复,XPU CI 会重新出现偶发段错误;目前该 issue 仍为 open 状态。
- 性能影响:关闭编译缓存后,相关 CI job 每次需重新编译 Triton kernel,运行时间可能明显增加,尤其 model_executor 与 samplers 这类全目录测试。
- 覆盖不足:issue 中同时提到 test_mem.py 也会崩溃,但本 PR 只在 test_cpu_offload.py 前加了环境变量,test_mem.py::test_end_to_end 未加;若崩溃模式扩展,仍需继续跟进。
- 影响范围:仅限 CI 配置,不影响 vLLM 产品代码、推理路径或端到端正确性。
- 影响:对用户无影响,对系统运行无影响。对团队的影响集中在 Intel XPU CI 稳定性:5 个 job(Model Executor、Model Runner V2、Distributed Models、Basic Correctness、Samplers)的偶发 segfault 概率显著下降,CI 趋向稳定;代价是这些 job 的编译缓存失效、运行时间可能变长。同时团队需要跟踪上游 intel-xpu-backend-for-triton#7682 的修复进度,在根因修复后移除该 workaround。
- 风险标记:上游 issue 未修复, workaround 掩盖根因, CI 编译时间可能增加, 崩溃覆盖范围可能不全
关联脉络
- PR #51046 [CI] Exclude KV-connector subtree from broad source dependencies: 同为 CI 配置稳定性调整,减小无关变更对 CI 步骤的扩散影响。
- PR #51293 [CI] Re-enable FI autotune in GSM8K config for Qwen3.5-35B-A3B: 同为 CI 测试配置的启用/禁用调整,属于 CI 稳定性维护线。
- PR #51273 [ROCm][CI] Update AITER AR+RMS e2e fusion counts for final-norm coverage: 同为硬件专项 CI 配置修正,与本 PR 一样只在 .buildkite 及测试配置层操作。
参与讨论