LLMs auf Proxmox mit AMD AI CPUs (Strix): iGPU funktioniert – NPU aktuell nicht

mcpdev80

Active Member
Oct 2, 2019
10
6
43
Germany
  • ✅ 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
angezeigt wird, nutzt der Container keine GPU, sondern CPU-Fallback.

---

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
 
  • Like
Reactions: MME-X