Situatie
Containerele Docker nu văd automat GPU-ul sistemului dvs. Acest lucru duce la o performanță redusă în sarcinile de lucru dependente de GPU, cum ar fi cadrele de învățare automată.
Faceți ca GPU-urile să funcționeze în Docker
Containerele Docker partajează nucleul gazdei dvs., dar își aduc propriul sistem de operare și pachete software. Aceasta înseamnă că le lipsesc driverele NVIDIA utilizate pentru interfața cu GPU-ul tău. Docker nici măcar nu adaugă GPU-uri la containere în mod implicit, așa că o rulare simplă a docker nu va vedea hardware-ul dvs.
La un nivel înalt, ca GPU să funcționeze este o procedură în doi pași: instalați driverele din imaginea dvs., apoi instruiți-l pe Docker să adauge dispozitive GPU în containerele dvs. în timpul rulării.
Adăugarea driverelor NVIDIA
Asigurați-vă că driverele NVIDIA funcționează corect pe gazda dumneavoastră înainte de a continua cu configurarea Docker. Ar trebui să puteți rula cu succes nvidia-smi și să vedeți numele GPU-ului, versiunea driverului și versiunea CUDA.
Pentru a vă folosi GPU-ul cu Docker, începeți prin a adăuga NVIDIA Container Toolkit la gazda dvs. Aceasta se integrează în Docker Engine pentru a configura automat containerele pentru suport GPU.
Adăugați depozitul de pachete al setului de instrumente în sistemul dvs. utilizând exemplul de comandă:
distribution=$(. /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
Apoi instalați pachetul nvidia-docker2 pe gazda dvs.:
apt-get update apt-get install -y nvidia-docker2
Reporniți daemon Docker pentru a finaliza instalarea:
sudo systemctl restart docker Setul de instrumente Container ar trebui să fie acum operațional. Sunteți gata să începeți un container de testare.
Pornirea unui container cu acces GPU
Deoarece Docker nu furnizează GPU-urile sistemului dvs. în mod implicit, trebuie să creați containere cu marcajul –gpus pentru ca hardware-ul dvs. să apară. Puteți fie să specificați anumite dispozitive de activat, fie să utilizați cuvântul cheie all.
Imaginile nvidia/cuda sunt preconfigurate cu instrumentele binare CUDA și GPU. Porniți un container și rulați comanda nvidia-smi pentru a verifica dacă GPU-ul este accesibil. Ieșirea ar trebui să se potrivească cu ceea ce ați văzut când utilizați nvidia-smi pe gazda dvs. Versiunea CUDA poate fi diferită în funcție de versiunile setului de instrumente de pe gazdă și din imaginea containerului selectată.
docker run -it --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi
Selectarea unei imagini de bază
Utilizarea uneia dintre etichetele nvidia/cuda este cea mai rapidă și mai ușoară modalitate de a vă pune în funcțiune volumul de lucru GPU în Docker. Sunt disponibile multe variante diferite; oferă o matrice de sistem de operare, versiune CUDA și opțiuni software NVIDIA. Imaginile sunt construite pentru mai multe arhitecturi.
Fiecare etichetă are acest format:
11.4.0-base-ubuntu20.04
11.4.0– CUDA version.base– Image flavor.ubuntu20.04– Operating system version.
Sunt disponibile trei diferite modele de imagine. Imaginea de bază este o opțiune minimă cu binarele esențiale de rulare CUDA. runtime este o opțiune mai completă, care include bibliotecile de matematică CUDA și NCCL pentru comunicarea între GPU. A treia variantă este devel, care vă oferă totul, de la runtime, precum și anteturi și instrumente de dezvoltare pentru crearea de imagini CUDA personalizate.
Dacă una dintre imagini va funcționa pentru dvs., încercați să o utilizați ca bază în fișierul dvs. Docker. Apoi puteți utiliza instrucțiunile Dockerfile obișnuite pentru a vă instala limbajele de programare, pentru a copia codul sursă și pentru a vă configura aplicația. Îndepărtează complexitatea pașilor de configurare manuală a GPU-ului.
FROM nvidia/cuda:11.4.0-base-ubuntu20.04 RUN apt update RUN apt-get install -y python3 python3-pip RUN pip install tensorflow-gpu COPY tensor-code.py . ENTRYPONT ["python3", "tensor-code.py"]
Construirea și rularea acestei imagini cu semnalul –gpus ar începe volumul de lucru Tensor cu accelerarea GPU.
Configurarea manuală a unei imagini
Puteți adăuga manual suport CUDA la imaginea dvs. dacă trebuie să alegeți o altă bază. Cel mai bun mod de a realiza acest lucru este să faceți referire la fișierele oficiale NVIDIA Dockerfile.
Copiați instrucțiunile folosite pentru a adăuga depozitul de pachete CUDA, instalați biblioteca și conectați-o la calea dvs. Nu reproducem toți pașii din acest ghid, deoarece variază în funcție de versiunea CUDA și de sistemul de operare.
Acordați atenție variabilelor de mediu de la sfârșitul fișierului Docker – acestea definesc modul în care containerele care utilizează imaginea dvs. se integrează cu NVIDIA Container Runtime:
ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
Imaginea dvs. ar trebui să vă detecteze GPU-ul odată ce CUDA este instalat și variabilele de mediu au fost setate. Acest lucru vă oferă mai mult control asupra conținutului imaginii dvs., dar vă permite să ajustați instrucțiunile pe măsură ce noile versiuni CUDA lansează.
Cum functioneazã?
NVIDIA Container Toolkit este o colecție de pachete care împachetează timpii de rulare a containerului, cum ar fi Docker, cu o interfață cu driverul NVIDIA de pe gazdă. Biblioteca libnvidia-container este responsabilă pentru furnizarea unui API și CLI care furnizează automat GPU-urile sistemului dumneavoastră către containere prin intermediul wrapper-ului de rulare.
Componenta nvidia-container-toolkit implementează un cârlig de pre-pornire pentru rularea containerului. Aceasta înseamnă că este notificat când un nou container este pe cale să înceapă. Se uită la GPU-urile pe care doriți să le atașați și invocă libnvidia-container pentru a gestiona crearea containerului.
Cârligul este activat de nvidia-container-runtime. Acest lucru împachetează timpul de rulare al containerului „adevărat”, cum ar fi containerd sau runc, pentru a asigura rularea cârligului de prestart NVIDIA. Runtime-ul dvs. existent continuă procesul de pornire a containerului după ce hook-ul a fost executat. Când setul de instrumente container este instalat, veți vedea timpul de execuție NVIDIA selectat în fișierul de configurare al demonului Docker. Utilizarea unui GPU NVIDIA în interiorul unui container Docker necesită adăugarea setului de instrumente NVIDIA Container la gazdă. Aceasta integrează driverele NVIDIA cu timpul de rulare al containerului.
Apelarea rulării docker cu indicatorul –gpu face hardware-ul dvs. vizibil pentru container. Acesta trebuie setat pentru fiecare container pe care îl lansați, după ce setul de instrumente Container a fost instalat.
NVIDIA furnizează imagini CUDA Docker preconfigurate pe care le puteți folosi ca o pornire rapidă pentru aplicația dvs. Dacă aveți nevoie de ceva mai specific, consultați fișierele Dockerfile oficiale pentru a le asambla pe ale dvs. care sunt încă compatibile cu Container Toolkit.
Leave A Comment?