上一篇 中,Shimmy 在 WSL2 + Intel 集显环境下无法运行。本文深入拆解这个问题的根因——不是 Shimmy 的锅,也不是 llama.cpp 的锅,而是 WSL2 的 DXG 内核模块与 Intel GPU 驱动在协议层就不兼容

本文是「本地 LLM 推理环境」系列第二篇。

核心结论

WSL2 中 Intel 集成显卡无法用于 LLM 推理。问题不在 IGC 或 OpenCL 驱动本身,而是 WSL2 DXG 内核模块与 Intel Arc 140T 的 Windows 驱动不兼容。

WSL2 的 GPU 栈长什么样

从硬件往上 4 层:

Python (llama-cpp-python, OpenCL)
[3] IGC — Intel Graphics Compiler
[2] OpenCL ICD (intel-opencl-icd)
[1] WSL2 DXG 内核模块 (/dev/dxg)
[0] Windows Intel GPU 驱动
     物理 GPU (Intel Arc 140T / Arrow Lake H)

各层诊断结果

组件状态证据
[0]Windows 驱动 (32.0.101.6554)⚠️ 偏旧2025-01-15,Intel 在 1~5 月发布了大量 Arrow Lake 更新
[1]WSL2 DXG (kernel 6.6.87.2)🔴 大量 ioctl 失败dmesg 从开机 5 秒起持续报错
[2]OpenCL ICD (23.43.27642.40)✅ 能枚举 GPUclGetDeviceIDs 成功返回 Intel Graphics
[3]IGC (1.0.15468.25)✅ 库完整编译正常,但提交内核需过 DXG 层 → 崩溃

Layer 1 是真正的故障点。

dmesg 里的铁证

dmesg 从头到尾充斥 DXG ioctl 错误,不是运行 llama.cpp 才触发

[    5.459659] misc dxg: dxgkio_query_adapter_info: Ioctl failed: -22  (EINVAL)
[    5.460357] misc dxg: dxgkio_query_adapter_info: Ioctl failed: -2   (ENOENT)
[    5.460880] misc dxg: dxgkio_query_adapter_info: Ioctl failed: -22
...
[78509.821263] misc dxg: dxgkio_query_adapter_info: Ioctl failed: -22
[78509.825964] misc dxg: dxgkio_reserve_gpu_va:     Ioctl failed: -75  (EOVERFLOW)

错误码含义:

errno含义
-2ENOENT适配器不存在
-22EINVAL参数无效(WSL2 DXG 传了 Windows 驱动不理解的参数)
-75EOVERFLOWGPU 虚拟地址预留溢出

WSL2 内核的 dxg 模块和 Windows 侧的 Intel GPU 驱动在协议层面不兼容。

根本原因

Intel Arc 140T 属于 Arrow Lake H 架构,2024 年底刚发布。 Windows 驱动 32.0.101.6554(2025-01-15)是 Arrow Lake 早期版本,对 WSL2 的 DXG 接口支持不完整。DXG 模块向 Windows 驱动发出请求时,驱动不理解或处理有 bug,导致 ioctl 返回 EINVAL/EOVERFLOW。

五种方案实测对比

方案GPU 识别推理推荐度备注
Vulkan (WSL2)❌ 只有 llvmpipefallback CPUMesa 需要原生 /dev/dri
OpenCL (WSL2)✅ 枚举成功❌ DXG ioctl 崩溃更新驱动后再试
SYCL (WSL2)❌ 已确认不可行需手动 patch ABI社区已放弃
Windows Ollama✅ 开箱即用⭐⭐⭐当前唯一可用方案
IPEX-LLM (Win)✅ 17-18 t/s⭐⭐⭐Lunar Lake 已验证

各方案详情

Vulkan (WSL2)/dev/dri 设备不存在,Mesa Intel Vulkan ICD 无法初始化。强制指定后 GPU 数量为 0。

OpenCL (WSL2):GPU 能被正确识别(Intel(R) Graphics [0x7d51]),但提交计算内核时 IGC 编译崩溃——根源在 DXG 层。

SYCL (WSL2):Reddit r/IntelArc 用户 2026-04 确认,WSL2 无法通过标准 Intel SYCL 运行时识别 Intel GPU。社区一致建议改用 Windows 原生。

Windows Ollama:Windows 版原生支持 Intel GPU,WSL2 通过 HTTP API 调用即可。实测验证通过,开箱即用。

IPEX-LLM (Windows 原生):r/IntelArc 用户通过替换 IPEX-LLM 内置 Ollama 二进制,在 Lunar Lake Arc 140V 上实现 qwen3:8b 达到 17-18 tokens/s,100% GPU 占用。

可行的后续方向

优先级方案操作
1🔑 更新 Windows Intel GPU 驱动下载最新版(当前 6554 → 最新 8801)
2更新 WSL2wsl --update
3切回 Windows 稳定版退出 Insider Preview Canary
4尝试 Level Zero 路径sudo apt install intel-level-zero-gpu,走不同 DXG ioctl

推荐顺序:先更新驱动 → 再更新 WSL → 测试效果 → 如仍有问题再切稳定版。

参考