[Bug]: INT4 GPTQ MoE model crashes with UR_RESULT_ERROR_OUT_OF_RESOURCES on Intel Arc Pro B70 — dense models work fine
- Dominant language
- C++
- Stars
- 529
- Forks
- 80
- Avg merge
- 9h 7m
- Merged PRs (30d)
- 38
Description
Summary
Running any INT4 GPTQ MoE (Mixture of Experts) model on intel/llm-scaler-vllm:0.14.0-b8.3.1 with an Intel Arc Pro B70 32GB crashes during warmup with RuntimeError: level_zero backend failed with error: 40 (UR_RESULT_ERROR_OUT_OF_RESOURCES) inside torch.ops.torch_ipex.group_mm_int4_out_marlin.
An identical setup with a dense INT4 GPTQ model (same container, same hardware, same arguments) works perfectly. The crash is specific to the MoE expert GEMM kernel path.
Environment
Property | Value
-- | --
Container image | intel/llm-scaler-vllm:0.14.0-b8.3.1
vLLM version | 0.14.1.dev0+gb17039bcc.d20260605
GPU | Intel Arc Pro B70 32GB
Host OS | (Unraid / Docker)
Tensor parallel size | 1
dtype | float16
Working case (dense model) ✅
Model: XReyRobert/Qwopus3.6-27B-v2-GPTQ-Pro-v1
Architecture resolved by vLLM: Qwen3_5ForConditionalGeneration ← dense model
Post arguments:
-c "export VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 && export VLLM_WORKER_MULTIPROC_METHOD=spawn && export VLLM_OFFLOAD_WEIGHTS_BEFORE_QUANT=1 && export VLLM_QUANTIZE_Q40_LIB=/usr/local/lib/python3.12/dist-packages/vllm_int4_for_multi_arc.so && vllm serve --port 2222 --host 0.0.0.0 --gpu-memory-util 0.9 --max-num-batched-tokens 8192 --max-model-len 16550 --block-size 64 --dtype float16 --model /models/Qwopus3.6-27B-v2-GPTQ-Pro-v1 --served-model-name Qwopus3.6-27B-v2-GPTQ-Pro-v1 --tensor-parallel-size 1 --quantization gptq --enforce-eager --trust-remote-code --disable-log-requests --enable-auto-tool-choice --tool-call-parser qwen3_coder --allow-deprecated-quantization"Result: Server starts successfully, processes requests at ~30 tokens/s. ✅
Failing case (MoE model) ❌
Model: palmfuture/Qwen3.6-35B-A3B-GPTQ-Int4
Architecture resolved by vLLM: Qwen3_5MoeForConditionalGeneration ← MoE model
Model quantization specs: GPTQ v2, 4-bit, group_size=128, symmetric
Post arguments (identical setup, only model changed):
-c "export VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 && export VLLM_WORKER_MULTIPROC_METHOD=spawn && export VLLM_OFFLOAD_WEIGHTS_BEFORE_QUANT=1 && export VLLM_QUANTIZE_Q40_LIB=/usr/local/lib/python3.12/dist-packages/vllm_int4_for_multi_arc.so && vllm serve --port 2400 --host 0.0.0.0 --gpu-memory-util 0.9 --max-num-batched-tokens 8192 --max-model-len 16550 --block-size 64 --dtype float16 --model /models/Qwen3.6-35B-A3B-GPTQ-Int4 --served-model-name Qwen3.6-35B-A3B-GPTQ-Int4 --tensor-parallel-size 1 --enforce-eager --trust-remote-code --disable-log-requests --enable-auto-tool-choice --tool-call-parser qwen3_coder --reasoning-parser qwen3 --skip-mm-profiling --allow-deprecated-quantization"Container environment variables:
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1
VLLM_WORKER_MULTIPROC_METHOD=spawn
VLLM_OFFLOAD_WEIGHTS_BEFORE_QUANT=1
VLLM_QUANTIZE_Q40_LIB=/usr/local/lib/python3.12/dist-packages/vllm_int4_for_multi_arc.soResult: Crashes during warmup. ❌
Error log
The model loads successfully (7 shards, 21.40 GiB), passes memory profiling, then crashes at warmup:
sycl_arch not recognized: 21483225088
(EngineCore_DP0 pid=137) File "/usr/local/lib/python3.12/dist-packages/vllm/model_executor/layers/fused_moe/layer.py", line 2005, in forward_impl
final_hidden_states = self.quant_method.apply(
(EngineCore_DP0 pid=137) File "/usr/local/lib/python3.12/dist-packages/vllm/model_executor/layers/quantization/ipex_quant.py", line 1120, in apply
res = layer.ipex_fusion(
(EngineCore_DP0 pid=137) File "/usr/local/lib/python3.12/dist-packages/intel_extension_for_pytorch/transformers/models/xpu/fusions/linear_fusion.py", line 252, in fused_moe_experts
hidden_states = torch.xpu.moe_gemm(
(EngineCore_DP0 pid=137) File "/usr/local/lib/python3.12/dist-packages/intel_extension_for_pytorch/xpu/intrinsic/__init__.py", line 471, in moe_gemm
torch.ops.torch_ipex.group_mm_int4_out_marlin(
RuntimeError: level_zero backend failed with error: 40 (UR_RESULT_ERROR_OUT_OF_RESOURCES)
RuntimeError: Engine core initialization failed. See root cause above.Root cause analysis
The crash occurs in torch.ops.torch_ipex.group_mm_int4_out_marlin which is the INT4 MoE expert GEMM kernel used exclusively for MoE architectures. Dense models never reach this code path and work fine.
The error UR_RESULT_ERROR_OUT_OF_RESOURCES (Level Zero error code 40) suggests the kernel is requesting more GPU resources (registers, shared memory, or sub-group size) than the Arc Pro B70 can provide. This is likely related to the preceding warning sycl_arch not recognized: 21483225088 — the IPEX runtime does not recognize the B70's SYCL architecture ID, which may cause it to dispatch a kernel compiled for a different tile/EU configuration.
Key difference between working and failing:
- Dense model →
Qwen3_5ForConditionalGeneration→ no MoE GEMM → ✅ works - MoE model →
Qwen3_5MoeForConditionalGeneration→ hitsgroup_mm_int4_out_marlin→ ❌ crashes
Note: Memory is NOT the issue. The B70 has 32GB VRAM and the model only uses 21.40 GiB after loading. The crash happens at kernel dispatch, not allocation.
What was tried
--quantization gptq→ same crash--quantization gptq_marlin→ same crash--quantization marlin→ same crashexport SYCL_DEVICE_FILTER=xpu→ same crash- Multiple GPTQ models for Qwen3.6-35B-A3B (both group_size=32 and group_size=128) → same crash
- All point to the same
group_mm_int4_out_marlinkernel as the failure point
Expected behavior
INT4 GPTQ MoE models should run on Intel Arc Pro B70 with intel/llm-scaler-vllm:0.14.0-b8.3.1, as the container release notes state support for "Qwen3.5/3.6 series" and MoE models.
Question
Is group_mm_int4_out_marlin compiled/optimized for Arc Pro B70 (Battlemage)? If the SYCL arch ID 21483225088is not recognized, the kernel may be falling back to a wrong configuration. Is there a workaround or environment variable to force a compatible kernel path?
Contributor guide
Assessment
This issue has not been assessed yet.