Containerinstanties implementeren die GPU-resources gebruiken

Als u bepaalde rekenintensieve workloads in Azure Container Instances wilt uitvoeren, implementeert u uw containergroepen met GPU-resources. De containerinstanties in de groep hebben toegang tot een of meer NVIDIA Tesla GPU's tijdens het uitvoeren van containerworkloads, zoals CUDA en deep learning-toepassingen.

In dit artikel wordt beschreven hoe u GPU-resources toevoegt wanneer u een containergroep implementeert met behulp van een YAML-bestand of Resource Manager-sjabloon. U kunt ook GPU-resources opgeven wanneer u een containerinstantie implementeert met behulp van Azure Portal.

Belangrijk

K80- en P100 GPU-SKU's worden op 31 augustus 2023 buiten gebruik gesteld. Dit is het gevolg van de buitengebruikstelling van de onderliggende VM's die worden gebruikt: NC-serie en NCv2-serie , hoewel V100-SKU's beschikbaar zijn, wordt het aanbevolen azure Kubernetes Service te gebruiken. GPU-resources worden niet volledig ondersteund en mogen niet worden gebruikt voor productieworkloads. Gebruik de volgende resources om vandaag naar AKS te migreren: Migreren naar AKS.

Belangrijk

Deze functie is momenteel beschikbaar als preview en er gelden enkele beperkingen. Previews worden voor u beschikbaar gesteld op voorwaarde dat u akkoord gaat met de aanvullende gebruiksvoorwaarden. Sommige aspecten van deze functie worden mogelijk nog gewijzigd voordat de functie algemeen beschikbaar wordt.

Vereisten

Notitie

Vanwege sommige huidige beperkingen worden niet alle limietverhogingsaanvragen gegarandeerd goedgekeurd.

  • Als u deze sKU wilt gebruiken voor uw productiecontainerimplementaties, maakt u een Azure-ondersteuningsaanvraag om de limiet te verhogen.

Preview-beperkingen

In preview gelden de volgende beperkingen bij het gebruik van GPU-resources in containergroepen.

Regionale beschikbaarheid

Regio's Besturingssysteem Beschikbare GPU-SKU's
VS - oost, Europa - west, VS - west 2, Azië - zuidoost, India - centraal Linux V100

Ondersteuning wordt in de loop van de tijd toegevoegd voor extra regio's.

Ondersteunde typen besturingssystemen: alleen Linux

Aanvullende beperkingen: GPU-resources kunnen niet worden gebruikt bij het implementeren van een containergroep in een virtueel netwerk.

Over GPU-resources

Aantal en SKU

Als u GPU's in een containerinstantie wilt gebruiken, geeft u een GPU-resource op met de volgende informatie:

  • Aantal - Het aantal GPU's: 1, 2 of 4.

  • SKU : de GPU-SKU : V100. Elke SKU wordt toegewezen aan de NVIDIA Tesla GPU in een van de volgende VM-families met Azure GPU:

    SKU VM-serie
    V100 NCv3

Maximum resources per SKU

Besturingssysteem GPU-SKU AANTAL GPU's Maximaal CPU-gebruik Maximaal geheugen (GB) Storage (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

Bij het implementeren van GPU-resources stelt u CPU- en geheugenresources in die geschikt zijn voor de workload, tot de maximumwaarden die in de voorgaande tabel worden weergegeven. Deze waarden zijn momenteel groter dan de CPU- en geheugenbronnen die beschikbaar zijn in containergroepen zonder GPU-resources.

Belangrijk

Standaardabonnementslimieten (quota) voor GPU-resources verschillen per SKU. De standaard CPU-limieten voor V100-SKU's worden in eerste instantie ingesteld op 0. Als u een verhoging van een beschikbare regio wilt aanvragen, dient u een ondersteuning voor Azure aanvraag in.

Goed om te weten

  • Implementatietijd : het maken van een containergroep met GPU-resources duurt maximaal 8-10 minuten. Dit komt door de extra tijd voor het inrichten en configureren van een GPU-VM in Azure.

  • Prijzen : net als containergroepen zonder GPU-resources worden in Azure gefactureerd voor resources die worden gebruikt gedurende de duur van een containergroep met GPU-resources. De duur wordt berekend vanaf de tijd die nodig is om de installatiekopie van uw eerste container op te halen totdat de containergroep wordt beëindigd. Het omvat niet de tijd voor het implementeren van de containergroep.

    Bekijk de prijsinformatie.

  • CUDA-stuurprogramma's : containerinstanties met GPU-resources zijn vooraf ingericht met NVIDIA CUDA-stuurprogramma's en containerruntimes, zodat u containerinstallatiekopieën kunt gebruiken die zijn ontwikkeld voor CUDA-workloads.

    In deze fase ondersteunen we CUDA 11. U kunt bijvoorbeeld de volgende basisinstallatiekopieën voor uw Dockerfile gebruiken:

    Notitie

    Om de betrouwbaarheid te verbeteren bij het gebruik van een openbare containerinstallatiekopieën uit Docker Hub, importeert en beheert u de installatiekopieën in een persoonlijk Azure-containerregister en werkt u uw Dockerfile bij om uw privé beheerde basisinstallatiekopieën te gebruiken. Meer informatie over het werken met openbare afbeeldingen.

YAML-voorbeeld

Een manier om GPU-resources toe te voegen, is door een containergroep te implementeren met behulp van een YAML-bestand. Kopieer de volgende YAML naar een nieuw bestand met de naam gpu-deploy-aci.yaml en sla het bestand op. Met deze YAML maakt u een containergroep met de naam gpucontainergroup die een containerinstantie opgeeft met een V100 GPU. Het exemplaar voert een voorbeeld van een CUDA-vectortoepassing uit. De resourceaanvragen zijn voldoende om de workload uit te voeren.

Notitie

In het volgende voorbeeld wordt een openbare containerinstallatiekopieën gebruikt. Ter verbetering van de betrouwbaarheid importeert en beheert u de installatiekopieën in een privé-Azure-containerregister en werkt u uw YAML bij om uw privé beheerde basisinstallatiekopieën te gebruiken. Meer informatie over het werken met openbare afbeeldingen.

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

Implementeer de containergroep met de opdracht az container create en geef de NAAM van het YAML-bestand voor de --file parameter op. U moet de naam van een resourcegroep en een locatie opgeven voor de containergroep, zoals eastus die GPU-resources ondersteunt.

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

Het duurt enkele minuten om de implementatie te voltooien. Vervolgens wordt de container gestart en wordt een CUDA-vector optelbewerking uitgevoerd. Voer de opdracht az container logs uit om de logboekuitvoer weer te geven:

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

Uitvoer:

[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

Voorbeeld van Resource Manager-sjabloon

Een andere manier om een containergroep met GPU-resources te implementeren, is met behulp van een Resource Manager-sjabloon. Begin met het maken van een bestand met de naam gpudeploy.jsonen kopieer vervolgens de volgende JSON erin. In dit voorbeeld wordt een containerinstantie geïmplementeerd met een V100 GPU waarop een TensorFlow-trainingstaak wordt uitgevoerd voor de MNIST-gegevensset. De resourceaanvragen zijn voldoende om de workload uit te voeren.

{
    "$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"
        }
      }
    ]
}

Implementeer de sjabloon met de opdracht az deployment group create . U moet de naam opgeven van een resourcegroep die is gemaakt in een regio zoals eastus die GPU-resources ondersteunt.

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

Het duurt enkele minuten om de implementatie te voltooien. Vervolgens wordt de container gestart en wordt de TensorFlow-taak uitgevoerd. Voer de opdracht az container logs uit om de logboekuitvoer weer te geven:

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

Uitvoer:

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

Resources opschonen

Omdat het gebruik van GPU-resources duur kan zijn, moet u ervoor zorgen dat uw containers gedurende lange perioden niet onverwacht worden uitgevoerd. Bewaak uw containers in Azure Portal of controleer de status van een containergroep met de opdracht az container show . Voorbeeld:

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

Wanneer u klaar bent met het werken met de containerinstanties die u hebt gemaakt, verwijdert u deze met de volgende opdrachten:

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

Volgende stappen