Развертывание экземпляров контейнеров, использующих ресурсы GPU

Чтобы выполнить определенные ресурсоемкие рабочие нагрузки в Экземплярах контейнеров Azure, разверните группы контейнеров с ресурсами GPU. Экземпляры контейнеров в группе могут получить доступ к одному графическому процессору NVIDIA Tesla или нескольким при выполнении рабочих нагрузок контейнеров, таких как CUDA и приложения глубокого обучения.

В этой статье показано, как добавить ресурсы GPU при развертывании группы контейнеров с помощью файла YAML или шаблона Resource Manager. Ресурсы GPU можно также указать при развертывании экземпляра контейнера с помощью портала Azure.

Внимание

Номера SKU GPU K80 и P100 удаляются к 31 августа 2023 года. Это связано с выходом на пенсию базовых виртуальных машин, используемых: серии NC и серии NCv2, хотя номера SKU V100 будут доступны, он повторно используется для использования Служба Azure Kubernetes вместо этого. Ресурсы GPU не полностью поддерживаются и не должны использоваться для рабочих нагрузок. Используйте следующие ресурсы для миграции в AKS сегодня: как выполнить миграцию в AKS.

Внимание

Сейчас эта функция доступна в предварительной версии, и применяются некоторые ограничения. Предварительные версии предоставляются только в том случае, если вы принимаете дополнительные условия использования. Некоторые аспекты этой функции могут быть изменены до выхода общедоступной версии.

Предварительные требования

Примечание.

Из-за некоторых текущих ограничений не все запросы на увеличение лимита гарантированно утверждаются.

  • Если необходимо использовать номер SKU для развертываний рабочих контейнеров, создайте запрос в Службу поддержки Azure, чтобы увеличить этот лимит.

Ограничения предварительной версии

В режиме предварительной версии при использовании ресурсов GPU в группах контейнеров применяются следующие ограничения.

Доступность по регионам

Регионы ОС Доступные номера SKU для GPU
Восточная часть США, Западная Европа, Западная часть США 2, Юго-Восточная Азия, Центральная Индия Linux V100

Со временем будут поддерживаться другие регионы.

Поддерживаемые типы ОС: только Linux

Дополнительные ограничения: ресурсы GPU нельзя использовать при развертывании группы контейнеров в виртуальной сети.

Сведения о ресурсах GPU

Количество и номер SKU

Чтобы использовать GPU в экземпляре контейнера, укажите ресурс GPU со следующими сведениями:

  • Количество — количество графических процессоров: 1, 2 или 4.

  • SKU — номер SKU GPU: V100. Каждый номер SKU сопоставляется с графическим процессором NVIDIA Tesla в одном из следующих семейств виртуальных машин с поддержкой GPU Azure:

    номер SKU Семейство виртуальных машин
    V100 NCv3

Максимальное количество ресурсов на номер SKU

ОС Номер SKU GPU Количество ЦП максимальная загрузка ЦП; Максимум памяти (ГБ) Хранилище (ГБ)
Linux V100 1 6 112 50
Linux V100 2 12 224 50
Linux V100 4 24 448 50

При развертывании ресурсов GPU установите соответствующие рабочей нагрузке значения для ресурсов ЦП и памяти, но не выше максимальных значений, указанных в предыдущей таблице. В настоящее время эти значения превышают ресурсы ЦП и памяти, доступные в группах контейнеров без ресурсов GPU.

Внимание

Заданные по умолчанию ограничения подписки (квоты) для ресурсов GPU отличаются в зависимости от номера SKU. Ограничения ЦП по умолчанию для номеров SKU версии 100 изначально имеют значение 0. Чтобы запросить увеличение в доступном регионе, отправьте запрос в службу поддержки Azure.

Полезная информация

  • Время развертывания. Создание группы контейнеров, содержащей ресурсы GPU, занимает 8–10 минут. Это связано с затратой времени на подготовку и настройку виртуальной машины с поддержкой GPU в Azure.

  • Цены. Аналогично группам контейнеров без ресурсов GPU, Azure выставляет счета за ресурсы, потребляемые в течение длительности использования группы контейнеров с ресурсами GPU. Длительность использования рассчитывается с момента извлечения первого образа контейнера до момента завершения работы группы контейнеров. Она не включает время, затрачиваемое на развертывание группы контейнеров.

    Просмотрите сведения о ценах.

  • Драйверы CUDA. Экземпляры контейнеров с ресурсами GPU предварительно снабжены драйверами NVIDIA CUDA и средами выполнения контейнеров, поэтому вы можете использовать образы контейнеров, разработанные для рабочих нагрузок CUDA.

    На этом этапе поддерживается CUDA 11. Например, можно использовать следующие базовые образы для файла Docker:

    Примечание.

    Чтобы повысить надежность при использовании общедоступного образа контейнера из Docker Hub, импортируйте образ и управляйте им в частном реестре контейнеров Azure, а также обновите Dockerfile для использования базового образа, управляемого в частном режиме. Узнайте больше о работе с общедоступными образами.

Пример YAML

Чтобы добавить группы GPU, можно развернуть группу контейнеров с помощью YAML-файла. Скопируйте следующий YAML-файл в новый файл с именем gpu-deploy-aci.yaml, а затем сохраните его. Этот YAML создает группу контейнеров с именем gpucontainergroup , указывающую экземпляр контейнера с GPU версии 100. Экземпляр запускает пример приложения сложения векторов CUDA. Запросов ресурсов достаточно для запуска рабочей нагрузки.

Примечание.

В следующем примере используется общедоступный образ контейнера. Чтобы повысить надежность, импортируйте образ и управляйте им в частном реестре контейнеров Azure, а также обновите YAML для использования базового образа, управляемого в частном режиме. Узнайте больше о работе с общедоступными образами.

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

Разверните группу контейнеров с помощью команды az container create, указав имя YAML-файла для значения параметра --file. Необходимо указать имя группы ресурсов и расположение группы контейнеров, которое поддерживает ресурсы GPU, например eastus.

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

Развертывание занимает несколько минут. Затем контейнер запускается и выполняет операцию сложения векторов CUDA. Для просмотра выходных данных журнала выполните команду az container logs:

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

Выходные данные:

[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

Пример шаблона Resource Manager

Чтобы развернуть группу контейнеров с ресурсами GPU, также можно воспользоваться шаблоном Resource Manager. Начните с создания файла с именем gpudeploy.json и скопируйте в него приведенный ниже код JSON. В этом примере развертывается экземпляр контейнера с графическим процессором V100, который выполняет задание обучения TensorFlow для набора данных MNIST. Запросов ресурсов достаточно для запуска рабочей нагрузки.

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

Разверните шаблон с помощью команды az deployment group create. Необходимо указать имя группы ресурсов, созданной в регионе с поддержкой ресурсов GPU, например eastus.

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

Развертывание занимает несколько минут. Затем контейнер запустится и выполнит задание TensorFlow. Для просмотра выходных данных журнала выполните команду az container logs:

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

Выходные данные:

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

Очистка ресурсов

Так как использование ресурсов GPU может быть дорогостоящим, следите, чтобы ваши контейнеры не работали в течение длительного времени. Отслеживайте свои контейнеры на портале Azure или проверяйте состояние группы контейнеров с помощью команды az container show. Например:

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

Когда завершите работу с созданными экземплярами контейнеров, удалите их с помощью следующих команд:

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

Следующие шаги