GPU-Zugriff in Docker-Containern - NVIDIA und Intel einrichten
GPU-Zugriff in Docker-Containern - NVIDIA und Intel einrichten
GPU-Zugriff in Docker ermöglicht KI-Inferenz, Video-Transcodierung und Grafikverarbeitung direkt im Container – ohne die GPU manuell zu verwalten.
NVIDIA GPUs
Voraussetzungen
- NVIDIA-Treiber auf dem Host installiert (
nvidia-smimuss funktionieren) - NVIDIA Container Toolkit installieren:
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
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
apt-get update && apt-get install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
GPU nutzen
# Alle GPUs zugänglich machen
docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi
# Nur GPU 0 nutzen
docker run --gpus '"device=0"' myimage
# Zwei GPUs
docker run --gpus 2 myimage
In Compose
services:
ai:
image: pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
Verifizieren
docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi
Intel integrierte GPU (iGPU)
Für Video-Transcodierung mit Intel Quick Sync (z.B. in Jellyfin):
# Render-Device dem Container übergeben
docker run \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
jellyfin/jellyfin
# In Compose
services:
jellyfin:
image: jellyfin/jellyfin
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
Der Benutzer, der den Container ausführt, muss der Gruppe render angehören:
usermod -aG render $USER
ls -la /dev/dri/
Anwendungsfälle
KI/ML mit PyTorch oder TensorFlow:
docker run --gpus all \
-v $(pwd):/workspace \
pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime \
python train.py
Stable Diffusion:
docker run --gpus all \
-p 7860:7860 \
-v $(pwd)/models:/app/models \
ghcr.io/automatic1111/stable-diffusion-webui
Video-Transcodierung mit FFmpeg (NVIDIA NVENC):
docker run --gpus all \
-v $(pwd):/video \
nvcr.io/nvidia/cuda:12.3.1-base-ubuntu22.04 \
ffmpeg -hwaccel cuda -i /video/input.mp4 -c:v h264_nvenc /video/output.mp4
Häufige Probleme
could not select device driver "nvidia": NVIDIA Container Toolkit nicht installiert oder Docker-Daemon nicht neu gestartet.
failed to initialize NVML: NVIDIA-Treiber auf dem Host fehlt oder ist nicht kompatibel mit CUDA-Version im Image.
Intel iGPU: Permission denied: Benutzer ist nicht in der render-Gruppe oder renderD128 hat falsche Rechte.
# Verfügbare Render-Devices anzeigen
ls -la /dev/dri/
# crw-rw---- 1 root render 226, 128 Nov 25 18:00 renderD128