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

mcpdev80

Active Member
Oct 2, 2019
10
7
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: UdoB and MME-X
Danke dafür!

Im Einsatz hier ist ein AMD AI 9 HX 370 - im Container/lxc sieht man mit rocminfo drei "agents":

Code:
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version:         1.18
Runtime Ext Version:     1.15
System Timestamp Freq.:  1000.000000MHz
Sig. Max Wait Duration:  18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model:           LARGE
System Endianness:       LITTLE
Mwaitx:                  DISABLED
XNACK enabled:           NO
DMAbuf Support:          YES
VMM Support:             YES

==========
HSA Agents
==========
*******
Agent 1
*******
  Name:                    AMD Ryzen AI 9 HX 370 w/ Radeon 890M
  Uuid:                    CPU-XX
  Marketing Name:          AMD Ryzen AI 9 HX 370 w/ Radeon 890M
  Vendor Name:             CPU
  Feature:                 None specified
  Profile:                 FULL_PROFILE

.
.
*******
Agent 2
*******
  Name:                    gfx1150
  Uuid:                    GPU-XX
  Marketing Name:          AMD Radeon Graphics
  Vendor Name:             AMD
  Feature:                 KERNEL_DISPATCH
  Profile:                 BASE_PROFILE
  Float Round Mode:        NEAR
.
.
*******
Agent 3
*******
  Name:                    aie2p
  Uuid:                    AIE-XX
  Marketing Name:          RyzenAI-npu4
  Vendor Name:             AMD
  Feature:                 AGENT_DISPATCH
  Profile:                 BASE_PROFILE
  Float Round Mode:        NEAR
.
.

Für Linux existiert soweit mir bekannt keine vernüftige Anwendung, die diese NPU unterstützt. Selbst "lemonade" (amd GPU/NPU) orientiert, unterstützt die NPU unter Linux nicht. In kleinen Dosen gibt es news von AMD, bisher nicht für die Allgemeinheit (nur mit account + bussiness kunde):

https://www.phoronix.com/news/Ryzen-AI-Software-1.6.1

Wenn man das PCI device in einer Windows11 VM durchreicht ("passthrough"), wird die NPU erkannt, aber im Gerätemanager mit "Error Code 43" (Fehler liegt vor/deaktiviert) angezeigt. Unter Windows gibt es mehr Anwendungen direkt für die NPU (eben auch "lemonade ai/server").

Unter Proxmox (Kernel Linux pve 6.17.4-2-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.4-2 (2025-12-19T07:49Z) x86_64 GNU/Linux):
c6:00.1 Signal processing controller [1180]: Advanced Micro Devices, Inc. [AMD] Strix/Krackan/Strix Halo Neural Processing Unit [1022:17f0] (rev 10)
 
@Cheuksin, nach nem Firmware-Update werden gern mal BIOS-Settings zurückgesetzt. Check mal ob die NPU im BIOS noch aktiviert ist, bei AMD Strix gibts da meistens nen Eintrag unter Advanced oder sowas wie "AI Features" / "NPU Enable".
Ansonsten erstmal schauen ob das Device überhaupt noch auf PCI-Ebene auftaucht:
Code:
lspci -nn | grep -i 'npu\|xdna\|accel\|1022:17f0'
Wenn da nix kommt, liegts am BIOS/Firmware. Wenn das Device noch da ist, dann prüf ob der Kernel-Treiber geladen wird:
Code:
lsmod | grep amdxdna
dmesg | grep -i xdna
Kann gut sein dass der neue Firmware-Stand irgendwas an der ACPI-Tabelle geändert hat und der Treiber das Device nicht mehr richtig zuordnen kann. Was sagt denn dmesg dazu?
 
Hi @Bu66as,

danke für die info, anscheinend kann er zwar die NPU finden aber beim laden der Firmware hakt es dann.

root@pve:~# lspci -nn | grep -i 'npu\|xdna\|accel\|1022:17f0'
c7:00.1 Signal processing controller [1180]: Advanced Micro Devices, Inc. [AMD] Strix/Krackan/Strix Halo Neural Processing Unit [1022:17f0] (rev 10)

root@pve:~# lsmod | grep amdxdna
amdxdna 139264 0
gpu_sched 65536 2 amdxdna,amdgpu

root@pve:~# dmesg | grep -i xdna
[ 4.726748] amdxdna 0000:c7:00.1: enabling device (0000 -> 0002)
[ 4.787325] amdxdna 0000:c7:00.1: [drm] *ERROR* aie2_check_protocol: Incompatible firmware protocol major 7 minor 2
[ 4.787338] amdxdna 0000:c7:00.1: [drm] *ERROR* aie2_hw_start: firmware is not alive
[ 4.867263] amdxdna 0000:c7:00.1: [drm] *ERROR* aie2_smu_exec: smu cmd 4 failed, 0xff
[ 4.867269] amdxdna 0000:c7:00.1: [drm] *ERROR* aie2_smu_fini: Power off failed, ret -22
[ 4.867271] amdxdna 0000:c7:00.1: [drm] *ERROR* aie2_init: start npu failed, ret -22
[ 4.867993] amdxdna 0000:c7:00.1: [drm] *ERROR* amdxdna_probe: Hardware init failed, ret -22
[ 4.868005] amdxdna 0000:c7:00.1: probe with driver amdxdna failed with error -22
 
Das Problem ist klar: Incompatible firmware protocol major 7 minor 2 - der amdxdna Treiber im PVE-Kernel kommt mit der neuen Firmware-Version nicht klar. Das neue BIOS (3.18) hat wohl ne neuere NPU-Firmware mitgebracht, und der Treiber kann damit nix anfangen.
Du hast zwei Optionen: Entweder BIOS zurück auf die vorherige Version flashen, dann sollte der Treiber wieder greifen. Oder warten bis der amdxdna Treiber im Kernel das neuere Protokoll unterstützt. Welchen PVE-Kernel hast du genau drauf? uname -r wär interessant, vllt gibts schon nen neueren Kernel der das kann.
Du könntest auch mal schauen ob im /lib/firmware/amdnpu/ oder /lib/firmware/amdxdna/ Firmware-Files liegen und welche Version die haben. Manchmal hilft es die linux-firmware Pakete zu aktualisieren, damit der Treiber passende Firmware zum Laden findet.
 
Vielen Dank für die Anleitung! Ich konnte alles erfolgreich auf meinem "N5 Pro" durchspielen. Zwei kleine Anmerkungen habe ich:
apt install -y build-essential cmake git \ libvulkan-dev vulkan-tools shaderc \
"shaderc" scheint es in meinem 24.04.4 nicht zu geben. Stattdessen hilft:
Code:
apt install libshaderc-dev

Und es fehlen zwei Tools:
Code:
apt install glslc  curl

(Ja, das ist alles kein Problem. Aber wenn copy-n-paste "klemmt" gibt der eine oder andere vielleicht schnell wieder auf...)
 
Das Problem ist klar: Incompatible firmware protocol major 7 minor 2 - der amdxdna Treiber im PVE-Kernel kommt mit der neuen Firmware-Version nicht klar. Das neue BIOS (3.18) hat wohl ne neuere NPU-Firmware mitgebracht, und der Treiber kann damit nix anfangen.
Du hast zwei Optionen: Entweder BIOS zurück auf die vorherige Version flashen, dann sollte der Treiber wieder greifen. Oder warten bis der amdxdna Treiber im Kernel das neuere Protokoll unterstützt. Welchen PVE-Kernel hast du genau drauf? uname -r wär interessant, vllt gibts schon nen neueren Kernel der das kann.
Du könntest auch mal schauen ob im /lib/firmware/amdnpu/ oder /lib/firmware/amdxdna/ Firmware-Files liegen und welche Version die haben. Manchmal hilft es die linux-firmware Pakete zu aktualisieren, damit der Treiber passende Firmware zum Laden findet.
der Kernel ist derzeit 6.17.13-1-pve was soweit mir bekannt der aktuellste ist.

root@pve:~# uname -r
6.17.13-1-pve

das Verzeichnis /lib/firmware/amdxdna fehlt komplett.

root@pve:/lib/firmware/amdnpu# find . *.*
.
./1502_00
./1502_00/npu.sbin
./1502_00/npu.sbin.1.5.5.391
./17f0_11
./17f0_11/npu.sbin
./17f0_11/npu.sbin.1.1.2.65
./17f0_10
./17f0_10/npu.sbin
./17f0_10/npu.sbin.1.1.2.64
 
Okay war mein Fehler, es läuft nun über die NPU im Priviliged LXC Container.

Hab in openWebUI die URL zu FLM fälschlicherweise unter Ollama hinterlegt und nicht unter OpenAI.

1772913798273.png
 
Das sind tolle Neuigkeiten in dem Bereich, danke für die Info, Beschreibung und feedback. Noch sind unterstützte LLMs überschaubar - https://fastflowlm.com/docs/models/ - macht aber Lust auf mehr und zuversichtlich.

Benötigt dazu, scheint neue NPU-Firmware (via BIOS-Firmware Update?) zu sein, und separat installierte Treibermodule (amdgpu/amdxdna) am Host, da mit aktueller fastflowlm Installation im LXC Container folgender Fehler erscheint:

Code:
flm validate
[Linux]  Kernel: 6.17.4-2-pve
[ERROR]  NPU firmware version on /dev/accel/accel0 is incompatible. Please update NPU firmware!
[Linux]  NPU: /dev/accel/accel0 with 8 columns
[Linux]  NPU FW Version: 1.0.0.63
[ERROR]  amdxdna version 0.0 is incompatible
[ERROR]  Memlock limit is too low (8MB). Please raise the limit or set to infinity.

:)
 
Last edited:
Das sind tolle Neuigkeiten in dem Bereich, danke für die Info, Beschreibung und feedback. Noch sind unterstützte LLMs überschaubar - https://fastflowlm.com/docs/models/ - macht aber Lust auf mehr und zuversichtlich.

Benötigt dazu, scheint neue NPU-Firmware (via BIOS-Firmware Update?) zu sein, und separat installierte Treibermodule (amdgpu/amdxdna) am Host, da mit aktueller fastflowlm Installation im LXC Container folgender Fehler erscheint:

Code:
flm validate
[Linux]  Kernel: 6.17.4-2-pve
[ERROR]  NPU firmware version on /dev/accel/accel0 is incompatible. Please update NPU firmware!
[Linux]  NPU: /dev/accel/accel0 with 8 columns
[Linux]  NPU FW Version: 1.0.0.63
[ERROR]  amdxdna version 0.0 is incompatible
[ERROR]  Memlock limit is too low (8MB). Please raise the limit or set to infinity.

:)
Hi @ciax,

ja, um den ersten Fehler zu beseitigen musste ich auf dem Host die beiden oben erwähnten Treiber installieren.

Für den anderen Memlock limit Fehler müsstest Du in der Config des LXC Containers die folgenden Zeilen hinzufügen.

arch: amd64
cores: 6
dev0: /dev/dri/renderD128,gid=993,mode=0660
dev1: /dev/dri/card1,gid=44,mode=0660
dev2: /dev/kfd,gid=993,mode=0660
dev3: /dev/accel/accel0,gid=993,mode=0660
features: nesting=1
hostname: FLM
memory: 16384
net0: name=eth0,bridge=vmbr0,firewall=1,gw=,hwaddr=BC:24:11:86:F6:CF,ip=,tag=,type=veth
ostype: ubuntu
rootfs: flash:subvol-301-disk-0,size=100G
swap: 2048
lxc.prlimit.memlock: unlimited
lxc.prlimit.as: unlimited


Ich hatte den LXC Container anfangs mit nur 4GB Ram erstellt was zu einem weitern Fehler bei der Ausführung von FLM führte weil er nicht genügend Speicher zuweisen konnte, als ich es dann auf 16GB erhöht hatte lief es ohne Probleme.

Hab bisher ein paar Modelle ausprobiert, unter anderem "whisper-large-v3-turbo" für STT in Home Assistant was gut läuft und Qwen3-VL-4B-Instruct um Bilder zu beschreiben.

Getestet wurde mit dem folgenden Setup:
Minisforum N5 Pro
CPU: AMD Ryzen AI 9 HX PRO 370 w/ Radeon 890M

Proxmox VE 9.1.6
Kernel: 6.17.13-1-pve
PVE Firmware: 3.18

LXC Container:
Ubuntu 24.04
Priviliged
 
Last edited:
Schönen Dank dafür! :O)

PS: .. brauche etwas Zeit, es auzuprobieren - schön, daß es nun auf der NPU unter Linux und auch in einem LXC auf Proxmox läuft!
 
Last edited:
Leider, nach einem "dist-upgrade" am Host und Installation (war auch davor ohne Installation) von https://rocm.docs.amd.com/projects/...ll/installryz/native_linux/install-ryzen.html (rocm 7.2) - bleibt in den Kernel Logs:

Code:
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* aie2_check_protocol: Incompatible firmware protocol major 7 minor 2
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* aie2_hw_start: firmware is not alive
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* aie2_smu_exec: smu cmd 4 failed, 0xff
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* aie2_smu_fini: Power off failed, ret -22
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* aie2_init: start npu failed, ret -22
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: [drm] *ERROR* amdxdna_probe: Hardware init failed, ret -22
[Mon Mar  9 20:19:14 2026] amdxdna 0000:c6:00.1: probe with driver amdxdna failed with error -22

Geladen sind amdxdna sowie amdgpu (die eigentlich mit dem Proxmox Kernel - jetzt 6.17.13-1-pve - kommen sollten). Das war zuvor auch mit dem älteren Kernel 6.17 so. Firmware unter /lib/firmware/amdnpu/17f0_10/npu.sbin.1.1.2.64 ist neu (würde für fastflowlm nun geeignet sein).

Mit dem Link https://github.com/amd/xdna-driver?tab=readme-ov-file#linux-compilation-and-installation und selbst kompilieren des Moduls amdxdna komme ich nicht klar. Das passt doch nicht für proxmox, sondern nur für Ubuntu ... hmm.
 
etwas weiter - das Modul amdxdna.ko konnte für den neueren Kernel 6.17.13-1-pve kompiliert werden, ladet aber leider nicht mit folgender Fehlermeldung:

modprobe: ERROR: could not insert 'amdxdna': Key was rejected by service

Es befindet sich auch woanders als bei den früheren Kernel:

Code:
/usr/lib/modules/6.17.13-1-pve/updates/dkms/amdxdna.ko
/usr/lib/modules/6.17.2-1-pve/kernel/drivers/accel/amdxdna/amdxdna.ko
/usr/lib/modules/6.17.4-2-pve/kernel/drivers/accel/amdxdna/amdxdna.ko

dkms ist vermutlich nicht gewünscht?

//edit: ich versuche noch folgendes: https://gist.github.com/ricog/d6bd6757faac449357b970514a9f212c
 
Last edited: