Published on

NVIDIA Container Toolkit: GPU in Docker

Authors

NVIDIA Container Toolkit: GPU in Docker

TL;DR

nvidia-smi auf dem Host beweist den Treiber. Es beweist nicht, dass Docker die GPU sieht. Dafür ist das NVIDIA Container Toolkit da. NVIDIA lässt es die Runtime in /etc/docker/daemon.json eintragen. Danach erst docker run --gpus all.

Treiber davor: NVIDIA-Treiber und CUDA auf Ubuntu. Ollama im Container danach: Ollama mit Docker.

Reihenfolge

  1. NVIDIA-Treiber auf dem Host, nvidia-smi zeigt die Karte.
  2. Docker läuft.
  3. Paket nvidia-container-toolkit.
  4. nvidia-ctk runtime configure --runtime=docker
  5. Docker neu starten.
  6. Testcontainer mit --gpus all.

Wer Schritt 4 überspringt, hat das Paket installiert und der Container sieht trotzdem keine GPU. Das Configure-Kommando schreibt die Runtime nach daemon.json. Ein Neustart von Docker liest die Datei.

Konfigurieren

Die aktuellen Befehle stehen im Install Guide. Der Teil, der nach der Paketinstallation fehlt, ist dieser:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Rootless Docker nimmt eine andere Datei. NVIDIA setzt dann --config auf $HOME/.config/docker/daemon.json, nicht die Systemdatei. Ein Restart des System-Daemons ändert an einem rootless Docker nichts.

Kubernetes über containerd ist ein anderer Runtime-Name: nvidia-ctk runtime configure --runtime=containerd. Dieselbe Karte, andere Socket-Datei. Wer nur Docker auf einem KI-Server betreibt, braucht den containerd-Zweig nicht.

Prüfen

Docker dokumentiert den Test so:

docker run --rm --gpus all ubuntu nvidia-smi

Dieselbe Tabelle wie auf dem Host, dann ist die GPU im Container. Eine einzelne Karte ist --gpus device=0. Zwei bestimmte Karten brauchen Anführungszeichen, weil das Komma sonst die Shell zerschneidet:

docker run --rm --gpus '"device=0,1"' ubuntu nvidia-smi

Die Indizes sind die aus nvidia-smi auf dem Host.

Wenn der Host die Karte sieht und der Container nicht

BefundNächster Schritt
nvidia-smi auf dem Host fehlgeschlagenZurück zum Treiber, nicht zum Toolkit
Host ok, docker run --gpus meldet unbekannte Runtimenvidia-ctk runtime configure, danach Docker neu starten
Configure lief, Container weiter ohne GPUdaemon.json prüfen, ob der Neustart die Datei gelesen hat
Nur eine von zwei Karten im Container--gpus device= setzt die Auswahl, der Default ist nicht immer beide

Das Toolkit installiert keinen Treiber. NVIDIA schreibt den Treiber als Voraussetzung vor das Paket. Ein CUDA-Image im Container ersetzt die Host-Treiber nicht.

Slot-Breite, wenn die zweite Karte im Container fehlt, obwohl der Host beide zeigt: PCIe-Lanes.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen