Distribuera containerinstanser som använder GPU-resurser

Om du vill köra vissa beräkningsintensiva arbetsbelastningar på Azure Container Instances distribuerar du dina containergrupper med GPU-resurser. Containerinstanserna i gruppen kan komma åt en eller flera NVIDIA Tesla GPU:er när du kör containerarbetsbelastningar som CUDA och djupinlärningsprogram.

Den här artikeln visar hur du lägger till GPU-resurser när du distribuerar en containergrupp med hjälp av en YAML-fil eller Resource Manager-mall. Du kan också ange GPU-resurser när du distribuerar en containerinstans med hjälp av Azure-portalen.

Viktigt!

K80 och P100 GPU SKU:er dras tillbaka senast den 31 augusti 2023. Detta beror på att de underliggande virtuella datorerna har dragits tillbaka: NC-serien och NCv2-serien Även om V100 SKU:er kommer att vara tillgängliga, är det återanvänt att använda Azure Kubernetes Service i stället. GPU-resurser stöds inte fullt ut och bör inte användas för produktionsarbetsbelastningar. Använd följande resurser för att migrera till AKS idag: Migrera till AKS.

Viktigt!

Den här funktionen är för närvarande i förhandsversion och vissa begränsningar gäller. Förhandsversioner är tillgängliga för dig under förutsättning att du godkänner de kompletterande användningsvillkoren. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA).

Förutsättningar

Kommentar

På grund av vissa aktuella begränsningar garanteras inte alla begäranden om gränsökningar att godkännas.

  • Om du vill använda den här SKU:n för dina distributioner av produktionscontainrar skapar du en Azure-supportbegäran för att öka gränsen.

Begränsningar i förhandsversionen

I förhandsversionen gäller följande begränsningar när du använder GPU-resurser i containergrupper.

Region tillgänglighet

Regioner OS Tillgängliga GPU-SKU:er
USA, östra, Europa, västra, USA, västra 2, Sydostasien, Indien, centrala Linux V100

Stöd läggs till för ytterligare regioner över tid.

Operativsystemtyper som stöds: Endast Linux

Ytterligare begränsningar: GPU-resurser kan inte användas när du distribuerar en containergrupp till ett virtuellt nätverk.

Om GPU-resurser

Antal och SKU

Om du vill använda GPU:er i en containerinstans anger du en GPU-resurs med följande information:

  • Count – antalet GPU:er: 1, 2 eller 4.

  • SKU – GPU SKU: V100. Varje SKU mappar till NVIDIA Tesla GPU i en av följande Azure GPU-aktiverade VM-familjer:

    SKU VM-familj
    V100 NCv3

Maximalt antal resurser per SKU

OS GPU SKU Antal GPU:ar Maximal CPU Maximalt minne (GB) Storage (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

När du distribuerar GPU-resurser anger du processor- och minnesresurser som är lämpliga för arbetsbelastningen, upp till de högsta värden som visas i föregående tabell. Dessa värden är för närvarande större än de processor- och minnesresurser som är tillgängliga i containergrupper utan GPU-resurser.

Viktigt!

Standardprenumerationsgränser (kvoter) för GPU-resurser skiljer sig åt beroende på SKU. Standard-CPU-gränserna för V100 SKU:er är ursprungligen inställda på 0. Om du vill begära en ökning i en tillgänglig region skickar du en Azure-supportbegäran.

Bra att känna till

  • Distributionstid – Det tar upp till 8–10 minuter att skapa en containergrupp som innehåller GPU-resurser. Detta beror på den extra tiden för att etablera och konfigurera en virtuell GPU-dator i Azure.

  • Prissättning – Liknar containergrupper utan GPU-resurser, Azure fakturerar för resurser som förbrukas under en containergrupp med GPU-resurser. Varaktigheten beräknas från tiden för att hämta din första containeravbildning tills containergruppen avslutas. Den tar inte med tiden för att distribuera containergruppen.

    Se prisuppgifter.

  • CUDA-drivrutiner – Containerinstanser med GPU-resurser är företablerade med NVIDIA CUDA-drivrutiner och containerkörningar, så du kan använda containeravbildningar som utvecklats för CUDA-arbetsbelastningar.

    Vi stöder genom CUDA 11 i det här skedet. Du kan till exempel använda följande basavbildningar för din Dockerfile:

    Kommentar

    För att förbättra tillförlitligheten när du använder en offentlig containeravbildning från Docker Hub importerar och hanterar du avbildningen i ett privat Azure-containerregister och uppdaterar Dockerfile så att den använder din privat hanterade basavbildning. Läs mer om hur du arbetar med offentliga avbildningar.

YAML-exempel

Ett sätt att lägga till GPU-resurser är att distribuera en containergrupp med hjälp av en YAML-fil. Kopiera följande YAML till en ny fil med namnet gpu-deploy-aci.yaml och spara sedan filen. Denna YAML skapar en containergrupp med namnet gpucontainergroup som anger en containerinstans med en V100 GPU. Instansen kör ett CUDA-exempelprogram för vektortillägg. Resursbegäranden räcker för att köra arbetsbelastningen.

Kommentar

I följande exempel används en offentlig containeravbildning. För att förbättra tillförlitligheten importerar och hanterar du avbildningen i ett privat Azure-containerregister och uppdaterar YAML för att använda din privat hanterade basavbildning. Läs mer om hur du arbetar med offentliga avbildningar.

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

Distribuera containergruppen med kommandot az container create och ange YAML-filnamnet för parametern --file . Du måste ange namnet på en resursgrupp och en plats för containergruppen, till exempel eastus som stöder GPU-resurser.

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

Distributionen tar normalt flera minuter för att slutföras. Sedan startar containern och kör en CUDA-vektortilläggsåtgärd. Kör kommandot az container logs för att visa loggutdata:

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

Utdata:

[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

Exempel på Resource Manager-mall

Ett annat sätt att distribuera en containergrupp med GPU-resurser är att använda en Resource Manager-mall. Börja med att skapa en fil med namnet gpudeploy.jsonoch kopiera sedan följande JSON till den. Det här exemplet distribuerar en containerinstans med en V100 GPU som kör ett TensorFlow-träningsjobb mot MNIST-datauppsättningen. Resursbegäranden räcker för att köra arbetsbelastningen.

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

Distribuera mallen med kommandot az deployment group create . Du måste ange namnet på en resursgrupp som skapades i en region, till exempel eastus som stöder GPU-resurser.

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

Distributionen tar normalt flera minuter för att slutföras. Sedan startar containern och kör TensorFlow-jobbet. Kör kommandot az container logs för att visa loggutdata:

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

Utdata:

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

Rensa resurser

Eftersom det kan vara dyrt att använda GPU-resurser kontrollerar du att containrarna inte körs oväntat under långa perioder. Övervaka dina containrar i Azure-portalen eller kontrollera statusen för en containergrupp med kommandot az container show . Till exempel:

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

När du är klar med att arbeta med containerinstanserna som du skapade tar du bort dem med följande kommandon:

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

Nästa steg