Nasazení instancí kontejneru, které používají prostředky GPU

Pokud chcete ve službě Azure Container Instances spouštět určité úlohy náročné na výpočetní výkon, nasaďte skupiny kontejnerů s prostředky GPU. Instance kontejnerů ve skupině mají přístup k jednomu nebo více grafickým procesorům NVIDIA Tesla při spouštění úloh kontejnerů, jako jsou CUDA a aplikace hlubokého učení.

Tento článek ukazuje, jak přidat prostředky GPU při nasazení skupiny kontejnerů pomocí souboru YAML nebo šablony Resource Manageru. Prostředky GPU můžete také zadat při nasazování instance kontejneru pomocí webu Azure Portal.

Důležité

Skladové položky GPU K80 a P100 se vyřazuje do 31. srpna 2023. Důvodem je vyřazení použitých základních virtuálních počítačů: Řada NC a řada NCv2 , i když budou k dispozici skladové položky V100, doporučujeme místo toho službu Azure Kubernetes Service znovu použít. Prostředky GPU nejsou plně podporované a neměly by se používat pro produkční úlohy. Pomocí následujících prostředků můžete migrovat do AKS ještě dnes: Jak migrovat do AKS.

Důležité

Tato funkce je aktuálně ve verzi Preview a platí některá omezení. Verze Preview vám zpřístupňujeme pod podmínkou, že budete souhlasit s dodatečnými podmínkami použití. Některé aspekty této funkce se můžou před zveřejněním změnit.

Požadavky

Poznámka:

Vzhledem k některým aktuálním omezením není zaručeno, že budou schváleny všechny žádosti o zvýšení limitu.

  • Pokud chcete tuto skladovou položku použít pro nasazení produkčního kontejneru, vytvořte žádost o podporu Azure, která zvýší limit.

Omezení verze Preview

Ve verzi Preview platí následující omezení při používání prostředků GPU ve skupinách kontejnerů.

Regionální dostupnost

Oblasti Operační systém Dostupné skladové položky GPU
USA – východ, Západní Evropa, USA – západ 2, Jihovýchodní Asie, Indie – střed Linux V100

Podpora bude přidána pro další oblasti v průběhu času.

Podporované typy operačního systému: Pouze Linux

Další omezení: Prostředky GPU se nedají použít při nasazování skupiny kontejnerů do virtuální sítě.

Informace o prostředcích GPU

Počet a skladová položka

Pokud chcete použít GPU v instanci kontejneru, zadejte prostředek GPU s následujícími informacemi:

  • Počet – počet GPU: 1, 2 nebo 4.

  • Skladová položka – skladová položka GPU: V100. Každá skladová položka se mapuje na GPU NVIDIA Tesla v jedné z následujících rodin virtuálních počítačů s podporou GPU Azure:

    Skladová jednotka (SKU) Řada virtuálních počítačů
    V100 NCv3

Maximální počet prostředků na skladovou položku

Operační systém Skladová položka GPU Počet GPU Max CPU (maximální využití procesoru) Maximální paměť (GB) Storage (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

Při nasazování prostředků GPU nastavte prostředky procesoru a paměti vhodné pro úlohu až do maximálních hodnot zobrazených v předchozí tabulce. Tyto hodnoty jsou aktuálně větší než prostředky procesoru a paměti dostupné ve skupinách kontejnerů bez prostředků GPU.

Důležité

Výchozí limity předplatného (kvóty) pro prostředky GPU se liší podle skladové položky. Výchozí omezení procesoru pro skladové položky V100 jsou zpočátku nastavená na 0. Pokud chcete požádat o zvýšení dostupné oblasti, odešlete podpora Azure žádost.

Co je třeba vědět

  • Čas nasazení – Vytvoření skupiny kontejnerů obsahující prostředky GPU trvá až 8 až 10 minut. Důvodem je další doba zřízení a konfigurace virtuálního počítače GPU v Azure.

  • Ceny – Podobně jako u skupin kontejnerů bez prostředků GPU se Azure účtuje za prostředky spotřebované po celou dobu trvání skupiny kontejnerů s prostředky GPU. Doba trvání se vypočítá od okamžiku, kdy se stáhne image vašeho prvního kontejneru, dokud se skupina kontejnerů neukončí. Nezahrnuje čas nasazení skupiny kontejnerů.

    Podrobné informace o cenách

  • Ovladače CUDA – Instance kontejnerů s prostředky GPU jsou předem zřízené pomocí ovladačů NVIDIA CUDA a modulů runtime kontejnerů, takže můžete použít image kontejnerů vyvinuté pro úlohy CUDA.

    V této fázi podporujeme až CUDA 11. Například pro váš soubor Dockerfile můžete použít následující základní image:

    Poznámka:

    Pokud chcete zvýšit spolehlivost při použití veřejné image kontejneru z Docker Hubu, naimportujte a spravujte image v privátním registru kontejnerů Azure a aktualizujte soubor Dockerfile tak, aby používal privátní spravovanou základní image. Přečtěte si další informace o práci s veřejnými imagemi.

Příklad YAML

Jedním ze způsobů, jak přidat prostředky GPU, je nasadit skupinu kontejnerů pomocí souboru YAML. Zkopírujte následující YAML do nového souboru s názvem gpu-deploy-aci.yaml a pak soubor uložte. Tento YAML vytvoří skupinu kontejnerů s názvem gpucontainergroup určující instanci kontejneru s GPU V100. Instance spustí ukázkovou aplikaci sčítání vektorů CUDA. Požadavky na prostředky jsou dostatečné ke spuštění úlohy.

Poznámka:

Následující příklad používá image veřejného kontejneru. Pokud chcete zvýšit spolehlivost, naimportujte a spravujte image v privátním registru kontejnerů Azure a aktualizujte YAML tak, aby používala privátní spravovanou základní image. Přečtěte si další informace o práci s veřejnými imagemi.

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

Nasaďte skupinu kontejnerů pomocí příkazu az container create a zadejte název souboru YAML pro --file parametr. Musíte zadat název skupiny prostředků a umístění pro skupinu kontejnerů, například eastus , která podporuje prostředky GPU.

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

Dokončení nasazení trvá několik minut. Kontejner se pak spustí a spustí operaci sčítání vektoru CUDA. Spuštěním příkazu az container logs zobrazte výstup protokolu:

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

Výstup:

[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

Příklad šablony Resource Manageru

Dalším způsobem, jak nasadit skupinu kontejnerů s prostředky GPU, je použití šablony Resource Manageru. Začněte vytvořením souboru s názvem gpudeploy.jsona zkopírujte do něj následující JSON. Tento příklad nasadí instanci kontejneru s GPU V100, která spouští trénovací úlohu TensorFlow pro datovou sadu MNIST. Požadavky na prostředky jsou dostatečné ke spuštění úlohy.

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

Nasaďte šablonu pomocí příkazu az deployment group create . Musíte zadat název skupiny prostředků, která byla vytvořena v oblasti, například eastus , která podporuje prostředky GPU.

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

Dokončení nasazení trvá několik minut. Pak se kontejner spustí a spustí úlohu TensorFlow. Spuštěním příkazu az container logs zobrazte výstup protokolu:

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

Výstup:

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

Vyčištění prostředků

Vzhledem k tomu, že používání prostředků GPU může být nákladné, ujistěte se, že kontejnery neočekávaně neběží po dlouhou dobu. Monitorujte kontejnery na webu Azure Portal nebo pomocí příkazu az container show zkontrolujte stav skupiny kontejnerů. Příklad:

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

Po dokončení práce s instancemi kontejneru, které jste vytvořili, je odstraňte pomocí následujících příkazů:

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

Další kroky