Skip to content

[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 #41663

Description

@Zumbasam

Your current environment

The output of python collect_env.py
Collecting environment information...
==============================
        System Info
==============================
OS                           : Ubuntu 24.04.4 LTS (x86_64)
GCC version                  : (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
Clang version                : Could not collect
CMake version                : version 4.2.3
Libc version                 : glibc-2.39

==============================
       PyTorch Info
==============================
PyTorch version              : 2.10.0+xpu
Is debug build               : False
CUDA used to build PyTorch   : None
ROCM used to build PyTorch   : N/A
XPU used to build PyTorch    : 20250301

==============================
      Python Environment
==============================
Python version               : 3.12.3 (main, Jan 22 2026, 20:57:42) [GCC 13.3.0] (64-bit runtime)
Python platform              : Linux-6.17.0-23-generic-x86_64-with-glibc2.39

==============================
      Intel XPU / GPU Info
==============================
Is XPU available             : True
XPU runtime version          : 20250301
Intel GPU models             :
GPU 0: Intel(R) Graphics [0xe223]
GPU 1: Intel(R) Graphics [0xe223]


--Compile time--
oneAPI compiler version      : 2025.3.2
SYCL compiler build          : 2025.3.2.20260112
oneCCL version               : 2021.17.2-5

--Runtime--
Intel Graphics Compiler (IGC): 2.24.8
Intel GMM (libigdgmm)        : 22.8.2
Level Zero loader version    : 1.26.0
Level Zero driver version    : 25.48.36300.8-0
vLLM XPU kernels version     : 0.1.4

==============================
          CPU Info
==============================
Architecture:                            x86_64
CPU op-mode(s):                          32-bit, 64-bit
Address sizes:                           46 bits physical, 48 bits virtual
Byte Order:                              Little Endian
CPU(s):                                  24
On-line CPU(s) list:                     0-23
Vendor ID:                               GenuineIntel
Model name:                              Intel(R) Core(TM) Ultra 9 285K
CPU family:                              6
Model:                                   198
Thread(s) per core:                      1
Core(s) per socket:                      24
Socket(s):                               1
Stepping:                                2
CPU(s) scaling MHz:                      26%
CPU max MHz:                             5700.0000
CPU min MHz:                             800.0000
BogoMIPS:                                7372.80
Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a rdseed adx smap clflushopt clwb intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves split_lock_detect user_shstk avx_vnni lam wbnoinvd dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req hfi vnmi umip pku ospke waitpkg gfni vaes vpclmulqdq rdpid bus_lock_detect movdiri movdir64b fsrm md_clear serialize arch_lbr ibt flush_l1d arch_capabilities
Virtualization:                          VT-x
L1d cache:                               768 KiB (20 instances)
L1i cache:                               1.3 MiB (20 instances)
L2 cache:                                40 MiB (12 instances)
L3 cache:                                36 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-23
Vulnerability Gather data sampling:      Not affected
Vulnerability Ghostwrite:                Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Old microcode:             Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; Enhanced / Automatic IBRS; IBPB conditional; PBRSB-eIBRS Not affected; BHI BHI_DIS_S
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Mitigation; IBPB before exit to userspace

==============================
Versions of relevant libraries
==============================

[pip3] flake8==7.3.0
[pip3] mypy==1.19.1
[pip3] mypy_extensions==1.1.0
[pip3] numpy==2.2.6
[pip3] pyzmq==27.1.0
[pip3] torch==2.10.0+xpu
[pip3] torchaudio==2.10.0+xpu
[pip3] torchvision==0.25.0+xpu
[pip3] transformers==4.57.6
[pip3] triton-xpu==3.6.0
[conda] Could not collect

==============================
         vLLM Info
==============================
ROCM Version                 : Could not collect
vLLM Version                 : 0.1.dev14456+gde3f7fe65 (git sha: de3f7fe65)
vLLM Build Flags:
  CUDA Archs: Not Set; ROCm: Disabled; XPU: Enabled
GPU Topology:
  Could not collect

==============================
     Environment Variables
==============================
CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0
CCL_ROOT=/opt/intel/oneapi/ccl/2021.17
I_MPI_ROOT=/opt/intel/oneapi/mpi/2021.17
CCL_CONFIGURATION=cpu_gpu_dpcpp
VLLM_WORKER_MULTIPROC_METHOD=spawn
CCL_CONFIGURATION_PATH=
ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
CCL_ATL_TRANSPORT=ofi
ZE_AFFINITY_MASK=0,1
CCL_ZE_IPC_EXCHANGE=pidfd
VLLM_TARGET_DEVICE=xpu
LD_LIBRARY_PATH=/tmp/ucx_install/lib:/opt/intel/oneapi/tcm/1.4/lib:/opt/intel/oneapi/umf/1.0/lib:/opt/intel/oneapi/tbb/2022.3/env/../lib/intel64/gcc4.8:/opt/intel/oneapi/pti/0.16/lib:/opt/intel/oneapi/mpi/2021.17/opt/mpi/libfabric/lib:/opt/intel/oneapi/mpi/2021.17/lib:/opt/intel/oneapi/mkl/2025.3/lib:/opt/intel/oneapi/dnnl/2025.3/lib:/opt/intel/oneapi/debugger/2025.3/opt/debugger/lib:/opt/intel/oneapi/compiler/2025.3/opt/compiler/lib:/opt/intel/oneapi/compiler/2025.3/lib:/opt/intel/oneapi/ccl/2021.17/lib/:/usr/local/lib/
PYTORCH_NVML_BASED_CUDA_CHECK=1
TORCHINDUCTOR_COMPILE_THREADS=1
TORCHINDUCTOR_CACHE_DIR=/tmp/torchinductor_root

🐛 Describe the bug

Summary

intel/vllm:0.17.0-xpu reproduces a VLLM::Worker general protection fault followed by xe BCS engine resets on a dual Intel Arc Pro B70 system when running Qwen3-30B-A3B with TP=2 and dynamic FP8 on Ubuntu 24.04.4 HWE kernel 6.17.

The same failure pattern also reproduces with our local source-built vLLM XPU image. This suggests the issue is not caused by our source build alone, but likely involves an interaction between the host stack, xe driver/firmware, PCIe topology, and vLLM XPU TP=2 worker initialization / ProcessGroupXCCL path.

A standalone XCCL/SYCL collective sweep passes on the same host, so this does not appear to be a generic oneCCL/SYCL collective failure.

Hardware

  • 2× Intel Arc Pro B70 32GB, Battlemage G31, device 8086:e223
  • Z890 motherboard with PCIe switch topology
  • No XeLink between GPUs
  • p2p_access:0
  • Each B70 reports PCIe 5.0 x8 host link
  • ZE_AFFINITY_MASK=0,1 used for the two B70 GPUs

Host stack

  • OS: Ubuntu 24.04.4 LTS
  • Kernel: 6.17.0-23-generic HWE
  • GPU driver: in-kernel xe
  • GuC firmware: 70.44.1
  • GuC firmware version 70.49.4 has been mentioned in upstream contexts as a newer candidate; we have not yet tested an upgrade.

Containers tested

Intel pre-built image

  • intel/vllm:0.17.0-xpu
  • Tested digest prefix: sha256:e961d08135a6...

Intel's published 0.17.0-xpu validation BOM differs from our host stack. It lists Ubuntu 25.04, KMD 6.14.0, PyTorch 2.10, vllm-xpu-kernels 0.1.4, and oneCCL 2021.15.7.8, but collect_env.py inside the tested intel/vllm:0.17.0-xpu container reports oneCCL 2021.17.2-5 and CCL_ROOT=/opt/intel/oneapi/ccl/2021.17.

Local source-built image

Built from vLLM Dockerfile.xpu:

  • vLLM main
  • PyTorch 2.11 + XPU
  • vllm-xpu-kernels 0.1.7
  • oneCCL 2021.17.2
  • oneAPI 2025.3

Model / vLLM setup

  • Model: Qwen/Qwen3-30B-A3B
  • Local BF16 model path
  • Dynamic FP8 quantization via --quantization fp8
  • Tensor parallelism: --tensor-parallel-size 2

Common args:

--dtype float16
--quantization fp8
--tensor-parallel-size 2
--gpu-memory-utilization 0.88
--max-model-len 8192
--max-num-batched-tokens 8192
--max-num-seqs 64
--block-size 64
--trust-remote-code

Minimal reproducer

docker pull intel/vllm:0.17.0-xpu

docker run -d --name vllm-tp2-repro \
  --device /dev/dri \
  --group-add render \
  --group-add video \
  --network host \
  --shm-size 16g \
  --ipc host \
  -v /path/to/Qwen3-30B-A3B:/model:ro \
  -e CCL_ATL_TRANSPORT=ofi \
  -e CCL_ZE_IPC_EXCHANGE=pidfd \
  -e CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0 \
  -e ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE \
  -e ZE_AFFINITY_MASK=0,1 \
  -e ONEAPI_DEVICE_SELECTOR=level_zero:* \
  -e VLLM_WORKER_MULTIPROC_METHOD=spawn \
  intel/vllm:0.17.0-xpu \
  python3 -u -m vllm.entrypoints.openai.api_server \
  --model /model \
  --dtype float16 \
  --quantization fp8 \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.88 \
  --max-model-len 8192 \
  --max-num-batched-tokens 8192 \
  --max-num-seqs 64 \
  --block-size 64 \
  --enforce-eager \
  --trust-remote-code \
  --host 0.0.0.0 \
  --port 8000

Observed result

traps: VLLM::Worker[...] general protection fault
traps: VLLM::Worker[...] general protection fault

xe 0000:03:00.0: [drm] GT0: Engine reset: engine_class=bcs
xe 0000:07:00.0: [drm] GT0: Engine reset: engine_class=bcs

In one run, the GP fault was reported in libc.so.6 from the worker processes. We do not know whether this indicates a pthread/context issue, memory corruption surfacing in libc, or another native runtime issue.

Test matrix

Test Stack Key config Result BCS reset
Profile A local source-build CCL_ENABLE_SYCL_KERNELS=0 Stable, HEALTH=200, ~362 tok/s @ 50 concurrency 0
Profile B local source-build CCL_ENABLE_SYCL_KERNELS=1 XCCL / worker-init crash yes
Test F local source-build CCL_ENABLE_SYCL_KERNELS=1, UR_L0_V2_FORCE_DISABLE_COPY_OFFLOAD=1 ProcessGroupXCCL::allreduce_impl crash 0
Test G local source-build above + CCL_ALLREDUCE=ring Passed allreduce-init, later crashed during Dynamo/Inductor compile 0
C4 v2 local source-build above + --enforce-eager, VLLM_XPU_ENABLE_XPU_GRAPH=0 HEALTH=200, inference works, but ~0.5 tok/s 0
C8 intel/vllm:0.17.0-xpu Intel image, TP=2 FP8 VLLM::Worker GP fault + BCS reset yes
C8b intel/vllm:0.17.0-xpu above + CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0 same GP fault + BCS reset on both GPUs yes

Important control: standalone XCCL/SYCL sweep passes

Using the same host and relevant XPU/CCL environment as the failing vLLM path:

CCL_ENABLE_SYCL_KERNELS=1
torchrun --nproc-per-node=2 xccl_sweep.py

Results:

Collective fp32 fp16 bf16 int32 Max size
all_reduce OK OK OK OK 33M elements / 134 MB
all_gather OK OK OK OK 33M elements / 134 MB
reduce_scatter OK OK OK not tested 33M elements / 134 MB

This suggests the hardware and base oneCCL/SYCL collective path are functional in isolation. The crash appears to require the vLLM TP=2 worker-init / ProcessGroupXCCL context.

Failure domains observed

We observed three separate failure domains while trying to make the source-built image start with CCL_ENABLE_SYCL_KERNELS=1.

1. BCS engine reset / Level Zero V2 copy-offload side effect

UR_L0_V2_FORCE_DISABLE_COPY_OFFLOAD=1 avoided the BCS engine reset in one worker-init canary, but did not fix the underlying vLLM/XCCL crash.

2. oneCCL topo allreduce / ProcessGroupXCCL path

The source-build crashed in:

c10d::ProcessGroupXCCL::allreduce_impl
c10d::ProcessGroupXCCL::collective
c10d::ops::allreduce_XPU

CCL_ALLREDUCE=ring got past this stage, but performance collapsed and the next failure occurred later during compile.

oneCCL documents that for GPU buffers, topo is the default algorithm, and that algorithms other than topo copy GPU-buffer data to host and follow the specified CPU algorithm. That likely explains the large performance drop with CCL_ALLREDUCE=ring.

3. vLLM compile / XPU graph path

After bypassing the allreduce failure with UR_L0_V2_FORCE_DISABLE_COPY_OFFLOAD=1 and CCL_ALLREDUCE=ring, the next failure occurred during Dynamo/Inductor compile.

Adding:

--enforce-eager
VLLM_XPU_ENABLE_XPU_GRAPH=0

allowed vLLM to reach HEALTH=200 and serve inference, but throughput was only ~0.5 tok/s in our smoke test. This is a debug path, not a usable workaround.

Stable fallback on our current host

The only stable and usable config we found on this Ubuntu 24.04.4 / HWE 6.17 host is:

CCL_ENABLE_SYCL_KERNELS=0
CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0
SYCL_UR_USE_LEVEL_ZERO_V2=0
CCL_ATL_TRANSPORT=ofi
CCL_ZE_IPC_EXCHANGE=pidfd
ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
ZE_AFFINITY_MASK=0,1
ONEAPI_DEVICE_SELECTOR=level_zero:*
VLLM_WORKER_MULTIPROC_METHOD=spawn
VLLM_XPU_ENABLE_XPU_GRAPH=1

Observed performance:

  • ~29 tok/s single-stream
  • ~240 tok/s at 16 concurrency
  • ~362 tok/s at 50 concurrency

Why this looks host-stack related

We are not claiming the exact root cause is known. However:

  1. Intel's pre-built intel/vllm:0.17.0-xpu image reproduces the same failure pattern.
  2. Adding CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0 removes the CCL topology warning but does not prevent the GP fault + BCS reset.
  3. Standalone torchrun XCCL/SYCL collective sweeps pass on the same host.
  4. The failure requires the vLLM TP=2 worker initialization / ProcessGroupXCCL context.
  5. Our host differs from Intel's published 0.17.0-xpu validation BOM, especially OS/kernel/KMD/firmware.

A public external report claims that a similar 2× Intel Arc Pro B70 + Qwen3-30B-A3B + TP=2 + FP8 setup using intel/vllm:0.17.0-xpu on Ubuntu 25.10 reaches high throughput. We have not reproduced that environment yet, so we treat this only as motivation for a host-stack A/B test.

We are preparing a separate Ubuntu 25.10 spare-disk test and will report back.

Hardware behavior and safety

We observed BCS engine resets across multiple failed test runs. After each:

  • The xe driver recovered the engine.
  • GPU devices remained accessible.
  • Temperatures returned to idle.
  • No cascading errors were observed.
  • A full reboot cleared all state cleanly.

Because BCS engine resets are not normal operation, we stopped repeated default Profile B testing on the current host stack.

Related upstream / external signals

  • Intel's 0.17.0-xpu release notes say the container is validated on Intel Arc Pro B-Series Graphics and list the validation BOM as Ubuntu 25.04 + KMD 6.14.0 + oneAPI 2025.3.2 hotfix + PyTorch 2.10 + vllm-xpu-kernels 0.1.4 + oneCCL 2021.15.7.8.
  • oneCCL docs state that CCL_ALLREDUCE=topo is the default for GPU buffers, and that non-topo algorithms copy GPU-buffer data to host and use the CPU algorithm.
  • Intel SYCL runtime docs state that the Level Zero V2 adapter is used by default on Xe2/Battlemage, and that SYCL_UR_USE_LEVEL_ZERO_V2=0 selects the legacy adapter.
  • vllm-xpu-kernels tracks ongoing work to make torch.compile the default execution path for XPU. This may be relevant to the later Dynamo/Inductor failure domain, but the primary C8/C8b failure happens earlier during worker initialization.
  • There are similar multi-GPU Intel XPU reports in adjacent projects where single-GPU works but multi-GPU fails in SYCL/Level Zero cross-device paths. This may not be the same bug, but it suggests this class of issue is worth investigating.

Questions

  1. Is dual Arc Pro B70 + Qwen3-30B-A3B + TP=2 + FP8 expected to work with intel/vllm:0.17.0-xpu on Ubuntu 24.04.4 HWE 6.17?
  2. Is Ubuntu 24.04.4 / HWE 6.17 a supported host stack for intel/vllm:0.17.0-xpu on Intel Arc Pro B70?
  3. Which host BOM should users target for dual Arc Pro B70 + Qwen3-30B-A3B + TP=2 + dynamic FP8?
  4. Should this be routed to vLLM, vllm-xpu-kernels, oneCCL, Intel compute-runtime / Level Zero, or the Linux xe KMD?
  5. What additional logs would be useful? We can provide redacted:
    • full dmesg -T
    • journalctl -k -b
    • docker logs
    • XCCL sweep script and output
    • lspci -nn
    • sycl-ls
    • xpu-smi output
    • exact container command lines

Before submitting a new issue...

  • Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingintel-gpuRelated to Intel GPU

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions