llama.cpp converts models to GGUF and runs them; Intel offers a native OpenVINO GenAI pipeline that loads officially pre-converted OpenVINO IR (INT4-AWQ) with better weight fidelity. I ran the official gemma-4-26B-A4B through it on an Arc 140T iGPU. Full record here — especially the weird 'must use VLMPipeline + force SDPA' pitfall.
Verdict: works ✅. Env: Windows / Arc 140T (19.7GB) / Python 3.12.10 / openvino-genai 2026.5.0 nightly. Model: official IR OpenVINO/gemma-4-26b-a4b-it-int4-ov (INT4 AWQ, 14.6GB). Tested 2026-09.
Results
| Metric | Result |
|---|
| Model load | 41.6s |
| Throughput | 15.7 t/s |
| TTFT (first token) | 167ms |
| TPOT (per token) | 64ms/token |
| pp512 / tg128 | 500 / 13.7~14.0 t/s (post-warmup median, reproduced across two scripts) |
| Quality | Complex Q&A, translation, writing, multi-turn memory all correct, no garbled output |
Three critical steps to get it running
- Must use VLMPipeline, not LLMPipeline (LLMPipeline fails to find input_ids — the input is inputs_embeds)
- Force the SDPA backend to bypass the Continuous Batching (CB/PA) adapter:
VLMPipeline(MODEL_DIR, "GPU", **{"ATTENTION_BACKEND": "SDPA"}); otherwise an EMBEDDINGS assertion fails - Restore the missing openvino_text_embeddings_model.xml (the first aria2 batch silently dropped it, breaking embedder creation) — verify all 16 required small files exist
vs llama.cpp Vulkan
Same official model, both 4-bit:
| Route | pp512 (t/s) | tg128 (t/s) |
|---|
| llama.cpp Vulkan (GGUF Q4_0, 13.6GB) | 285.30 | 20.04 |
| OpenVINO GenAI (IR INT4-AWQ, default config) | 500 | 13.7~14.0 |
GenAI prefill ~75% faster; Vulkan decode ~46% faster. The gap is MoE backend implementation (Vulkan has async expert scheduling) — not tunable. GenAI's value is better weight quality from official INT4-AWQ — a solid alternate route.
The 12-pitfall checklist
| # | Pitfall | Fix | Status |
|---|
| 1 | Must use VLMPipeline; LLMPipeline can't find input_ids | Gemma-4 is registered VLM-only; use VLMPipeline for text too | ✅ |
| 2 | OV 2026.2 stateful decode bug (garbled after first token) | Use 2026.3-dev nightly (GenAI + runtime together) | ✅ |
| 3 | Continuous batching needs the 2026.4 fix stack | Force ATTENTION_BACKEND=SDPA for classic stateful pipeline | ✅ |
| 4 | Router must not be INT4-quantized (self-export only) | OVWeightQuantizationConfig ignored_scope; official IR has it built in | ✅ |
| 5 | Pure INT4 without AWQ is poor on MoE | Official int4-ov measured fine | ✅ |
| 6 | Entire model must fit VRAM; 19.7GB is tight | After VRAM tuning + shorter context; 13.3GB IR is stable | ✅ |
| 7 | transformers version (self-export only) | pip install transformers==5.5.0 (12B needs 5.10.0) | ⏳ |
| 8 | 32K long-context rope LUT patch | VRAM only fits short contexts; skipped | ⏳ |
| 9 | HF direct connection times out | hf-mirror.com mirror (verify files in batches) | ✅ |
| 10 | GPU support is preview-grade | Measured on Arc 140T (15.7 t/s) | ✅ |
| 11 | Gemma-4 is a vision model; text goes through multimodal path | Text can just be generated directly | ✅ |
| 12 | DYNAMIC_QUANTIZATION_GROUP_SIZE garbles long contexts | Set to 0 (measured fine, no special handling) | ✅ |
Environment requirements
| Component | Version |
|---|
| OpenVINO Runtime | 2026.2.0+ (official IR card req.) / 2026.3-dev nightly (clean GPU decode) |
| openvino-genai (pip) | Match the OpenVINO nightly |
| optimum-intel | 1.27.0+ (for conversion; not needed for inference) |
| transformers | 5.5.0 (if self-exporting; 12B needs 5.10.0) |
Summary
- OpenVINO GenAI is a mature alternative to llama.cpp: official INT4-AWQ weights, faster prefill, comfortable 167ms TTFT
- Two core gotchas: VLMPipeline + forced SDPA — remember these and the rest is smooth
- Occasional CL_OUT_OF_RESOURCES past 529 tokens is a driver bug (error literally says 'Due to a driver bug'), not OOM — ignore it
- For decode speed stay on llama.cpp Vulkan (20+ t/s); for official weight quality go GenAI
Download note:After hf-mirror downloads, verify each file — the first batch silently dropped a file that broke embedder creation without any clear error.