Prhub

#51337 [CI][XPU] Work around intermittent segfault in Intel XPU CI with VLLM_DISABLE_COMPILE_CACHE=1

原始 PR 作者 chaojun-zhang 合并时间 2026-08-07 13:18 文件变更 5 提交数 2 评论 2 代码增减 +10 / -5

执行摘要

XPU CI 关闭编译缓存,规避 Triton 偶发段错误

上游 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 侧临时缓解。

该 PR 值得 CI/基础设施负责人快速浏览,理解 workaround 的适用范围与移除条件;普通开发者在处理 XPU flaky 测试时可参考此模式。核心关注点不是实现本身,而是它与上游 issue #7682 的联动:若上游移除 dlclose() 的修复落地,应及时清理这些环境变量并恢复编译缓存复用。

讨论亮点

本 PR 的 review 无实质技术交锋。claude[bot] 仅提示该 PR 来自 fork、自动 review 已禁用,维护者可评论 @claude review 触发一次性 review;维护者 jikunshang 直接批准(APPROVED),未留下评论。技术决策主要体现在提交信息与代码注释中:明确这是 workaround、指向上游 issue #7682,并注明移除条件。

实现拆解

  1. 圈定受影响 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。
  2. 注入环境变量:在对应 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 目录。
  3. 添加移除注释:每处使用处前都加入注释 # Remove VLLM_DISABLE_COMPILE_CACHE=1 once intel/intel-xpu-backend-for-triton#7682 is fixed,明确这是临时 workaround 以及移除条件,防止后续无依据清理。
  4. 分两轮合入:第一个提交覆盖 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 配置 modified 3.57
.buildkite/intel_jobs/model_executor_intel.yaml CI 配置 modified 3.78
.buildkite/intel_jobs/model_runner_v2_intel.yaml CI 配置 modified 3.78
.buildkite/intel_jobs/models_distributed_intel.yaml CI 配置 modified 3.38
.buildkite/intel_jobs/samplers_intel.yaml CI 配置 modified 3.17

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

评论区精华

fork PR 自动 review 未启用 other

claude[bot] 指出该 PR 来自 fork,自动 review 被禁用,维护者可评论 `@claude review` 触发一次性 review。

结论:维护者 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 编译时间可能增加 崩溃覆盖范围可能不全

关联 Issue

#7682 [vLLM][DRIVER] Segfault due to dlclose() of spirv_utils module with GC-invisible PyKernelArgObject references

完整报告

参与讨论