Partager via


Déployer des instances de conteneur qui utilisent des ressources GPU

Important

Ce produit est retiré depuis le 14 juillet 2025.

Pour exécuter certaines charges de travail nécessitant beaucoup de ressources de calcul sur Azure Container Instances, déployez vos groupes de conteneurs avec des ressources d’unité de traitement graphique (GPU). Les instances de conteneur du groupe peuvent accéder à un ou plusieurs GPU NVIDIA Tesla tout en exécutant des charges de travail de conteneur telles que l’architecture d’appareil unifié de calcul (CUDA) et les applications d’apprentissage profond.

Cet article explique comment ajouter des ressources GPU lorsque vous déployez un groupe de conteneurs à l’aide d’un fichier YAML ou d’un modèle Azure Resource Manager (modèle ARM). Vous pouvez également spécifier des ressources GPU lorsque vous déployez une instance de conteneur à l’aide du portail Azure.

Prérequis

En raison de certaines limitations actuelles, toutes les demandes d’augmentation de limite peuvent ne pas être approuvées.

Si vous souhaitez utiliser cette version pour vos déploiements de conteneurs de production, créez une demande de support Azure pour augmenter la limite.

Limitations de la version préliminaire

En préversion, les limitations suivantes s’appliquent lorsque vous utilisez des ressources GPU dans des groupes de conteneurs.

Disponibilité des régions

Régions Système d''exploitation Références SKU GPU disponibles
USA Est, Europe Ouest, USA Ouest 2, Asie Sud-Est, Inde Centre Linux V100

La prise en charge sera ajoutée pour plus de régions au fil du temps.

Types de système d’exploitation pris en charge : Linux uniquement.

Autres limitations : vous ne pouvez pas utiliser de ressources GPU lorsque vous déployez un groupe de conteneurs dans un réseau virtuel.

À propos des ressources GPU

Nombre et version

Pour utiliser des GPU dans une instance de conteneur, vous devez spécifier une ressource GPU avec les informations suivantes :

  • Nombre : le nombre de GPU est un, deux ou quatre.

  • Version : la version GPU est V100. Chaque version est mappée au GPU NVIDIA Tesla dans une des familles de machines virtuelles avec GPU Azure suivantes :

    Version Famille de machines virtuelles
    V100 NCv3

Quantité de ressources maximale par référence SKU

Système d''exploitation RÉFÉRENCE SKU DE GPU Nombre de GPU Utilisation maximale du processeur Mémoire maximale (Go) Stockage (Go)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

Lorsque vous déployez des ressources GPU, définissez les ressources processeur et mémoire appropriées pour la charge de travail, jusqu’aux valeurs maximales indiquées dans le tableau précédent. Ces valeurs sont actuellement supérieures aux ressources disponibles pour l’UC et la mémoire dans les groupes de conteneurs sans ressources GPU.

Important

Les limites d’abonnement par défaut (quotas) pour les ressources GPU diffèrent par version. Les limites d’UC par défaut pour les versions V100 sont initialement définies sur 0. Pour demander une augmentation dans une région disponible, envoyez une demande de support Azure.

À savoir

  • Temps de déploiement : la création d’un groupe de conteneurs qui contient des ressources GPU prend jusqu’à 8 à 10 minutes. Plus de temps est nécessaire pour provisionner et configurer une machine virtuelle GPU dans Azure.

  • Tarification : comme pour les groupes de conteneurs sans ressources GPU, Azure facture des ressources consommées pendant la durée d’un groupe de conteneurs avec des ressources GPU. La durée est calculée à partir du début de l’extraction de l’image de votre premier conteneur jusqu’à la fin de l’exécution du groupe de conteneurs. Elle n’inclut pas le temps de déploiement du groupe de conteneurs.

    Pour plus d’informations, consultez la rubrique Détails tarifaires .

  • Pilotes CUDA : les instances de conteneur avec des ressources GPU sont préprovisionnés avec les pilotes NVIDIA CUDA et les runtimes de conteneur afin de pouvoir utiliser des images conteneur développées pour les charges de travail CUDA.

    Nous prenons en charge les versions allant jusqu’à CUDA 11 à ce stade. Par exemple, vous pouvez utiliser les images de base suivantes pour votre fichier Docker :

    Pour améliorer la fiabilité lorsque vous utilisez une image conteneur publique à partir de Docker Hub, importez et gérez l’image dans un registre de conteneurs Azure privé. Ensuite, mettez à jour votre fichier Docker pour utiliser votre image de base gérée en privé. En savoir plus sur l’utilisation des images publiques.

Exemple YAML

Une façon d’ajouter des ressources GPU est de déployer un groupe de conteneurs en utilisant un fichier YAML. Copiez le yaML suivant dans un nouveau fichier nommé gpu-deploy-aci.yaml, puis enregistrez le fichier. Ce YAML crée un groupe de conteneurs nommé gpucontainergroup qui spécifie une instance de conteneur avec un GPU V100. L’instance exécute un exemple d’application d’ajout de vecteur CUDA. Les requêtes de ressources sont suffisantes pour exécuter la charge de travail.

Remarque

L’exemple suivant utilise une image conteneur publique. Pour améliorer la fiabilité, importez et gérez l’image dans un registre de conteneurs Azure privé. Ensuite, mettez à jour votre YAML pour utiliser votre image de base gérée en privé. En savoir plus sur l’utilisation des images publiques.

additional_properties: {}
apiVersion: '2021-09-01'
name: gpucontainergroup
properties:
  containers:
  - name: gpucontainer
    properties:
      image: k8s-gcrio.azureedge.net/cuda-vector-add:v0.1
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
          gpu:
            count: 1
            sku: V100
  osType: Linux
  restartPolicy: OnFailure

Déployez le groupe de conteneurs avec la commande az container create et spécifiez le nom de fichier YAML du --file paramètre. Vous devez fournir le nom d’un groupe de ressources et un emplacement pour le groupe de conteneurs, comme eastus, qui prend en charge les ressources GPU.

az container create --resource-group myResourceGroup --file gpu-deploy-aci.yaml --location eastus

Le déploiement prend plusieurs minutes. Ensuite, le conteneur démarre et exécute une opération d’ajout de vecteur CUDA. Exécutez la commande az container logs pour afficher la sortie du journal d’activité :

az container logs --resource-group myResourceGroup --name gpucontainergroup --container-name gpucontainer

Sortie :

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Exemple de modèle Resource Manager

Une autre façon de déployer un groupe de conteneurs avec des ressources GPU consiste à utiliser un modèle ARM. Commencez par créer un fichier nommé gpudeploy.json. Copiez ensuite le code JSON suivant dans celui-ci. Cet exemple déploie une instance de conteneur avec un GPU V100 qui exécute un travail de formation TensorFlow pour le jeu de données MNIST. Les requêtes de ressources sont suffisantes pour exécuter la charge de travail.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "containerGroupName": {
        "type": "string",
        "defaultValue": "gpucontainergrouprm",
        "metadata": {
          "description": "Container Group name."
        }
      }
    },
    "variables": {
      "containername": "gpucontainer",
      "containerimage": "mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu"
    },
    "resources": [
      {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2021-09-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "containers": [
            {
              "name": "[variables('containername')]",
              "properties": {
                "image": "[variables('containerimage')]",
                "resources": {
                  "requests": {
                    "cpu": 4.0,
                    "memoryInGb": 12.0,
                    "gpu": {
                        "count": 1,
                        "sku": "V100"
                  }
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "restartPolicy": "OnFailure"
        }
      }
    ]
}

Déployez ensuite le modèle avec la commande az deployment group create. Vous devez fournir le nom d’un groupe de ressources qui a été créé dans une région telle que eastus et qui prend en charge les ressources GPU.

az deployment group create --resource-group myResourceGroup --template-file gpudeploy.json

Le déploiement prend plusieurs minutes. Ensuite, le conteneur démarre et exécute le travail TensorFlow. Exécutez la commande az container logs pour afficher la sortie du journal d’activité :

az container logs --resource-group myResourceGroup --name gpucontainergrouprm --container-name gpucontainer

Sortie :

2018-10-25 18:31:10.155010: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-10-25 18:31:10.305937: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: Tesla V100 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: ccb6:00:00.0
totalMemory: 11.92GiB freeMemory: 11.85GiB
2018-10-25 18:31:10.305981: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla V100, pci bus id: ccb6:00:00.0, compute capability: 3.7)
2018-10-25 18:31:14.941723: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz
Accuracy at step 0: 0.097
Accuracy at step 10: 0.6993
Accuracy at step 20: 0.8208
Accuracy at step 30: 0.8594
...
Accuracy at step 990: 0.969
Adding run metadata for 999

Nettoyer les ressources

Étant donné que l’utilisation de ressources GPU peut être coûteuse, assurez-vous que vos conteneurs ne s’exécutent pas de manière inattendue pendant de longues périodes. Surveillez vos conteneurs dans le portail Azure. Vous pouvez également vérifier l’état d’un groupe de conteneurs avec la commande az container show . Exemple :

az container show --resource-group myResourceGroup --name gpucontainergroup --output table

Une fois que vous avez terminé d’utiliser les instances de conteneur que vous avez créées, supprimez-les avec les commandes suivantes :

az container delete --resource-group myResourceGroup --name gpucontainergroup -y
az container delete --resource-group myResourceGroup --name gpucontainergrouprm -y