Bonjour,
Ce tutorial à pour objectif de faire fonctionner le transcodage (Décodage/encodage) matériel en direct ou dans docker.
Etape 0: BIOS
Si vous utilisez de la virtualisation, il est nécessaire d'activer la virtualisation, le IOMMU.
Etape 1: Récupérer Information GPU
Le pilote en cours d'utilisation est i915 (Kernel driver in use)
Etape 2a: Installer les pilotes graphiques
Intel:
Etape 2b: Nvidia Container ToolKit
Indispensable pour faire du GPU dans docker.
Pour rendre persistent les /dev/nvidia :
Etape 3: Moniteur de chage GPU
Paquet à installer sur la machine hôte et à taper sur l'hôte pour voir la charge.
Intel:
Etape 4: Docker + GPU
Intel:

Nvidia:
Sous Nvidia, un conteneur spécialement dédiée permet de vérifier son fonctionnement
Etape 5: Nvidia GPU Support Encode / Decode
developer.nvidia.com
Ce tutorial à pour objectif de faire fonctionner le transcodage (Décodage/encodage) matériel en direct ou dans docker.
Etape 0: BIOS
Si vous utilisez de la virtualisation, il est nécessaire d'activer la virtualisation, le IOMMU.
Etape 1: Récupérer Information GPU
GPU=$(lspci -vnnk | grep VGA | grep -i "HD" | cut -d " " -f 1)
lspci -vnnk -s $GPU | grep "VGA\|Kernel"
Le pilote en cours d'utilisation est i915 (Kernel driver in use)
#00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 620 [8086:5916] (rev 02) (prog-if 00 [VGA controller])
# Kernel driver in use: i915
# Kernel modules: i91
Etape 2a: Installer les pilotes graphiques
Intel:
Nvidia:apt install -y intel-opencl-icd
# Blacklist du pilote libre
cat > /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF
# Mise à jour des modules
update-initramfs -u
# Déchargement du pilote à chaud
modprobe -r nouveau
lsmod | grep nouveau
# Pilote Nvidia
VERSION="560.35.03"
wget https://fr.download.nvidia.com/XFree86/Linux-x86_64/$VERSION/NVIDIA-Linux-x86_64-$VERSION.run -O /tmp/NVIDIA-Linux-x86_64.run;
ls /tmp/NVIDIA-Linux-x86_64.run
# Désinstallation des anciens pilotes
bash /tmp/NVIDIA-Linux-x86_64.run --uninstall --silent
apt purge -y *nvidia*
apt autoremove -y
# Installation du pilote Nvidia
bash /tmp/NVIDIA-Linux-x86_64.run
Etape 2b: Nvidia Container ToolKit
Indispensable pour faire du GPU dans docker.
# Dépendance:
apt install -y curl
apt install -y gnupg2
# Clé GPG
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# Dépôt
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Rechercher les Mises à jours
apt update
# Installation de Nvidia Container ToolKit:
apt install -y nvidia-container-toolkit
Pour rendre persistent les /dev/nvidia :
# Cree groupe:
groupadd -g 143 nvidia-persistenced
# Creation User:
useradd -c 'NVIDIA Persistence Daemon' -u 143 -g nvidia-persistenced -d '/' -s /sbin/nologin nvidia-persistenced
# Creation d'un service:
cat > /etc/systemd/system/nvidia-persistenced.service << EOF
[Unit]
Description=NVIDIA Persistence Daemon
[Service]
Type=forking
PIDFile=/var/run/nvidia-persistenced/nvidia-persistenced.pid
Restart=always
ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced --persistence-mode --verbose
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced
[Install]
WantedBy=multi-user.target
EOF
# Création d'un fichier drop-in
cat > /etc/systemd/system/nvidia-persistenced.service.d/override.conf << EOF
[Unit]
After=sockets.target
EOF
systemctl daemon-reload
systemctl enable --now nvidia-persistenced.service
systemctl status nvidia-persistenced.service
# Vérification
ls /dev/nvi*
Etape 3: Moniteur de chage GPU
Paquet à installer sur la machine hôte et à taper sur l'hôte pour voir la charge.
Intel:
Nvidia:apt install -y intel-gpu-tools
intel_gpu_top
watch -n 0.5 nvidia-smi
Etape 4: Docker + GPU
Intel:

###########
services: #
###########################################################
XXXXXXXX: #
# ----------------------------------------------------- #
image: 'XXXXXXXXXXXXXXXXXXXX' #
container_name: 'XXXXXXXX' #
network_mode: 'bridge' #
restart: 'unless-stopped' #
hostname: 'XXXXXXXX' #
# ----------------------------------------------------- #
group_add: #
- 44 # Video
- 105 # Render
# ----------------------------------------------------- #
environment: #
DOCKER_MODS: 'linuxserver/mods:jellyfin-opencl-intel' #
# ----------------------------------------------------- #
devices: #
- '/dev/dri:/dev/dri' #
###########################################################
Nvidia:
Sous Nvidia, un conteneur spécialement dédiée permet de vérifier son fonctionnement
# Test de fonctionnement
docker container rm -f NVIDIA
docker run --rm --name NVIDIA --gpus all nvidia/cuda:12.4.0-devel-ubi8 nvidia-smi
docker image rm -f nvidia/cuda:12.4.0-devel-ubi8
services:
XXXXXXXX:
image: 'XXXXXXXXXXXXXXXXXXXX'
container_name: 'XXXXXXXX'
network_mode: 'bridge'
restart: 'unless-stopped'
hostname: 'XXXXXXXX'
runtime: 'nvidia'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
devices:
- '/dev/dri:/dev/dri'
- '/dev/nvidia0:/dev/nvidia0'
Etape 5: Nvidia GPU Support Encode / Decode

Video Encode and Decode GPU Support Matrix
Find the related video encoding and decoding support for all NVIDIA GPU products.
Pièces jointes
Dernière édition: