Repository navigation
[BMG] Sporadic permanent compute wedge on dual Arc Pro B70: xe ccs/bcs engine reset + "Fault response: Unsuccessful -ENOENT/-EINVAL" under sustained Level-Zero inference load #946
Description
Under sustained multi-request LLM inference on dual Arc Pro B70 (tensor-parallel=2 via vLLM + oneCCL), we hit a sporadic permanent GPU wedge every 2–6 hours: the xe driver reports ccs/bcs engine resets plus Fault response: Unsuccessful -ENOENT/-EINVAL, and the userspace Level-Zero context never recovers (only a process restart does). Below: full environment, a per-second correlation table between application failures and dmesg events on both cards, and everything we ruled out.
Related field report on identical hardware: vllm-project/vllm#41663. Same ccs-reset signature without vLLM/oneCCL involved: darktable-org/darktable#20257 — which is why we are filing here rather than with vLLM.
Environment
| Component | Version |
|---|---|
| GPUs | 2× Intel Arc Pro B70 — Battlemage G31, PCI 8086:e223, at c3:00.0 and c7:00.0 |
| CPU / platform | AMD EPYC 7413 (24c) |
| OS | Ubuntu 26.04 LTS |
| Kernel / driver | 7.0.0-27-generic, xe driver |
| GuC firmware | bmg_guc_70.bin version 70.58.0 |
| compute-runtime (host) | intel-opencl-icd 26.05.37020.3-1 |
| Container userspace | oneAPI 2025.3.2 (dpcpp-cpp-rt), level-zero 1.28.2, torch 2.12.0+xpu, vllm-xpu-kernels 0.1.10 |
| Workload | vLLM 0.24.0+xpu (source build, upstream Dockerfile.xpu) — also reproduces on the older intel/vllm:0.17.0-xpu prebuilt image |
| Parallelism | tensor-parallel = 2 (one rank per card), --enforce-eager |
oneCCL "stable fallback" env (from vllm-project/vllm#41663) already applied in all runs:
CCL_ENABLE_SYCL_KERNELS=0
CCL_ATL_TRANSPORT=ofi
CCL_ZE_IPC_EXCHANGE=sockets
CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0
SYCL_UR_USE_LEVEL_ZERO_V2=0
These removed the earlier ~50-min internal_kvs/broken-pipe crash cadence, but do not eliminate the wedge below.
Symptom
Under sustained concurrent LLM inference (8–12 concurrent chat completions, mixed 4k–32k contexts), roughly once every 2–6 hours the GPU work on one card stops completing. In dmesg, at the exact same second:
xe 0000:c7:00.0: [drm] Tile0: GT0: Engine reset: engine_class=ccs, logical_mask: 0x1, guc_id=23, state=0x289
xe 0000:c7:00.0: [drm] Tile0: GT0: Engine reset: engine_class=bcs, logical_mask: 0x1, guc_id=29, state=0x289
xe 0000:c7:00.0: [drm] Tile0: GT0: Fault response: Unsuccessful -ENOENT
xe 0000:c7:00.0: [drm] Tile0: GT0: Fault response: Unsuccessful -EINVAL
After the engine reset the userspace context is permanently wedged: the in-flight SYCL kernel never completes, the vLLM TP worker never returns, and the serving engine dies with TimeoutError: RPC call to sample_tokens timed out → EngineDeadError. Only a full process/container restart recovers.
Both cards are affected (events observed on c3:00.0 and c7:00.0), so this is not a single defective unit.
Crash ↔ dmesg correlation (all times UTC, July 2–4 2026)
| vLLM engine death (container log) | dmesg xe event | Card | Engine |
|---|---|---|---|
| 07-02 21:40:08 | 21:40:09 | c3 | bcs reset + fault |
| 07-02 21:53:36 | 21:53:37 | c3 | bcs reset + fault |
| 07-02 22:01:2x | 22:01:23 | c7 | ccs+bcs reset |
| 07-02 22:12:2x | 22:12:24 | c7 | ccs+bcs reset |
| 07-03 23:39:30 | 23:39:33 | c7 | ccs+bcs reset + -ENOENT/-EINVAL |
| 07-04 03:49:25 | 03:49:27 | c3 | bcs reset + fault |
| 07-04 08:51:12 | 08:51:14 | c3 | fault -ENOENT |
| 07-04 ~08:59 | 09:01:17 | c7 | ccs+bcs reset + -ENOENT/-EINVAL |
Key datapoint: the dying step is tiny
vLLM's crash dump for the 07-04 08:51 event shows the scheduler step that never returned was 9 requests in decode, total_num_scheduled_tokens=9 (nine tokens), KV cache usage 14%:
SchedulerOutput(..., num_scheduled_tokens={...: 1, ...: 1, ...}, total_num_scheduled_tokens=9, ...)
SchedulerStats(num_running_reqs=9, num_waiting_reqs=0, kv_cache_usage=0.1439...)
So this is not a batch-size / prefill-pressure problem: an ordinary small decode step faults. Incidence appears to scale with the number of steps executed (hours of sustained work × concurrency), not with step size.
Ruled out on our side
- Model / quant kernels — reproduces with three different models & quant paths: Llama-3.3-70B (AWQ int4), Qwen3.6-27B (FP8), Qwen3.6-27B (Intel AutoRound int4 / INC path).
- vLLM version — reproduces on intel/vllm 0.17.0-xpu prebuilt AND upstream 0.24.0 source build.
- Graph capture —
--enforce-eagereverywhere. - Guided decoding backend — xgrammar vs llguidance makes no difference to the wedge.
- vLLM async scheduling — disabled (
--no-async-scheduling), still reproduces. - Scheduler oversubscription — capped with
--max-num-seqs 12, still reproduces. - Kernel version — original report (#41663) was on 6.17 HWE; we reproduce on 7.0.0-27.
Independent confirmation it is not vLLM/oneCCL-specific
- [BUG] Tumbleweed + Intel Arc B580: OpenCL LAPLACIAN_ASSEMBLE triggers Xe Engine Reset (GT0: Engine reset: engine_class=ccs) darktable-org/darktable#20257 — same
Engine reset: engine_class=ccson Arc B580 triggered by OpenCL image kernels (no vLLM, no oneCCL, single GPU). - [Bug]: XPU TP=2 on dual Intel Arc Pro B70 (Battlemage): GP fault + xe BCS engine reset reproduces in intel/vllm:0.17.0-xpu on Ubuntu 24.04 HWE 6.17 vllm-project/vllm#41663 — same dual-B70 hardware, GP fault + bcs engine reset (we are posting a confirming comment there referencing this issue).
Reproduction
Sustained concurrent load against a vLLM server for several hours reliably triggers it:
- 2× B70, TP=2, eager, any of the models above;
- 8–12 concurrent
/v1/chat/completions(structured output viaresponse_format json_object, mixed context sizes 4k–32k); - expect an engine reset within 2–6 hours (sooner under heavier mix).
We can provide our load-generation script, full container logs, and full dmesg on request.
Questions
- Is this signature (
state=0x289ccs/bcs reset +Fault response: Unsuccessful -ENOENT/-EINVAL) already known for BMG? - Is there a newer GuC firmware / compute-runtime with a relevant fix (host is on GuC 70.58.0 / 26.05.37020.3)?
- What additional traces would help? We can capture
py-spy/gdb stacks of the hung worker,ze_debuglogs, xe debugfs state at wedge time — the incident is frequent enough to instrument.
Activity
kgibala commentedon Jul 5, 2026
Hello @marcorigodanzo,
Thank you for your contribution.
Could you please follow the Issue Submission Guide and create an issue based on it?
marcorigodanzo commentedon Jul 5, 2026
Hi @kgibala — done, thanks for the pointer. Refiled following the Issue Submission Guide (Linux GPU Driver Issue template) as #948, with full system info, dmesg correlation table and a minimal reproducer. Closing this one in favor of #948.