LLMs laufen stabil auf Proxmox mit AMD AI CPUs über die iGPU (Radeon 880M / 890M) via Vulkan
Die AMD XDNA NPU wird aktuell von llama.cpp nicht genutzt
LXC (privileged) ist der beste Weg, nicht VM
---
Motivation
Mit den neuen AMD AI CPUs (z. B. Ryzen AI / Strix) stellt sich für viele Proxmox-Nutzer die Frage:
„Kann ich GPU oder NPU sinnvoll für lokale LLMs nutzen?“
Dieser Beitrag zeigt einen vollständig getesteten Praxisaufbau mit:
- Proxmox VE
- AMD AI CPU
- LXC Container (privileged)
- llama.cpp mit Vulkan
Kein Marketing, sondern echte Logs und reproduzierbare Schritte.
---
Host-Voraussetzungen prüfen (Proxmox)
Kernel & Proxmox Version
Code:
uname -r
pveversion -v
IOMMU aktiv?
Code:
dmesg | egrep -i 'amd-vi|iommu'
GPU & NPU sichtbar?
Code:
lspci -nn | egrep -i 'vga|display|npu|accel'
Beispiel:
Code:
c6:00.0 Display controller: AMD Radeon 890M
c7:00.1 Signal processing controller: AMD XDNA NPU
---
Treiberstatus auf dem Host prüfen
AMD GPU
Code:
lsmod | grep amdgpu
ls -l /dev/dri
AMD NPU (XDNA)
Code:
lsmod | grep amdxdna
ls -l /dev/accel
Erwartet:
Code:
/dev/accel/accel0
---
Warum LXC und keine VM?
- Kein PCIe-Passthrough notwendig
- Direkter Zugriff auf /dev/dri und /dev/accel
- Weniger Overhead als VM
- Stabiler Vulkan-Userspace
Wichtig:
Der Container muss privileged sein, sonst funktionieren DRM/Vulkan nicht zuverlässig.
---
LXC Container erstellen
Beispiel-Setup:
- VMID: 3300
- Ubuntu 24.04
- 8 vCPUs
- 32 GB RAM
- 200 GB Disk
Code:
pct create 3300 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname llm-3300 \
--cores 8 \
--memory 32768 \
--swap 0 \
--rootfs ceph-vmstore:200 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--features keyctl=1,nesting=1 \
--unprivileged 0
---
GPU & NPU in den Container durchreichen
Datei: /etc/pve/lxc/3300.conf
Code:
# AMD GPU (DRM / Vulkan)
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.cgroup2.devices.allow: c 226:* rwm
# AMD NPU (XDNA)
lxc.mount.entry: /dev/accel/accel0 dev/accel/accel0 none bind,optional,create=file
lxc.cgroup2.devices.allow: c 261:* rwm
Container starten:
Code:
pct start 3300
---
Im Container prüfen (Geräte)
Code:
ls -l /dev/dri
ls -l /dev/accel
Erwartet:
Code:
/dev/dri/card0
/dev/dri/renderD128
/dev/accel/accel0
Hinweis:
An dieser Stelle ist Vulkan noch nicht installiert.
Es wird nur geprüft, ob die Devices korrekt durchgereicht sind.
---
Vulkan im Container installieren
Code:
apt update
apt install -y libvulkan1 vulkan-tools mesa-vulkan-drivers
---
Vulkan-Funktion prüfen
Code:
vulkaninfo --summary
Erwartet (relevanter Auszug):
Code:
deviceName = AMD Radeon 890M
driverName = radv
Wichtig:
Wenn stattdessen
Code:
deviceName = llvmpipe
---
llama.cpp mit Vulkan bauen
Abhängigkeiten:
Code:
apt install -y build-essential cmake git \
libvulkan-dev vulkan-tools shaderc \
libcurl4-openssl-dev
Build:
Code:
git clone https://github.com/ggerganov/llama.cpp.git /opt/llama.cpp
cd /opt/llama.cpp
cmake -S . -B build -DGGML_VULKAN=ON
cmake --build build -j
---
Modell herunterladen & prüfen
Code:
mkdir -p /opt/models
cd /opt/models
curl -L -o llama-3.2-3b-instruct-q4_k_m.gguf \
https://huggingface.co/hugging-quants/Llama-3.2-3B-Instruct-Q4_K_M-GGUF/resolve/main/llama-3.2-3b-instruct-q4_k_m.gguf
Hash prüfen:
Code:
sha256sum llama-3.2-3b-instruct-q4_k_m.gguf
---
llama-server starten (empfohlen)
Hinweis: mmap aktivieren und Direct-IO deaktivieren (wichtig bei Ceph / RBD)
Code:
/opt/llama.cpp/build/bin/llama-server \
-m /opt/models/llama-3.2-3b-instruct-q4_k_m.gguf \
--mmap --no-direct-io \
-ngl 99 \
--host 0.0.0.0 \
--port 8080
Erfolgsanzeige:
Code:
Found 1 Vulkan devices:
AMD Radeon 890M
offloaded 29/29 layers to GPU
server is listening on http://0.0.0.0:8080
---
API testen (OpenAI-kompatibel)
Code:
curl http://<container-ip>:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-3.2-3b-instruct-q4_k_m.gguf",
"messages": [
{ "role": "user", "content": "Was ist Proxmox?" }
],
"max_tokens": 200
}'
---
Wird die NPU genutzt?
Kurzantwort: Nein.
Details:
- amdxdna Kernelmodul ist geladen
- /dev/accel/accel0 ist vorhanden
- llama.cpp besitzt aktuell kein XDNA/NPU Backend
Die Inferenz läuft vollständig über:
- AMD iGPU (Vulkan)
- UMA-RAM
---
Fazit
AMD iGPU + Vulkan ist produktionsreif für LLMs auf Proxmox
AMD NPU ist (Stand heute) nicht nutzbar für llama.cpp
LXC (privileged) ist der empfohlene Weg
Empfehlung:
Wer heute lokale LLMs auf Proxmox betreiben will, sollte auf die GPU setzen – nicht auf die NPU.
---
Getestet auf:
- Proxmox VE 9.1.4
- AMD Ryzen AI (Strix)
- Ubuntu 24.04 LXC (privileged)
- llama.cpp mit Vulkan