load_attempt.log
[SYCL] Qwen3-Next architecture: layer-split tensor allocation broken on dual Intel Arc Pro B70 (Battlemage/Xe2) on master b9093
Summary
Loading Qwen3-Coder-Next 80B-A3B (arch = qwen3next) on dual Intel Arc Pro B70 with --split-mode layer --tensor-split 50,50 requests a single 25.4 GB (25,371,093,248 byte) allocation on SYCL0, ignoring the tensor-split distribution across the two cards. Each card has 32 GB free at load time, so the model (46.20 GiB total) should fit comfortably split 50/50 with KV cache headroom.
The same model loaded successfully under Windows on the official prebuilt SYCL release from a few weeks earlier (asymmetric distribution: SYCL0 ~30.4 GB, SYCL1 ~31.3 GB). PMZFX's public benchmark of this exact model on dual B70 reports 43.4 t/s on commit ec6f7a6a5c (build b8840-12, 2026-04-21).
Reproduction
Hardware
- 2× Intel Arc Pro B70 (BMG-G31, full Big Battlemage die)
- 32 GB GDDR6 ECC per card, PCIe Gen 4 x8 each
- AMD Ryzen 5 4500, 64 GB system RAM
- ASRock B550M-A motherboard
Software
- Fedora 44, kernel 6.19.10-300.fc44.x86_64
- Intel Compute Runtime 26.09.37435.12
- oneAPI Level Zero 1.28.2 (V1, V2 disabled via
SYCL_UR_USE_LEVEL_ZERO_V2=0)
- Intel oneAPI 2026.0.0 (DPC++ compiler 2026.0.0.20260331)
- llama.cpp commit
1e5ad35d5 (build 9093, master HEAD as of 2026-05-09)
Build
cmake -B build \
-DGGML_SYCL=ON \
-DGGML_SYCL_F16=ON \
-DGGML_SYCL_TARGET=INTEL \
-DCMAKE_C_COMPILER=icx \
-DCMAKE_CXX_COMPILER=icpx \
-DGGML_NATIVE=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="-O3 -DNDEBUG" \
-DCMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG" \
-G Ninja
cmake --build build --config Release -j 4
Build completes cleanly. llama-server --version confirms IntelLLVM 2026.0.0.
Environment
export SYCL_UR_USE_LEVEL_ZERO_V2=0
export GGML_SYCL_DISABLE_OPT=1
export UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1
Launch command
./build/bin/llama-server \
-m Qwen3-Coder-Next-UD-Q4_K_XL.gguf \
-ngl 99 \
--split-mode layer \
--tensor-split 50,50 \
-c 32768 \
-np 1 \
--host 127.0.0.1 \
--port 8080
Model: unsloth/Qwen3-Coder-Next-GGUF UD-Q4_K_XL quantization, 46.20 GiB on disk.
Result
Both devices are detected:
llama_prepare_model_devices: using device SYCL0 (Intel(R) Graphics [0xe223]) - 32568 MiB free
llama_prepare_model_devices: using device SYCL1 (Intel(R) Graphics [0xe223]) - 31790 MiB free
But tensor allocation immediately fails on a single 25.4 GB request to SYCL0:
load_tensors: loading model tensors, this can take a while... (mmap = true, direct_io = false)
ggml_backend_sycl_buffer_type_alloc_buffer: can't allocate 25371093248 Bytes of memory on device
alloc_tensor_range: failed to allocate SYCL0 buffer of size 25371093248
llama_model_load: error loading model: unable to allocate SYCL0 buffer
llama_model_load_from_file_impl: failed to load model
The 25.4 GB allocation pattern suggests the entire MoE expert tensor block (or a substantial fraction of model weights) is being allocated as a single contiguous SYCL buffer to SYCL0 before --tensor-split distribution kicks in. With 32 GB available, the allocation is just over the per-card limit but well within the dual-card combined budget.
sycl::ext::intel::experimental::level_zero per-allocation cap with UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1 should allow allocations >4 GB; that env var is set and earlier smaller failures (~8 GB) on a different model also bypassed the 4 GB limit, so the 25 GB request reaches the underlying memory pool, which simply doesn't have that much contiguous space on a single device.
Expected behavior
--split-mode layer --tensor-split 50,50 should distribute model weights across both SYCL devices so that no single allocation exceeds either card's free VRAM. With 32 GB free per card, a 46 GiB model split should produce roughly 23 GB per card.
Comparison with known-good build
PMZFX's public benchmarks (https://github.com/PMZFX/intel-arc-pro-b70-benchmarks) report this exact model loading and running at 43.4 t/s tg128 on commit ec6f7a6a5c (b8840-12, 2026-04-21) using --split-mode layer on the same hardware class. Their hardware.md confirms --split-mode layer works on dual B70 (and --split-mode row segfaults, separately).
The Windows official prebuilt SYCL release from approximately the same era (early-to-mid April 2026) also loaded this model successfully on the same physical hardware, with asymmetric distribution:
- SYCL0: ~30.4 GB committed
- SYCL1: ~31.3 GB committed
Strongly suggests a regression in the b8840 → b9093 window affecting dual-card allocation for qwen3next-architecture models.
Additional notes
--split-mode none and -ngl 99 on a single card cannot fit this 46 GiB model on a single 32 GB B70, so single-card fallback is not an option.
--split-mode row is reported separately as crashing on dual B70 (PMZFX hardware.md, not yet filed upstream).
- A separate (likely related) failure occurs on Qwen3.6-27B (
arch = qwen35, also hybrid attention/SSM) where the same dual-B70 SYCL build cannot allocate an 8.1 GB tensor regardless of context size. May share a root cause with this issue.
Full load attempt log
[Attached: load_attempt.log showing complete output from launch through failure]
llama.cpp version
$ ./build/bin/llama-server --version
version: 9093 (1e5ad35d5)
built with IntelLLVM 2026.0.0 for Linux x86_64
load_attempt.log
[SYCL] Qwen3-Next architecture: layer-split tensor allocation broken on dual Intel Arc Pro B70 (Battlemage/Xe2) on master b9093
Summary
Loading Qwen3-Coder-Next 80B-A3B (
arch = qwen3next) on dual Intel Arc Pro B70 with--split-mode layer --tensor-split 50,50requests a single 25.4 GB (25,371,093,248byte) allocation on SYCL0, ignoring the tensor-split distribution across the two cards. Each card has 32 GB free at load time, so the model (46.20 GiB total) should fit comfortably split 50/50 with KV cache headroom.The same model loaded successfully under Windows on the official prebuilt SYCL release from a few weeks earlier (asymmetric distribution: SYCL0 ~30.4 GB, SYCL1 ~31.3 GB). PMZFX's public benchmark of this exact model on dual B70 reports 43.4 t/s on commit
ec6f7a6a5c(build b8840-12, 2026-04-21).Reproduction
Hardware
Software
SYCL_UR_USE_LEVEL_ZERO_V2=0)1e5ad35d5(build 9093, master HEAD as of 2026-05-09)Build
Build completes cleanly.
llama-server --versionconfirms IntelLLVM 2026.0.0.Environment
Launch command
Model:
unsloth/Qwen3-Coder-Next-GGUFUD-Q4_K_XL quantization, 46.20 GiB on disk.Result
Both devices are detected:
But tensor allocation immediately fails on a single 25.4 GB request to SYCL0:
The 25.4 GB allocation pattern suggests the entire MoE expert tensor block (or a substantial fraction of model weights) is being allocated as a single contiguous SYCL buffer to SYCL0 before
--tensor-splitdistribution kicks in. With 32 GB available, the allocation is just over the per-card limit but well within the dual-card combined budget.sycl::ext::intel::experimental::level_zeroper-allocation cap withUR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1should allow allocations >4 GB; that env var is set and earlier smaller failures (~8 GB) on a different model also bypassed the 4 GB limit, so the 25 GB request reaches the underlying memory pool, which simply doesn't have that much contiguous space on a single device.Expected behavior
--split-mode layer --tensor-split 50,50should distribute model weights across both SYCL devices so that no single allocation exceeds either card's free VRAM. With 32 GB free per card, a 46 GiB model split should produce roughly 23 GB per card.Comparison with known-good build
PMZFX's public benchmarks (https://github.com/PMZFX/intel-arc-pro-b70-benchmarks) report this exact model loading and running at 43.4 t/s tg128 on commit
ec6f7a6a5c(b8840-12, 2026-04-21) using--split-mode layeron the same hardware class. Their hardware.md confirms--split-mode layerworks on dual B70 (and--split-mode rowsegfaults, separately).The Windows official prebuilt SYCL release from approximately the same era (early-to-mid April 2026) also loaded this model successfully on the same physical hardware, with asymmetric distribution:
Strongly suggests a regression in the b8840 → b9093 window affecting dual-card allocation for
qwen3next-architecture models.Additional notes
--split-mode noneand-ngl 99on a single card cannot fit this 46 GiB model on a single 32 GB B70, so single-card fallback is not an option.--split-mode rowis reported separately as crashing on dual B70 (PMZFX hardware.md, not yet filed upstream).arch = qwen35, also hybrid attention/SSM) where the same dual-B70 SYCL build cannot allocate an 8.1 GB tensor regardless of context size. May share a root cause with this issue.Full load attempt log
[Attached:
load_attempt.logshowing complete output from launch through failure]llama.cpp version