# PR #51337 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[CI][XPU] Work around intermittent segfault in Intel XPU CI with VLLM_DISABLE_COMPILE_CACHE=1
- 合并时间：2026-08-07 13:18
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/51337

---

# 执行摘要

- 一句话：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 侧临时缓解。

# 实现拆解

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 配置；类别 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 及测试配置层操作。