Een NVIDIA GPU gebruiken met Docker-containers

0
146

Docker-containers zien de GPU van uw systeem niet automatisch. Dit veroorzaakt verminderde prestaties in GPU-afhankelijke workloads zoals machine learning-frameworks. Hier leest u hoe u de NVIDIA GPU van uw host blootstelt aan uw containers.

GPU's laten werken in Docker

< p>Docker-containers delen de kernel van uw host, maar brengen hun eigen besturingssysteem en softwarepakketten mee. Dit betekent dat ze de NVIDIA-stuurprogramma's missen die worden gebruikt om te communiceren met uw GPU. Docker voegt standaard zelfs geen GPU's toe aan containers, dus een gewone docker-run zal je hardware helemaal niet zien.

Op een hoog niveau is het een kwestie van twee dingen om je GPU aan het werk te krijgen. stap procedure: installeer de stuurprogramma's in uw afbeelding en geef Docker de opdracht om tijdens runtime GPU-apparaten aan uw containers toe te voegen.

Deze gids richt zich op moderne versies van CUDA en Docker. De nieuwste release van NVIDIA Container Toolkit is ontworpen voor combinaties van CUDA 10 en Docker Engine 19.03 en hoger. Voor oudere versies van CUDA, Docker en de NVIDIA-stuurprogramma's zijn mogelijk aanvullende stappen vereist.

De NVIDIA-stuurprogramma's toevoegen

Zorg ervoor dat u'8217 Zorg ervoor dat de NVIDIA-stuurprogramma's correct werken op uw host voordat u doorgaat met uw Docker-configuratie. U zou nvidia-smi met succes moeten kunnen uitvoeren en de naam van uw GPU, de stuurprogrammaversie en de CUDA-versie moeten kunnen zien.

Advertentie

Als u uw GPU met Docker wilt gebruiken, voegt u eerst de NVIDIA Container Toolkit toe naar uw gastheer. Dit integreert in Docker Engine om uw containers automatisch te configureren voor GPU-ondersteuning.

Voeg de pakketrepository van de toolkit toe aan uw systeem met behulp van de voorbeeldopdracht:

distributie=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add – && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

Installeer vervolgens het nvidia-docker2-pakket op uw host:

apt-get update apt-get install -y nvidia-docker2 < p>Start de Docker-daemon opnieuw om de installatie te voltooien:

sudo systemctl restart docker

De Container Toolkit zou nu operationeel moeten zijn. U bent klaar om een ​​testcontainer te starten.

Een container starten met GPU-toegang

Omdat Docker niet standaard de GPU's van uw systeem levert, moet u containers maken met de –gpus-vlag om uw hardware te laten verschijnen. Je kunt ofwel specifieke apparaten specificeren om in te schakelen of het all-sleutelwoord gebruiken.

De nvidia/cuda-afbeeldingen zijn vooraf geconfigureerd met de CUDA-binaire bestanden en GPU-tools. Start een container en voer de opdracht nvidia-smi uit om te controleren of uw GPU toegankelijk is. De uitvoer moet overeenkomen met wat u zag toen u nvidia-smi op uw host gebruikte. De CUDA-versie kan verschillen, afhankelijk van de toolkitversies op uw host en in uw geselecteerde containerimage.

docker run -it –gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi < p>

Een basisafbeelding selecteren< /h2>

Het gebruik van een van de nvidia/cuda-tags is de snelste en gemakkelijkste manier om uw GPU-workload in Docker te laten werken. Er zijn veel verschillende varianten beschikbaar; ze bieden een matrix van besturingssysteem, CUDA-versie en NVIDIA-software-opties. De afbeeldingen zijn gebouwd voor meerdere architecturen.

Elke tag heeft dit formaat:

11.4.0-base-ubuntu20.04

  • 11.4.0 – CUDA-versie.
  • base – Afbeeldingssmaak.
  • ubuntu20.04 – Besturingssysteemversie.

Advertentie

Er zijn drie verschillende afbeeldingssmaken beschikbaar. De basisafbeelding is een minimale optie met de essentiële CUDA runtime-binaries. runtime is een meer uitgebreide optie die de CUDA-wiskundebibliotheken en NCCL voor communicatie tussen GPU's omvat. De derde variant is devel die je alles geeft, van runtime tot headers en ontwikkelingstools voor het maken van aangepaste CUDA-afbeeldingen.

Als een van de afbeeldingen voor je werkt, probeer deze dan als basis in je Dockerbestand. U kunt dan de reguliere Dockerfile-instructies gebruiken om uw programmeertalen te installeren, uw broncode te kopiëren en uw toepassing te configureren. Het verwijdert de complexiteit van handmatige stappen voor het instellen van de GPU.

VANUIT nvidia/cuda:11.4.0-base-ubuntu20.04 RUN apt update RUN apt-get install -y python3 python3-pip RUN pip install tensorflow-gpu KOPIEER tensor-code.py . ENTRYPONT [“python3”, “tensor-code.py”]

Het bouwen en uitvoeren van deze afbeelding met de –gpus-vlag zou je Tensor-workload starten met GPU-versnelling.

Handmatig een afbeelding configureren

U kunt handmatig CUDA-ondersteuning aan uw afbeelding toevoegen als u een andere basis moet kiezen. De beste manier om dit te bereiken is door te verwijzen naar de officiële NVIDIA Docker-bestanden.

Kopieer de instructies die zijn gebruikt om de CUDA-pakketrepository toe te voegen, installeer de bibliotheek en koppel deze aan uw pad. We reproduceren niet alle stappen in deze handleiding, aangezien ze verschillen per CUDA-versie en besturingssysteem.

Let op de omgevingsvariabelen aan het einde van de Dockerfile – deze bepalen hoe containers die uw afbeelding gebruiken, integreren met de NVIDIA Container Runtime:

ENV NVIDIA_VISIBLE_DEVICES alle ENV NVIDIA_DRIVER_CAPABILITIES compute,utility Advertisement

Uw afbeelding zou uw GPU moeten detecteren zodra CUDA is geïnstalleerd en de omgevingsvariabelen zijn ingesteld. Dit geeft je meer controle over de inhoud van je afbeelding, maar laat je de instructies aanpassen wanneer nieuwe CUDA-versies verschijnen.

Hoe werkt het?

Hoe werkt het?

h2>

De NVIDIA Container Toolkit is een verzameling pakketten die containerruntimes zoals Docker inpakken met een interface naar het NVIDIA-stuurprogramma op de host. De bibliotheek libnvidia-container is verantwoordelijk voor het leveren van een API en CLI die automatisch de GPU's van uw systeem aan containers levert via de runtime-wrapper.

De component nvidia-container-toolkit implementeert een prestart-hook voor containerruntime . Dit betekent dat het een melding krijgt wanneer een nieuwe container op het punt staat te starten. Het kijkt naar de GPU's die u wilt koppelen en roept libnvidia-container aan om het maken van containers af te handelen.

De hook wordt ingeschakeld door nvidia-container-runtime. Dit omhult je “echte” container runtime zoals containerd of runc om ervoor te zorgen dat de NVIDIA prestart hook wordt uitgevoerd. Uw bestaande runtime zet het startproces van de container voort nadat de hook is uitgevoerd. Wanneer de containertoolkit is geïnstalleerd, ziet u de NVIDIA-runtime geselecteerd in het configuratiebestand van uw Docker-daemon.

Samenvatting

Een NVIDIA GPU gebruiken in een Docker-container vereist dat u de NVIDIA Container Toolkit aan de host toevoegt. Dit integreert de NVIDIA-stuurprogramma's met uw container-runtime.

Door docker-run aan te roepen met de –gpu-vlag, wordt uw hardware zichtbaar voor de container. Dit moet worden ingesteld op elke container die u start, nadat de Container Toolkit is geïnstalleerd.

Advertentie

NVIDIA biedt vooraf geconfigureerde CUDA Docker-images die u kunt gebruiken als een snelle starter voor uw toepassing. Als je iets specifieks nodig hebt, raadpleeg dan de officiële Dockerfiles om je eigen Dockerfiles samen te stellen die nog steeds compatibel zijn met de Container Toolkit.