Udostępnij za pośrednictwem


Wdrażanie wystąpień kontenerów korzystających z zasobów procesora GPU

Aby uruchamiać niektóre obciążenia intensywnie korzystające z obliczeń w usłudze Azure Container Instances, wdróż grupy kontenerów przy użyciu zasobów procesora GPU. Wystąpienia kontenerów w grupie mogą uzyskiwać dostęp do co najmniej jednego procesora GPU NVIDIA Tesla podczas uruchamiania obciążeń kontenerów, takich jak CUDA i aplikacje uczenia głębokiego.

W tym artykule przedstawiono sposób dodawania zasobów procesora GPU podczas wdrażania grupy kontenerów przy użyciu pliku YAML lub szablonu usługi Resource Manager. Zasoby procesora GPU można również określić podczas wdrażania wystąpienia kontenera przy użyciu witryny Azure Portal.

Ważne

Jednostki SKU procesora GPU K80 i P100 zostaną wycofane do 31 sierpnia 2023 r. Jest to spowodowane wycofaniem używanych maszyn wirtualnych: serii NC i serii NCv2, chociaż jednostki SKU V100 będą dostępne, zostanie ona zmieniona, aby zamiast tego użyć usługi Azure Kubernetes Service. Zasoby procesora GPU nie są w pełni obsługiwane i nie powinny być używane w przypadku obciążeń produkcyjnych. Użyj następujących zasobów, aby przeprowadzić migrację do usługi AKS dzisiaj: Jak przeprowadzić migrację do usługi AKS.

Ważne

Ta funkcja jest obecnie dostępna w wersji zapoznawczej i obowiązują pewne ograniczenia. Wersje zapoznawcze są udostępniane pod warunkiem udzielenia zgody na dodatkowe warunki użytkowania. Niektóre cechy funkcji mogą ulec zmianie, zanim stanie się ona ogólnie dostępna.

Wymagania wstępne

Uwaga

Ze względu na niektóre bieżące ograniczenia nie wszystkie żądania zwiększenia limitu są gwarantowane do zatwierdzenia.

  • Jeśli chcesz użyć tej jednostki SKU dla wdrożeń kontenerów produkcyjnych, utwórz wniosek o pomoc techniczną platformy Azure, aby zwiększyć limit.

Ograniczenia wersji zapoznawczej

W wersji zapoznawczej obowiązują następujące ograniczenia dotyczące korzystania z zasobów procesora GPU w grupach kontenerów.

Dostępność w regionach

Regiony System operacyjny Dostępne jednostki SKU procesora GPU
Wschodnie stany USA, Europa Zachodnia, Zachodnie stany USA 2, Azja Południowo-Wschodnia, Indie Środkowe Linux V100

Obsługa zostanie dodana dla dodatkowych regionów w czasie.

Obsługiwane typy systemu operacyjnego: tylko system Linux

Dodatkowe ograniczenia: nie można używać zasobów procesora GPU podczas wdrażania grupy kontenerów w sieci wirtualnej.

Informacje o zasobach procesora GPU

Liczba i jednostka SKU

Aby użyć procesorów GPU w wystąpieniu kontenera , określ zasób procesora GPU z następującymi informacjami:

  • Count — liczba procesorów GPU: 1, 2 lub 4.

  • Jednostka SKU — jednostka SKU procesora GPU: V100. Każda jednostka SKU jest mapowana na procesor GPU NVIDIA Tesla w jednej z następujących rodzin maszyn wirtualnych z obsługą procesora GPU platformy Azure:

    SKU Rodzina maszyn wirtualnych
    V100 NCv3

Maksymalna liczba zasobów na jednostkę SKU

System operacyjny GPU SKU Liczba procesorów GPU CPU (maksymalnie) Maksymalna ilość pamięci (GB) Magazyn (GB)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 100 24 448 50

Podczas wdrażania zasobów procesora GPU ustaw zasoby procesora CPU i pamięci odpowiednie dla obciążenia, maksymalnie wartości pokazane w poprzedniej tabeli. Te wartości są obecnie większe niż zasoby procesora CPU i pamięci dostępne w grupach kontenerów bez zasobów procesora GPU.

Ważne

Domyślne limity subskrypcji (limity przydziału ) dla zasobów procesora GPU różnią się od jednostki SKU. Domyślne limity procesora CPU dla jednostek SKU V100 są początkowo ustawione na 0. Aby zażądać zwiększenia dostępnego regionu, prześlij żądanie pomoc techniczna platformy Azure.

Fakty, które trzeba znać

  • Czas wdrożenia — tworzenie grupy kontenerów zawierającej zasoby procesora GPU trwa do 8–10 minut. Jest to spowodowane dodatkowym czasem aprowizacji i konfigurowania maszyny wirtualnej procesora GPU na platformie Azure.

  • Cennik — podobnie jak w przypadku grup kontenerów bez zasobów procesora GPU platforma Azure nalicza opłaty za zasoby używane w czasie trwania grupy kontenerów z zasobami procesora GPU. Czas trwania jest obliczany od czasu ściągnięcia obrazu pierwszego kontenera do momentu zakończenia grupy kontenerów. Nie obejmuje czasu na wdrożenie grupy kontenerów.

    Zobacz szczegółowe informacje o cenach.

  • Sterowniki CUDA — wystąpienia kontenerów z zasobami procesora GPU są wstępnie aprowidowane za pomocą sterowników NVIDIA CUDA i środowisk uruchomieniowych kontenerów, dzięki czemu można używać obrazów kontenerów opracowanych na potrzeby obciążeń CUDA.

    Na tym etapie obsługujemy cuda 11. Możesz na przykład użyć następujących obrazów podstawowych dla pliku Dockerfile:

    Uwaga

    Aby zwiększyć niezawodność podczas korzystania z obrazu kontenera publicznego z usługi Docker Hub, zaimportuj obraz i zarządzaj nim w prywatnym rejestrze kontenerów platformy Azure oraz zaktualizuj plik Dockerfile do korzystania z obrazu podstawowego zarządzanego prywatnie. Dowiedz się więcej o pracy z obrazami publicznymi.

Przykład YAML

Jednym ze sposobów dodawania zasobów procesora GPU jest wdrożenie grupy kontenerów przy użyciu pliku YAML. Skopiuj następujący kod YAML do nowego pliku o nazwie gpu-deploy-aci.yaml, a następnie zapisz plik. Ten kod YAML tworzy grupę kontenerów o nazwie gpucontainergroup określającą wystąpienie kontenera z procesorem GPU w wersji 100. Wystąpienie uruchamia przykładową aplikację dodawania wektora CUDA. Żądania zasobów są wystarczające do uruchomienia obciążenia.

Uwaga

W poniższym przykładzie użyto obrazu kontenera publicznego. Aby zwiększyć niezawodność, zaimportuj obraz i zarządzaj nim w prywatnym rejestrze kontenerów platformy Azure, a następnie zaktualizuj kod YAML do korzystania z obrazu podstawowego zarządzanego prywatnie. Dowiedz się więcej o pracy z obrazami publicznymi.

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

Wdróż grupę kontenerów za pomocą polecenia az container create , określając nazwę pliku YAML dla parametru --file . Musisz podać nazwę grupy zasobów i lokalizację grupy kontenerów, taką jak eastus , która obsługuje zasoby procesora GPU.

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

Przeprowadzenie wdrożenia zajmuje kilka minut. Następnie kontener uruchamia i uruchamia operację dodawania wektorów CUDA. Uruchom polecenie az container logs, aby wyświetlić dane wyjściowe dziennika:

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

Dane wyjściowe:

[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

Przykład szablonu usługi Resource Manager

Innym sposobem wdrożenia grupy kontenerów z zasobami procesora GPU jest użycie szablonu usługi Resource Manager. Zacznij od utworzenia pliku o nazwie gpudeploy.json, a następnie skopiuj do niego następujący kod JSON. W tym przykładzie jest wdrażane wystąpienie kontenera z procesorem GPU w wersji 100, które uruchamia zadanie szkoleniowe TensorFlow względem zestawu danych MNIST. Żądania zasobów są wystarczające do uruchomienia obciążenia.

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

Wdróż szablon za pomocą polecenia az deployment group create . Musisz podać nazwę grupy zasobów, która została utworzona w regionie, takim jak eastus , który obsługuje zasoby procesora GPU.

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

Przeprowadzenie wdrożenia zajmuje kilka minut. Następnie kontener uruchamia i uruchamia zadanie TensorFlow. Uruchom polecenie az container logs, aby wyświetlić dane wyjściowe dziennika:

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

Dane wyjściowe:

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

Czyszczenie zasobów

Ponieważ korzystanie z zasobów procesora GPU może być kosztowne, upewnij się, że kontenery nie działają nieoczekiwanie przez długi czas. Monitoruj kontenery w witrynie Azure Portal lub sprawdź stan grupy kontenerów za pomocą polecenia az container show . Na przykład:

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

Po zakończeniu pracy z utworzonymi wystąpieniami kontenera usuń je za pomocą następujących poleceń:

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

Następne kroki