Installation et utilisation de NVIDIA Container Runtime sous Ubuntu

Site officiel de NVIDIA Container Runtime
Dépôt GitHub : Docker est la technologie de conteneur la plus utilisée par les développeurs. Avec NVIDIA Container Runtime, les développeurs peuvent exposer les GPU NVIDIA aux applications du conteneur en enregistrant simplement un nouveau runtime lors de la création du conteneur. NVIDIA Container Runtime pour Docker est un projet open source hébergé sur GitHub.

Introduction

NVIDIA Container Runtime est un environnement d'exécution de conteneur compatible GPU, compatible avec la spécification Open Containers Initiative (OCI) utilisée par Docker, CRI-O et d'autres technologies de conteneurs populaires. Il simplifie le processus de création et de déploiement d'applications conteneurisées accélérées par GPU sur le bureau, cloud ou centres de données.
NVIDIA Container Runtime est un environnement d'exécution de conteneur compatible GPU qui est compatible avec la spécification Open Containers Initiative (OCI) utilisée par Docker, CRI-O et d'autres technologies de conteneurs populaires. Il simplifie le processus de création d'applications conteneurisées accélérées par GPU et de leur déploiement sur le bureau, le cloud ou le centre de données.

Grâce aux technologies de conteneur prises en charge par NVIDIA Container Runtime telles que Docker, les développeurs peuvent regrouper leurs applications accélérées par GPU ainsi que leurs dépendances dans un package unique garantissant les meilleures performances sur les GPU NVIDIA, quel que soit l'environnement de déploiement
. aux développeurs de regrouper leurs applications accélérées par GPU et leurs dépendances dans un package unique garantissant des performances optimales sur les GPU NVIDIA, quel que soit l'environnement de déploiement.

Installer

Cet article fait référence à la documentation d'installation officielle de NVIDIA Container Toolkit pour l'installer dans Ubuntu 22.04.

Exigences environnementales

  • Le pilote NVIDIA Linux est installé et version >= 418.81.07
  • Version du noyau > 3.10 GNU/Linux x86_64
  • Docker >= 19.03
  • GPU NVIDIA avec architecture >= Kepler (ou Compute Capability 3.0)

démarrer l'installation

  1. Configurer le référentiel de packages et la clé GPG
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
  1. Mettre à jour, télécharger et installer nvidia-docker2
sudo apt-get update

la mise à jour peut signaler une erreur :

sudo apt-get update
E : valeurs contradictoires définies pour l'option Signed-By concernant la source https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia- containers-toolkit-keyring.gpg !=
E : La liste des sources n'a pas pu être lue.

Pour des solutions, consultez le document officiel Valeurs conflictuelles définies pour l'option Erreur signée lors de l'exécution d'apt update

sudo apt-get install -y nvidia-docker2
sudo nvidia-ctk runtime configure --runtime=docker
  1. Redémarrez le démon Docker et testez
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

Si vous voyez un résultat semblable à celui-ci, l’installation a réussi.
Insérer la description de l'image ici

Exemple d'utilisation

Reportez-vous au document officiel Guide de l'utilisateur

Ajouter le runtime NVIDIA

Étant donné que nvidia-docker2 a été installé ci-dessus, il n'est pas nécessaire d'ajouter NVIDIA Runtime.

Définir les variables d'environnement

Les utilisateurs peuvent utiliser des variables d'environnement pour contrôler le comportement du runtime du conteneur NVIDIA, en particulier la possibilité d'énumérer les GPU et les pilotes.
Ces variables d'environnement ont déjà été définies dans l'image CUDA de base fournie par NVIDIA.

Énumération GPU

Utilisez --gpus ou utilisez la variable d'environnement NVIDIA_VISIBLE_DEVICES pour contrôler les GPU que le conteneur peut utiliser

La valeur de NVIDIA_VISIBLE_DEVICES est la suivante

Valeurs possibles

Description

0,1,2,ouGPU-fef8089b

une liste d'UUID ou d'index GPU séparés par des virgules.

all

tous les GPU seront accessibles, c'est la valeur par défaut dans les images de conteneur CUDA de base.

none

aucun GPU ne sera accessible, mais les capacités du pilote seront activées. (Tous les GPU ne peuvent pas être utilisés, mais les capacités du pilote sont activées.)

voidou vide ou non défini

nvidia-container-runtimeaura le même comportement que runc(c'est-à-dire que ni les GPU ni les capacités ne sont exposés)

Lorsque vous utilisez --gpu pour spécifier le GPU, le paramètre périphérique doit également être utilisé. L'exemple est le suivant

docker run --gpus '"device=1,2"' \
    nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv

Activer tous les GPU

docker run --rm --gpus all nvidia/cuda nvidia-smi

Utilisez NVIDIA_VISIBLE_DEVICES pour activer tous les GPU

docker run --rm --runtime=nvidia \
    -e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi

Utilisez NVIDIA_VISIBLE_DEVICES pour activer les GPU spécifiés

docker run --rm --runtime=nvidia \
    -e NVIDIA_VISIBLE_DEVICES=1,2 \
    nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv

Démarrer un conteneur compatible GPU sur deux GPU

docker run --rm --gpus 2 nvidia/cuda nvidia-smi

Utilisez nvidia-smi pour interroger l'UUID du GPU et l'attribuer au conteneur

nvidia-smi -i 3 --query-gpu=uuid --format=csv

uuidGPU
-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24

docker run --gpus device=GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24 \
     nvidia/cuda nvidia-smi

Fonction d'entraînement

NVIDIA_DRIVER_CAPABILITIES contrôle quelles bibliothèques de pilotes/binaires sont montées dans le conteneur.
Les valeurs de NVIDIA_DRIVER_CAPABILITIES sont les suivantes

Valeurs possibles

Description

compute,videoougraphics,utility

une liste de pilotes séparés par des virgules dont le conteneur a besoin.

all

activer toutes les fonctionnalités disponibles du pilote.

vide ou non défini

utiliser la capacité du pilote par défaut : utility, compute(utiliser la capacité du pilote par défaut : utilitaire, calcul)

Les fonctions du pilote prises en charge sont les suivantes

Capacité du pilote

Description

compute

requis pour les applications CUDA et OpenCL.

compat32

requis pour exécuter des applications 32 bits.

graphics

requis pour exécuter les applications OpenGL et Vulkan.

utility

requis pour l'utilisation nvidia-smide NVML.

video

requis pour utiliser le SDK Video Codec.

display

requis pour exploiter l’affichage X11.

Par exemple, spécifiez computing et utility, deux façons d'écrire

docker run --rm --runtime=nvidia \
    -e NVIDIA_VISIBLE_DEVICES=2,3 \
    -e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
    nvidia/cuda nvidia-smi
docker run --rm --gpus 'all,"capabilities=compute,utility"' \
    nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

contrainte

Le runtime NVIDIA fournit également aux conteneurs la possibilité de définir des contraintes dans les fichiers de configuration

NVIDIA_REQUIRE_* est une expression logique utilisée pour définir des contraintes sur la version du logiciel ou l'architecture GPU sur le conteneur. Voici le contenu spécifique des contraintes.

Contrainte

Description

cuda

contrainte sur la version du pilote CUDA.

driver

contrainte sur la version du pilote.

arch

contrainte sur les architectures de calcul des GPU sélectionnés.

brand

contrainte sur la marque des GPU sélectionnés (ex : GeForce, Tesla, GRID).

Plusieurs contraintes peuvent être exprimées dans une seule variable d'environnement : les contraintes séparées par des espaces sont associées à un OU (ou), les contraintes séparées par des virgules sont associées à un ET (et). Par exemple
NVIDIA_REQUIRE_CUDA "cuda>=11.0 driver>=450"

Voir le texte original pour plus d'informations

Fichier Docker

Cela peut être défini via des variables d'environnement, par exemple

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

Docker Composer

Reportez-vous au tutoriel dans la documentation officielle de Docker

Méthode d'écriture Compose v2.3
services:
  test:
    image: nvidia/cuda:10.2-base
    command: nvidia-smi
    runtime: nvidia

Cette façon d’écrire ne peut pas contrôler les propriétés spécifiques du GPU.

Un contrôle plus granulaire
  • les valeurs des capacités
    sont spécifiées sous forme de liste de chaînes (par exemple, capacités : [gpu]). Vous devez définir ce champ dans le fichier Compose. Sinon, il renverra une erreur lorsque le service sera déployé.
  • count
    est spécifié comme une valeur int ou all indiquant le nombre de périphériques GPU qui doivent être réservés (en supposant que l'hôte dispose de ce nombre de GPU).
  • device_ids
    est spécifié comme valeur d'une liste de chaînes représentant les ID de périphérique GPU de l'hôte. L'ID du périphérique se trouve dans la sortie nvidia-smi sur la machine hôte.
  • pilote
    spécifié sous forme de valeur de chaîne (par exemple, pilote : 'nvidia')
  • options
    représente une paire clé-valeur d’options spécifiques au pilote.

count et device_ids s’excluent mutuellement. Vous ne pouvez définir qu'un seul champ à la fois.

Pour plus d’informations sur ces propriétés, consultez la section Compose Spécification dans déployer.

Par exemple, utilisez tous les GPU sur l'hôte et les fonctions de pilote spécifiées (bien que la valeur de NVIDIA_DRIVER_CAPABILITIES puisse être tout, vous ne pouvez pas tout écrire ici, une erreur sera signalée, vous ne pouvez écrire chacun clairement)

services:
  test:
    image: nvidia/cuda:10.2-base
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [compute,graphics,video,utility,display]

Pour plus d'exemples de configuration, consultez la documentation officielle

Je suppose que tu aimes

Origine blog.csdn.net/qq_35395195/article/details/131431872
conseillé
Classement