Compartilhar via


Implantar instâncias de contêiner que usam recursos GPU

Importante

Este produto é desativado a partir de 14 de julho de 2025.

Para executar determinadas cargas de trabalho com uso intensivo de computação nas Instâncias de Contêiner do Azure, implante seus grupos de contêineres com recursos de GPU (unidade de processamento gráfico). As instâncias de contêiner no grupo podem acessar uma ou mais GPUs NVIDIA Tesla durante a execução de cargas de trabalho de contêiner, como cuda (arquitetura de dispositivo unificado de computação) e aplicativos de aprendizado profundo.

Este artigo mostra como adicionar recursos de GPU quando você implanta um grupo de contêineres usando um arquivo YAML ou um modelo do Azure Resource Manager (ARM template). Você também pode especificar recursos de GPU ao implantar uma instância de contêiner usando o portal do Azure.

Pré-requisitos

Devido a algumas limitações atuais, todas as solicitações de aumento de limite podem não ser aprovadas.

Se você quiser usar essa versão para suas implantações de contêiner de produção, crie uma solicitação de Suporte do Azure para aumentar o limite.

Limitações na pré-visualização

Na versão prévia, as limitações a seguir se aplicam quando você usa recursos de GPU em grupos de contêineres.

Disponibilidade da região

Regiões Sistema operacional SKUs de GPU disponíveis
Leste dos EUA, Europa Ocidental, Oeste dos EUA 2, Sudeste Asiático, Índia Central Linux V100

O suporte será adicionado para mais regiões ao longo do tempo.

Tipos de sistema operacional com suporte: somente Linux.

Outras limitações: você não pode usar recursos de GPU ao implantar um grupo de contêineres em uma rede virtual.

Sobre os recursos de GPU

Contagem e versão

Para usar GPUs em uma instância de contêiner, especifique um recurso GPU com as seguintes informações:

  • Quantidade: o número de GPUs é, ou seja, um, dois ou quatro.

  • Versão: a versão da GPU é V100. Cada versão corresponde à GPU NVIDIA Tesla em uma das seguintes famílias de VMs habilitadas para GPU no Azure:

    Versão Família da VM
    V100 NCv3

Máximo de recursos por SKU

Sistema operacional SKU de GPU Contagem de GPU CPU máxima Memória máxima (GB) Armazenamento (GB)
Linux V100 1 6 112 50
Linux V100 3 12 224 50
Linux V100 4 24 448 50

Ao implantar recursos de GPU, defina os recursos de CPU e memória apropriados para a carga de trabalho, até os valores máximos mostrados na tabela anterior. Esses valores são atualmente maiores do que os recursos disponíveis de CPU e memória em grupos de contêiner sem recursos GPU.

Importante

Os limites de assinatura padrão (cotas) para recursos de GPU diferem por versão. Os limites de CPU padrão para versões V100 são inicialmente definidos como 0. Para solicitar um aumento em uma região disponível, envie uma solicitação de Suporte do Azure.

Observações importantes

  • Tempo de implantação: a criação de um grupo de contêineres que contém recursos de GPU leva até 8 a 10 minutos. É necessário mais tempo para provisionar e configurar uma VM (máquina virtual) de GPU no Azure.

  • Preços: semelhante a grupos de contêineres sem recursos de GPU, o Azure cobra recursos que são consumidos durante a duração de um grupo de contêineres com recursos de GPU. A duração é calculada desde o momento para efetuar pull de sua primeira imagem do contêiner até que o grupo de contêineres termina. Ele não inclui o tempo para implantar o grupo de contêineres.

    Para obter mais informações, confira Detalhes de preços.

  • Drivers CUDA: As instâncias de contêiner com recursos de GPU são pré-provisionadas com drivers NVIDIA CUDA e tempos de execução de contêiner para que você possa usar imagens de contêiner desenvolvidas para cargas de trabalho CUDA.

    Há suporte até a CUDA 11 neste estágio. Por exemplo, você pode usar as seguintes imagens base para o arquivo do Docker:

    Para melhorar a confiabilidade quando você usa uma imagem de contêiner público do Hub do Docker, importe e gerencie a imagem em um registro de contêiner privado do Azure. Em seguida, atualize o arquivo do Docker para usar sua imagem base gerenciada privadamente. Saiba mais sobre como trabalhar com imagens públicas.

Exemplo YAML

Uma maneira de adicionar recursos GPU é implantar um grupo de contêineres usando um arquivo YAML. Copie o YAML a seguir em um novo arquivo chamado gpu-deploy-aci.yaml e salve o arquivo. Esse YAML cria um grupo de contêineres chamado gpucontainergroup que especifica uma instância de contêiner com uma GPU V100. A instância é executada em um aplicativo de adição de vetor CUDA de exemplo. As solicitações de recurso são suficientes para executar a carga de trabalho.

Observação

O exemplo a seguir usa uma imagem de contêiner público. Para melhorar a confiabilidade, importe e gerencie a imagem em um registro de contêiner privado do Azure. Em seguida, atualize seu YAML para usar sua imagem base gerenciada privadamente. Saiba mais sobre como trabalhar com imagens públicas.

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

Implante o grupo de contêineres com o comando az container create e especifique o nome do arquivo YAML para o --file parâmetro. Você precisa fornecer o nome de um grupo de recursos e um local para o grupo de contêineres, como eastus, que dá suporte a recursos de GPU.

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

A implantação leva vários minutos para ser concluída. Em seguida, o contêiner inicia e executa uma operação de adição de vetor CUDA. Execute o comando az container logs para exibir a saída do log:

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

Saída:

[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

Exemplo de modelo do Resource Manager

Outra maneira de implantar um grupo de contêineres com recursos de GPU é usando um modelo do ARM. Comece criando um arquivo chamado gpudeploy.json. Em seguida, copie o JSON a seguir para ele. Este exemplo implanta uma instância de contêiner com um GPU V100 que executa um trabalho de treinamento TensorFlow em relação a conjunto de dados MNIST. As solicitações de recurso são suficientes para executar a carga de trabalho.

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

Implante o modelo com o comando az deployment group create. Você precisa fornecer o nome de um grupo de recursos que foi criado em uma região como eastus que é compatível com os recursos GPU.

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

A implantação leva vários minutos para ser concluída. Em seguida, o contêiner inicia e executa o trabalho TensorFlow. Execute o comando az container logs para exibir a saída do log:

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

Saída:

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

Limpar os recursos

Como o uso de recursos de GPU pode ser caro, verifique se os contêineres não são executados inesperadamente por longos períodos. Monitore seus contêineres no portal do Azure. Você também pode verificar o status de um grupo de contêineres com o comando az container show . Por exemplo:

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

Quando terminar de trabalhar com as instâncias de contêiner que você criou, exclua-as com os seguintes comandos:

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