#38253·openvino

[Bug]: Qwen3.8-27B with MTP cannot run across 2x Arc Pro B70: PIPELINE_PARALLEL crashes in igdrcl64.dll, TENSOR_PARALLEL unsupported

Author: alphakilomiloCreated Sep 18, 2026Updated Sep 18, 2026

OpenVINO Version

2026.4.0 (OVMS 2026.4.0.869b2186 · OpenVINO 2026.4.0-22959-99c81491cc3 · GenAI 2026.4.0.0-3407-7ea2546852a)

Operating System

Windows 11 Pro (build 26200)

Device used for inference

HETERO (HETERO:GPU.0,GPU.1)

Framework

None

Model used

OpenVINO/Qwen3.8-27B-int8-ov (bundled MTP head, auto-detected: Draft model strategy: MTP (Multi-Token Prediction))

Issue description

On 2x Intel Arc Pro B70 (32 GB each, driver 32.0.101.8992), there is currently no working way to serve Qwen3.8-27B with MTP across both GPUs. Every multi-GPU route fails.

Route Result
HETERO:GPU.0,GPU.1 + PIPELINE_PARALLEL, stock 2026.4.0 Loads, but the whole model is placed on GPU.0 (29.80 GB / 0.00 GB). It runs, but single-GPU in practice.
PIPELINE_PARALLEL with a real split (stock plugins rebuilt from tag 2026.4.0 with the #34702 ratio fix + USM disabled on multi-dGPU, per #33012/#37006) Loads split correctly (15.58 GB / 14.12 GB). Process crashes on the first /v3/chat/completions request.
Same split, MTP off Same crash, same module and offset
TENSOR_PARALLEL Not available: HETERO rejects it (src/plugins/hetero/src/config.cpp:32: "HETERO plugin only support {PIPELINE_PARALLEL}") and the GPU plugin has no tensor-parallel implementation
--pipeline_type LM_CB (the config in the OVMS multi-GPU scaling demo) Not applicable: "Models directory content indicates VLM pipeline, but pipeline type is set to non-VLM type."

The crash is identical with and without MTP, so it is in the multi-GPU execution path rather than in speculative decoding itself. But the net effect for users is that MTP cannot run on more than one GPU. The pipeline-parallel crash is deterministic (same fault address every run) and happens on the first inference that moves data between the two GPUs:

Faulting application name: ovms.exe
Faulting module name: igdrcl64.dll, version: 32.0.101.8992, time stamp: 0x6a94fbfe
Exception code: 0xc0000005
Fault offset: 0x0000000000491e7b
Faulting module path: C:\Windows\System32\DriverStore\FileRepository\iigd_dch_d.inf_amd64_62b87437c1961b1b\igdrcl64.dll

OVMS logs nothing after state changed to: AVAILABLE.

The same model with MTP on a single B70 works (~37 tok/s end-to-end, 200 tokens, short prompt).

Related: #37692 (2x Arc Pro B50, Linux: pipeline-parallel crash in the inter-GPU transfer path, blitter-engine page faults), #37450 (2x A770, Qwen3.8-27B, CL_OUT_OF_RESOURCES), #37006 (2x A770, CL_INVALID_KERNEL_ARGS), #34702 (ratio fix, closed unmerged), openvino.genai#4483 (MTP on Xe2 fails / slows down beyond ~64K context).

Requested: a working multi-GPU path for this model class on discrete Intel GPUs. At minimum, fix the pipeline-parallel crash in the NEO OpenCL runtime (igdrcl64.dll @ 0x491e7b) and make an explicit PIPELINE_PARALLEL actually distribute across the listed devices.

Step-by-step reproduction

  1. Download OpenVINO/Qwen3.8-27B-int8-ov to E:/models/Qwen3.8-27B-int8-ov.
  2. OVMS 2026.4.0 Windows package, after setupvars.bat:
ovms.exe --configure --model_path "E:/models/Qwen3.8-27B-int8-ov" --task text_generation ^
  --target_device "HETERO:GPU.0,GPU.1" --model_distribution_policy PIPELINE_PARALLEL ^
  --draft_model_path "E:/models/Qwen3.8-27B-int8-ov" --enable_prefix_caching false --cache_size 0 --overwrite_models
ovms.exe --model_path "E:/models/Qwen3.8-27B-int8-ov" --model_name qwen3.8-27b --rest_port 8081
  1. Stock plugins: per-GPU memory (Get-Counter '\GPU Adapter Memory(*)\Dedicated Usage') shows 29.80 GB / 0.00 GB, so there is no split.
  2. To force the split, replace openvino_hetero_plugin.dll / openvino_intel_gpu_plugin.dll with builds from tag 2026.4.0 carrying:
    • src/plugins/hetero/src/plugin.cpp: the query_model_ratio change from #34702 (proportional ratio when more than one discrete device is present)
    • src/plugins/intel_gpu/src/runtime/engine.cpp: use_unified_shared_memory() returns false for discrete GPUs when more than one Intel discrete GPU is present
  3. Per-GPU memory now shows 15.58 GB / 14.12 GB.
  4. POST /v3/chat/completions (max_tokens 200). No HTTP response, and the process terminates. The Windows Application log shows the igdrcl64.dll fault above.
  5. Repeat steps 2–6 without --draft_model_path (MTP off): same crash, same offset.

Relevant log output

bash
[servable_initializer.cpp:688] Initializing Visual Language Model Continuous Batching servable
[servable_initializer.cpp:239] Draft model strategy: MTP (Multi-Token Prediction)
[pipelinedefinitionstatus.hpp:61] Mediapipe: qwen3.8-27b state changed to: AVAILABLE after handling: ValidationPassedEvent:
<process exits on first request, no further log output>

Source: openvinotoolkit/openvino