Files
GPU-AMD-Proxmox-LXC/README.md
2025-11-29 14:44:48 +01:00

378 lines
9.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 **lexposition du GPU** et les **tests VAAPI/ROCm** à lintérieur des conteneurs.
> - La configuration applicative détaillée (UI Plex/Jellyfin/ComfyUI, modèles Ollama, workflows ComfyUI, etc.) nest 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 lhô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 lhô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 <CTID>
pct start <CTID>
```
2. LXC en mode **unprivileged** (`unprivileged: 1`) quand cest supporté par le template (cest le cas ici pour Ollama & ComfyUI).
3. Exposition du GPU via `devX:` dans la conf LXC, en réutilisant les GID de lhôte :
- `/dev/dri/renderD128` → GID **44** (groupe `video`)
- `/dev/kfd` → GID **993** (groupe `render` sur lhô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 **nutilise 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 dOllama 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 lutilisateur **`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 dencodage 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 lUI 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 nutilise 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 lUI 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, laccé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 lexposition 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.