diff --git a/README.md b/README.md index 26aa666..6aef5dd 100644 --- a/README.md +++ b/README.md @@ -1 +1,377 @@ -# GPU-AMD-Proxmox-LXC \ No newline at end of file +# GPU AMD (VAAPI / ROCm) sur Proxmox VE pour LXC + +## Contexte & périmètre + +Ce document résume **la configuration du GPU AMD Radeon RX 6700 XT** sur le serveur Proxmox VE et son exposition à plusieurs conteneurs LXC : + +- **Ollama LXC** (CT `21211434`) – IA / LLM avec ROCm + Vulkan +- **Plex LXC** (CT `20232400`) – transcodage vidéo matériel via VAAPI +- **Jellyfin LXC** (CT `20308096`) – transcodage vidéo matériel via VAAPI +- **ComfyUI LXC** (CT `21608188`) – VAAPI fonctionnel (ROCm/PyTorch pour Stable Diff non couvert ici) + +> ⚠️ **Important** +> +> - Ce README couvre **l’exposition du GPU** et les **tests VAAPI/ROCm** à l’intérieur des conteneurs. +> - La configuration applicative détaillée (UI Plex/Jellyfin/ComfyUI, modèles Ollama, workflows ComfyUI, etc.) n’est pas décrite ici. +> - Pour ComfyUI, seule la partie **VAAPI** est validée. La stack **ROCm + PyTorch** pour Stable Diff sera documentée séparément. + +--- + +## 1. Prérequis côté Proxmox VE + +### 1.1 Hôte Proxmox + +- Proxmox VE 8.x avec noyau : + +```bash +uname -a +Linux pve 6.8.12-16-pve ... +``` + +- GPU AMD visible : + +```bash +lspci -nnk | grep -A2 'VGA compatible controller' +# ... AMD Radeon RX 6700 XT ... +# Kernel driver in use: amdgpu +``` + +- Périphériques GPU sur l’hôte : + +```bash +ls -l /dev/kfd /dev/dri +crw-rw---- 1 root render 234, 0 ... /dev/kfd +total 0 +drwxr-xr-x 2 root root 80 ... by-path +crw-rw---- 1 root video 226, 0 ... card0 +crw-rw---- 1 root render 226, 128 ... renderD128 +``` + +### 1.2 Groupes importants sur l’hôte + +```bash +grep -w 'video\|render' /etc/group +video:x:44: +render:x:993: +``` + +Ces GIDs sont réutilisés dans les configs LXC pour mapper correctement les droits sur les devices. + +--- + +## 2. Règles générales LXC + +Pour tous les conteneurs utilisant le GPU : + +1. **Ne pas utiliser `pct restart`**Toujours faire : + + ```bash + pct stop + pct start + ``` +2. LXC en mode **unprivileged** (`unprivileged: 1`) quand c’est supporté par le template (c’est le cas ici pour Ollama & ComfyUI). +3. Exposition du GPU via `devX:` dans la conf LXC, en réutilisant les GID de l’hôte : + + - `/dev/dri/renderD128` → GID **44** (groupe `video`) + - `/dev/kfd` → GID **993** (groupe `render` sur l’hôte / `kvm` ou équivalent dans le LXC) + +--- + +## 3. Ollama LXC – ROCm + Vulkan (CT 21211434) + +### 3.1 Configuration LXC (`/etc/pve/lxc/21211434.conf`) + +```ini +# ROCm / AMD GPU pour Ollama +arch: amd64 +cmode: shell +cores: 8 +memory: 32768 +swap: 0 +hostname: ollama-lxc +ostype: ubuntu +unprivileged: 1 +nameserver: 192.168.1.3 +searchdomain: z-server.me +net0: name=eth0,bridge=vmbr0,gw=192.168.1.1,hwaddr=BC:24:11:3D:C3:0A,ip=192.168.1.212/24,ip6=auto,type=veth +rootfs: vm-docker:vm-21211434-disk-0,size=200G +startup: order=15 +tags: community-script;linux;lxc;marechal;remote;server;ssh;webserver + +# GPU +dev0: /dev/kfd,gid=993,uid=0 +dev1: /dev/dri/renderD128,gid=44 +``` + +> 💡 Ici, on **n’utilise pas** de `lxc.mount.entry` pour `/dev/dri`, uniquement les lignes `dev0/dev1`. + +### 3.2 Installation ROCm (dans le LXC) + +Ollama LXC est basé sur **Ubuntu 24.04**, avec ROCm 6.2.4 : + +```bash +# Dans le CT 21211434 +rocminfo | grep -i gfx | head +# Name: gfx1030 +# amdgcn-amd-amdhsa--gfx1030 +``` + +Variables globales pour le GPU : + +```bash +cat <<'EOF' >> /etc/environment +HSA_OVERRIDE_GFX_VERSION=10.3.0 +ROCR_VISIBLE_DEVICES=0 +EOF +``` + +Puis installation d’Ollama via le script officiel : + +```bash +curl -fsSL https://ollama.com/install.sh | sh +``` + +### 3.3 Activation de Vulkan et ROCm pour Ollama + +Override systemd : + +```bash +mkdir -p /etc/systemd/system/ollama.service.d + +cat <<'EOF' >/etc/systemd/system/ollama.service.d/override.conf +[Service] +Environment="OLLAMA_VULKAN=1" +Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0" +Environment="ROCR_VISIBLE_DEVICES=0" +EOF + +systemctl daemon-reload +systemctl restart ollama +``` + +### 3.4 Vérifications + +- GPU détecté par ROCm : + +```bash +rocminfo | grep -i gfx | head +# gfx1030 ... +``` + +- Journal Ollama, détection ROCm : + +```bash +journalctl -u ollama -n 40 --no-pager | grep -E 'inference compute|ROCm0' +# inference compute id=0 library=ROCm compute=gfx1030 name=ROCm0 description="AMD Radeon RX 6700 XT" ... +``` + +Ollama utilise alors le GPU via ROCm/Vulkan. + +--- + +## 4. Plex LXC – VAAPI (CT 20232400) + +### 4.1 Configuration LXC (`/etc/pve/lxc/20232400.conf`) + +```ini +# Plex LXC – GPU AMD pour VAAPI +arch: amd64 +cmode: shell +cores: 12 +memory: 4096 +swap: 2048 +hostname: plex +ostype: ubuntu +unprivileged: 1 +nameserver: 192.168.1.3 +searchdomain: z-server.me +net0: name=eth0,bridge=vmbr0,gw=192.168.1.1,hwaddr=BC:24:11:2C:BF:A3,ip=192.168.1.202/24,type=veth +rootfs: vm-docker:vm-20232400-disk-0,size=300G +startup: order=4 +tags: community-script;linux;lxc;marechal;media;server;share;ssh;webserver + +# GPU VAAPI +dev0: /dev/dri/renderD128,gid=44 +lxc.cgroup2.devices.allow: c 226:* rwm +lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir +``` + +### 4.2 Groupes dans le conteneur + +```bash +grep -w 'video\|render' /etc/group +# video:x:44:plex +# render:x:118:plex +``` + +> Vérifier que l’utilisateur **`plex`** est bien dans `video` **et** `render`. + +### 4.3 Paquets VAAPI + test FFmpeg + +```bash +apt update +apt install -y vainfo mesa-va-drivers ffmpeg +export LIBVA_DRIVER_NAME=radeonsi + +vainfo | egrep 'Driver version|VAProfile' +# Driver version: Mesa Gallium ... for AMD Radeon RX 6700 XT ... +# VAProfileH264* / HEVC* / VP9* / AV1* ... +``` + +Test d’encodage matériel : + +```bash +ffmpeg -v verbose \ + -init_hw_device vaapi=va:/dev/dri/renderD128 \ + -filter_hw_device va \ + -f lavfi -i testsrc2=size=1920x1080:rate=30 \ + -t 5 \ + -vf 'format=nv12,hwupload' \ + -c:v h264_vaapi \ + -f null - +``` + +Si le test passe, VAAPI est fonctionnel pour Plex (à activer ensuite dans l’UI Plex). + +--- + +## 5. Jellyfin LXC – VAAPI (CT 20308096) + +### 5.1 Configuration LXC (`/etc/pve/lxc/20308096.conf`) + +```ini +# Jellyfin LXC – GPU AMD pour VAAPI +arch: amd64 +cmode: shell +cores: 12 +memory: 6144 +swap: 2048 +hostname: jellyfin +ostype: ubuntu +unprivileged: 1 +nameserver: 192.168.1.3 +searchdomain: z-server.me +net0: name=eth0,bridge=vmbr0,gw=192.168.1.1,hwaddr=BC:24:11:E7:9C:CC,ip=192.168.1.203/24,type=veth +rootfs: vm-docker:vm-20308096-disk-0,size=100G +startup: order=5 +tags: community-script;linux;lxc;marechal;media;server;share;ssh;webserver + +# GPU VAAPI +lxc.cgroup2.devices.allow: c 226:* rwm +lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir +``` + +(Ici on n’utilise que `/dev/dri` pour VAAPI, pas `/dev/kfd`.) + +### 5.2 Groupes dans le conteneur + +```bash +grep -w 'video\|render' /etc/group +# video:x:44:jellyfin +# render:x:104:jellyfin +``` + +### 5.3 Paquets VAAPI + test FFmpeg + +Même principe que Plex : + +```bash +apt update +apt install -y vainfo mesa-va-drivers ffmpeg +export LIBVA_DRIVER_NAME=radeonsi + +vainfo | egrep 'Driver version|VAProfile' +ffmpeg -v verbose \ + -init_hw_device vaapi=va:/dev/dri/renderD128 \ + -filter_hw_device va \ + -f lavfi -i testsrc2=size=1920x1080:rate=30 \ + -t 5 \ + -vf 'format=nv12,hwupload' \ + -c:v h264_vaapi \ + -f null - +``` + +Une fois validé, on active VAAPI dans l’UI Jellyfin (section **Lecture / Transcodage**). + +--- + +## 6. ComfyUI LXC – VAAPI (CT 21608188) + +### 6.1 Configuration LXC (`/etc/pve/lxc/21608188.conf`) + +```ini +# ComfyUI LXC – GPU AMD (VAAPI) +arch: amd64 +cmode: shell +cores: 4 +memory: 32768 +swap: 512 +hostname: comfyui +ostype: debian +unprivileged: 1 +nameserver: 192.168.1.3 +searchdomain: z-server.me +net0: name=eth0,bridge=vmbr0,gw=192.168.1.1,hwaddr=BC:24:11:40:40:37,ip=192.168.1.216/24,type=veth +rootfs: vm-docker:vm-21608188-disk-0,size=100G +startup: order=15 +tags: ai;community-script + +# GPU +dev0: /dev/kfd,gid=993,uid=0 +dev1: /dev/dri/renderD128,gid=44 +``` + +> On réplique ici le même principe que pour Ollama (ROCm possible plus tard), mais on valide surtout **VAAPI**. + +### 6.2 Groupes & devices dans le LXC + +```bash +ls -l /dev/kfd /dev/dri/renderD128 +# /dev/dri/renderD128 → root video +# /dev/kfd → root kvm (ou groupe équivalent) + +grep -w 'video\|render' /etc/group +# video:x:44:root +# render:x:992:root +``` + +### 6.3 Paquets VAAPI + test FFmpeg + +```bash +apt update +apt install -y vainfo mesa-va-drivers mesa-vulkan-drivers ffmpeg +export LIBVA_DRIVER_NAME=radeonsi + +vainfo --display drm --device /dev/dri/renderD128 \ + | egrep 'Driver version|VAProfile' +# Driver version: Mesa Gallium driver 25.0.7-2 for AMD Radeon RX 6700 XT ... +``` + +Test encode : + +```bash +ffmpeg -v verbose \ + -init_hw_device vaapi=va:/dev/dri/renderD128 \ + -filter_hw_device va \ + -f lavfi -i testsrc2=size=1920x1080:rate=30 \ + -t 5 \ + -vf 'format=nv12,hwupload' \ + -c:v h264_vaapi \ + -f null - +``` + +Si ce test passe, l’accélération VAAPI fonctionne et ComfyUI peut en tirer parti pour certaines opérations vidéo (selon les nodes utilisés). + +--- + +## 7. Récapitulatif rapide + +| CT | Service | OS | GPU exposé | Usage principal | Test de validation | +| -------: | -------- | ------ | ----------------------------- | ---------------------- | -------------------------------------- | +| 21211434 | Ollama | Ubuntu | `/dev/kfd` + `renderD128` | LLM via ROCm/Vulkan | `rocminfo`, `journalctl -u ollama` | +| 20232400 | Plex | Ubuntu | `/dev/dri` (VAAPI) | Transcodage vidéo | `vainfo` + `ffmpeg h264_vaapi` | +| 20308096 | Jellyfin | Ubuntu | `/dev/dri` (VAAPI) | Transcodage vidéo | `vainfo` + `ffmpeg h264_vaapi` | +| 21608188 | ComfyUI | Debian | `/dev/kfd` + `renderD128` | IA / vidéo (VAAPI ok) | `vainfo` + `ffmpeg h264_vaapi` | + +Ce README sert de **référence unique** pour l’exposition du GPU AMD RX 6700 XT aux conteneurs LXC sur Proxmox VE. +Toute nouvelle LXC GPU (autre service) pourra se baser sur ces modèles de configuration.