How AI Playground uses Intel GPUs on Linux and what must already be on the
host. AI Playground does not install Linux GPU drivers or kernels — prepare
the system before you install the app (AppImage, .deb, or dev build).
TL;DR (host prep before AI Playground)
- Follow Intel's OMIX install guide for kernel + compute drivers (
intel-omix).- Install Vulkan from Ubuntu (§2b) — required for llama.cpp GPU, not covered by OMIX alone.
- Verify Level Zero / Vulkan (§3), then install AI Playground and reinstall backends if needed (§5).
The card showing up in
lspciis not enough — that's only the PCI device; you need userspace compute and Vulkan drivers on the host first.
Each backend independently decides whether to use the GPU on Linux. The decision
is made by WebUI/electron/adapters/hardware/deviceDetection.ts, which checks both
hardcoded library paths and the dynamic linker cache (ldconfig -p) so it
works across distros. The decision is logged to the terminal running
npm run dev (not the in-app console, because it runs at service-construction
time before the renderer logger attaches):
Linux Level Zero runtime detected — Intel GPU (XPU) enabled
Linux Vulkan loader detected — llama.cpp will use the GPU (ubuntu-vulkan-x64) build
| Backend | Variant/build chosen | Gating function | Required runtime |
|---|---|---|---|
| llama.cpp | ubuntu-vulkan-x64 (GPU) vs ubuntu-x64 (CPU) |
linuxHasVulkanLoader() |
Vulkan loader + Intel ANV |
| ComfyUI | xpu (torch+xpu) vs cpu |
linuxHasLevelZeroRuntime() |
Level Zero loader + Intel L0 GPU |
| OpenVINO | GPU device exposed via OVMS |
OpenVINO ov.Core().available_devices (Python detection venv) |
Level Zero and/or OpenCL |
The build/variant is chosen at install time, so after installing the GPU drivers you must reinstall (or re-pick) the affected backends — see §5.
Upstream PyTorch XPU (torch.xpu, used by ComfyUI XPU) only supports Arc (DG2),
Data Center GPU Max, and Core-Ultra Xe iGPUs (Meteor/Lunar/Panther Lake).
Older Gen9 iGPUs (e.g. HD Graphics 630) are not supported by XPU — on
those, ComfyUI correctly stays on CPU. llama.cpp (Vulkan) and OpenVINO (GPU)
can still use Gen9.
Do this on Ubuntu before installing AI Playground. None of these steps are run by the app installer; they are standard system administration.
Use Intel's documentation as the source of truth for repository setup, kernel
requirements, intel-omix installation, render-group access, and upgrades:
Installing Intel Open Middleware Xe
Check your GPU, Ubuntu version, and kernel against Intel's OMIX support matrix before you start. On Ubuntu 24.04, Intel currently documents 24.04.4, 26.04, or 24.04 with the 6.17 HWE kernel for OMIX — follow Intel's prerequisites and installation steps there, not a copy in this repo.
What AI Playground expects after you finish Intel's guide:
| Host requirement | Used by |
|---|---|
intel-omix runtime (Level Zero + OpenCL compute stack) |
ComfyUI XPU, OpenVINO GPU |
| Kernel version Intel documents for your hardware | Stable GPU/NPU binding |
| Membership in the DRM render group (per Intel's guide) | OpenCL / Level Zero device access |
You do not need intel-omix-dev to run AI Playground — that package is for
building PyTorch/SYCL workloads locally.
Corporate proxy tip. Intel's guide uses
wgetfor the GPG key. Ifhttp(s)_proxyis set butno_proxyincludes*.intel.com,wgetmay hang becauserepositories.intel.comresolves outside that pattern. Prefercurl -fsSL ${http_proxy:+--proxy "$http_proxy"} https://repositories.intel.com/gpu/intel-graphics.key | sudo gpg --dearmor -o /usr/share/keyrings/intel-graphics.gpgwhen fetching the key.
Optional: install clinfo from apt if Intel's procedure does not already, so you
can verify OpenCL in §3.
OMIX covers the compute stack for ComfyUI and OpenVINO; llama.cpp still needs Vulkan from Ubuntu. Install this on the host before AI Playground as well:
sudo apt-get install -y libvulkan1 mesa-vulkan-drivers vulkan-toolslibvulkan1→libvulkan.so.1loader.mesa-vulkan-drivers→ provideslibvulkan_intel.so(the ANV driver that drives Arc/DG2 and Gen9+ iGPUs).
Intel's OMIX guide adds your user to the render group. Some setups also need
video for legacy i915 paths:
sudo gpasswd -a "$USER" render
sudo gpasswd -a "$USER" video
# log out/in (or `newgrp render`) so the group membership appliesRequired only if your CPU has an integrated NPU (Meteor/Lunar/Panther/Arrow Lake)
and you want OpenVINO to enumerate NPU as an inference target. Without it,
Core().available_devices silently returns only ['CPU', 'GPU'] — even though
/dev/accel/accel0 is present and intel_vpu is loaded.
The NPU userspace is not in the GPU APT repo above. It ships only as a release tarball on GitHub:
# Pick the latest tag from https://github.com/intel/linux-npu-driver/releases
NPU_TAG=v1.33.0
NPU_BUILD=v1.33.0.20260529-26625960453
cd /tmp
curl -fL ${http_proxy:+--proxy "$http_proxy"} \
-o linux-npu-driver.tar.gz \
"https://github.com/intel/linux-npu-driver/releases/download/${NPU_TAG}/linux-npu-driver-${NPU_BUILD}-ubuntu2404.tar.gz"
mkdir -p linux-npu-driver && tar -xzf linux-npu-driver.tar.gz -C linux-npu-driver
sudo apt install -y \
./linux-npu-driver/intel-driver-compiler-npu_*.deb \
./linux-npu-driver/intel-fw-npu_*.deb \
./linux-npu-driver/intel-level-zero-npu_*.debVerify (after re-login so render group membership is active):
ls /usr/lib/x86_64-linux-gnu/libze_intel_npu.so* # plugin must exist
# Use the app's managed Python venv (system python3 won't have openvino):
~/.local/share/ai-playground/resources/OpenVINO/.venv/bin/python3 -c \
"import openvino as ov; print(ov.Core().available_devices)"
# Expected: ['CPU', 'GPU', 'NPU']Kernel pairing. The NPU userspace ABI is locked to the kernel
intel_vpumodule. Panther Lake needs kernel ≥ 6.10; on older Ubuntu kernels installlinux-generic-hwe-24.04.Proxy. GitHub release downloads redirect to AWS, which the
*.intel.comno_proxyrule does not cover. The${http_proxy:+--proxy ...}form above forwards the proxy explicitly when one is set.
If your GPU or Ubuntu/kernel combination is not listed in Intel's OMIX support matrix (for example some Arc A-series setups on an older 24.04 kernel), install Level Zero from Intel's generic GPU repo before AI Playground using the legacy path:
curl -fsSL ${http_proxy:+--proxy "$http_proxy"} \
https://repositories.intel.com/gpu/intel-graphics.key \
| sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu noble unified" \
| sudo tee /etc/apt/sources.list.d/intel-gpu-noble.list
sudo apt-get update
sudo apt-get install -y libze-intel-gpu1 libze1 intel-opencl-icd clinfoIf apt-get update 404s on unified, Intel may have pinned a dated path (e.g.
noble/production/2328 unified). Check
https://repositories.intel.com/gpu/ubuntu/dists/ for the current component.
# Kernel binding + render node (Arc exposes /dev/dri/renderD12x)
ls -l /dev/dri
lspci -nnk -d 8086:5690 # "Kernel driver in use: i915" (or xe) + device id
# Level Zero (ComfyUI XPU + OpenVINO GPU)
ldconfig -p | grep -E 'libze_loader|libze_intel_gpu'
clinfo | grep -iE 'Number of platforms|Device Name' # expect "Intel(R) Arc(TM) A770"
# Vulkan (llama.cpp)
ldconfig -p | grep libvulkan
vulkaninfo --summary | grep -iE 'deviceName|driverName' # expect Intel Arc + ANVIf lspci lists the GPU but clinfo / vulkaninfo show no device, the kernel
sees the card but the userspace compute/Vulkan driver is missing — finish §2
(OMIX or §2e legacy packages, plus §2b for Vulkan) before installing the app.
Two common causes (often both):
- Group membership not applied. After
gpasswd -a "$USER" renderyou must log out and back in (or reboot). Until then your session cannot open/dev/dri/renderD12x, so OpenCL/Level Zero see no device. Verify withgroups | tr ' ' '\n' | grep -E 'render|video'andls -l /dev/dri. - OpenCL ICD not installed.
0 platformsmeans no ICD is registered — installintel-opencl-icd. Check/etc/OpenCL/vendors/*.icd.
Note the Level Zero loader is separate from the OpenCL ICD: libze_loader.so
being present (so linuxHasLevelZeroRuntime() returns true) does not mean
the GPU is usable. torch.xpu / OpenVINO also need the Level Zero GPU backend
(libze_intel_gpu.so, installed via intel-omix or libze-intel-gpu1) and an
accessible render node. Confirm the GPU is actually live (clinfo lists the
device, /dev/dri accessible) before reinstalling ComfyUI for XPU, or
torch.xpu.device_count() will be 0.
Use Intel's OMIX guide and support matrix (§2a) as the primary kernel guidance for your GPU. Additional notes for AI Playground backends:
- Arc (DG2) needs a kernel with DG2
i915support. Ubuntu 24.04's 6.8 kernel supports it out of the box when OMIX does not require a newer HWE build. On older kernels you may needi915.force_probe=<device-id>on the kernel command line. - Panther Lake / Lunar Lake / Arrow Lake use the new
xekernel driver (noti915). Needs kernel ≥ 6.10 — installlinux-generic-hwe-24.04on Ubuntu 24.04 if your kernel is older (OMIX may require 6.17 HWE on 24.04; prefer the version Intel documents for your GPU). - Confirm the driver bound with
lspci -nnk→Kernel driver in use: i915(orxe).
For live utilization, frequency, and memory stats on Intel GPUs, use xpu-smi
from Intel's XPU Manager (xpumanager)
repo. Install and run it on the host per that project's Linux documentation
(for example, xpu-smi discovery to list devices, then the stats subcommands
while AI Playground is generating).
intel_gpu_top (from intel-gpu-tools) does not support the xe driver
yet. If you do not have xpu-smi installed, you can still see which processes hold
the render node on xe:
sudo fuser -v /dev/dri/renderD128
# Healthy AI-Playground inference shows: ovms + ai-playground.bin + python (ComfyUI)For instantaneous frequency on xe without xpu-smi, read sysfs:
cat /sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq # GPU current MHz
cat /sys/class/drm/card0/device/tile0/gt0/freq0/max_freqHost drivers must already be in place (§2–§3). The GPU build/variant is selected during backend installation inside the app, so after drivers are ready:
- ComfyUI — detection flips to
xpuand the UI prompts a reinstall on thecpu → xpuvariant mismatch. Accept it sotorch+xpuwheels are installed. - llama.cpp — CPU and Vulkan share the same
standardvariant, so it does not auto-reinstall. Uninstall + reinstall llama.cpp so it downloads theubuntu-vulkan-x64build. Afterwards--list-deviceslists the GPU and--gpu-layers 999offloads to it. - OpenVINO — restart the backend; the device dropdown will list
GPU(detection runs in the OpenVINO Python venv viadetect_devices.py).
After adding sys_platform == 'linux' to comfyui-deps/pyproject.toml and
pyproject-flexible-venv.toml, the uv.lock should be regenerated on Linux so
the xpu extra resolves to the pytorch-xpu index instead of the default
CUDA-bundled PyPI torch. Symptom if stale: uv tries to install nvidia-* /
cuda-* packages on a non-NVIDIA Linux host and the env check fails with
expected object, received null.
Regenerate on the Linux machine:
cd comfyui-deps
uv lockWebUI/electron/adapters/hardware/deviceDetection.ts—linuxHasLevelZeroRuntime(),linuxHasVulkanLoader()(ldconfig-aware, logged).WebUI/electron/adapters/backends/comfyUIBackendService.ts— XPU variant selection, oneAPILD_LIBRARY_PATH,ZE_FLAT_DEVICE_HIERARCHY, lowvram handling.WebUI/electron/adapters/backends/llamaCppBackendService.ts— Vulkan build selection (resolveDownloadUrl()),--list-devicesparsing.WebUI/electron/adapters/backends/openVINOBackendService.ts— OVMS env (system Python on Linux), Python device-detection venv.WebUI/electron/adapters/hardware/hardwareDiscovery.ts—lspci-based Intel GPU detection (mode recommendation).