Update README.md

This commit is contained in:
Ssyleric
2025-11-29 14:44:48 +01:00
committed by GitHub
parent cc22aad5c2
commit 4bfc79ddf1

378
README.md
View File

@@ -1 +1,377 @@
# GPU-AMD-Proxmox-LXC
# 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.