Implementación de instancias de contenedor que usan recursos de GPU
Para ejecutar determinadas cargas de trabajo de proceso intensivo en Azure Container Instances, implemente los grupos de contenedores con recursos de GPU. Las instancias de contenedor en el grupo pueden acceder a una o varias GPU NVIDIA Tesla mientras se ejecutan cargas de contenedor como CUDA y aplicaciones de aprendizaje profundo.
En este artículo se muestra cómo agregar recursos de GPU al implementar un grupo de contenedores mediante el uso de un archivo YAML o una plantilla de Resource Manager. También puede especificar los recursos de GPU al implementar una instancia de contenedor mediante Azure Portal.
Importante
Las SKU de GPU K80 y P100 se retiran el 31 de agosto de 2023. Esto se debe a la retirada de las máquinas virtuales subyacentes usadas: serie NC y serie NCv2. Aunque las SKU V100 estarán disponibles, se recomienda usar Azure Kubernetes Service en su lugar. Los recursos de GPU no son totalmente compatibles y no deben usarse para cargas de trabajo de producción. Use los siguientes recursos para migrar a AKS hoy mismo: Cómo migrar a AKS.
Importante
Esta funcionalidad actualmente está en su versión preliminar y se aplican algunas limitaciones. Las versiones preliminares están a su disposición con la condición de que acepte los términos de uso adicionales. Es posible que algunos de los aspectos de esta característica cambien antes de ofrecer disponibilidad general.
Requisitos previos
Nota:
Debido a algunas limitaciones actuales, no se garantiza la aprobación de todas las solicitudes de aumento de límite.
- Si desea usar esta SKU para las implementaciones de contenedores de producción, cree una solicitud de soporte técnico de Azure para aumentar el límite.
Limitaciones de vista previa
En la versión preliminar, las siguientes limitaciones se aplican al uso de recursos de GPU en grupos de contenedores.
Disponibilidad en regiones
Regions | SO | SKU de GPU disponibles |
---|---|---|
Este de EE. UU., Oeste de Europa, Oeste de EE. UU. 2, Sudeste Asiático, Centro de la India | Linux | V100 |
Con el tiempo se admitirán más regiones.
Tipos de sistemas operativos compatibles: solo Linux.
Limitaciones adicionales: no se pueden usar los recursos de GPU al implementar un grupo de contenedores en una red virtual.
Acerca de los recursos de GPU
Recuento y SKU
Para usar GPU en una instancia de contenedor, especifique un recurso de GPU con la siguiente información:
Recuento: el número de GPU: 1, 2 o 4.
SKU - El GPU de SKU: V100. Cada SKU asigna la GPU NVIDIA Tesla a una de las siguientes familias de máquinas virtuales habilitadas para GPU de Azure:
SKU Familia de VM V100 NCv3
Recursos máximos por SKU
SO | SKU de GPU | Recuento de GPU | Uso máximo de CPU | Memoria máxima (GB) | Almacenamiento (GB) |
---|---|---|---|---|---|
Linux | V100 | 1 | 6 | 112 | 50 |
Linux | V100 | 2 | 12 | 224 | 50 |
Linux | V100 | 4 | 24 | 448 | 50 |
Al implementar recursos de GPU, establezca los recursos de CPU y memoria apropiados para la carga de trabajo, hasta los valores máximos mostrados en la siguiente anterior. Estos valores actualmente son mayores que los recursos de CPU y memoria disponibles en los grupos de contenedores sin recursos de GPU.
Importante
Los límites de suscripción (cuotas) predeterminados para los recursos de GPU difieren en la SKU. Los límites de CPU predeterminados para las SKU V100 se establecen inicialmente en 0. Para solicitar un aumento en una región disponible, envíe una solicitud de soporte técnico de Azure.
Cosas que debe saber
Tiempo de implementación: la creación de un grupo de contenedores que contienen recursos de GPU tarda hasta 8-10 minutos. Esto se debe al tiempo adicional para aprovisionar y configurar una VM de GPU en Azure.
Precios: igual que en los grupos de contenedores sin recursos de GPU, Azure factura por los recursos consumidos a lo largo de la duración de un grupo de contenedores con recursos GPU. La duración se calcula desde el momento en que se extrae la imagen del primer contenedor hasta que el grupo de contenedores finaliza. No incluye el tiempo para implementar el grupo de contenedores.
Consulte los detalles de los precios.
Controladores de CUDA: las instancias de contenedor con los recursos de GPU se aprovisionan previamente con controladores de NVIDIA CUDA y tiempos de ejecución de contenedor, por lo que puede usar imágenes de contenedor desarrolladas para cargas de trabajo de CUDA.
En esta fase se admite hasta CUDA 11. Por ejemplo, puede usar las imágenes base siguientes para su Dockerfile:
Nota
Para mejorar la confiabilidad al usar una imagen de contenedor pública de Docker Hub, importe y administre la imagen en un registro de contenedor privado de Azure y actualice el Dockerfile para usar la imagen base administrada de forma privada. Más información sobre cómo trabajar con imágenes públicas.
Ejemplo de YAML
Una forma de agregar los recursos de GPU es implementar un grupo de contenedores mediante una archivo YAML. Copie el siguiente archivo YAML en un nuevo archivo denominado gpu-deploy-aci.yaml y, después, guárdelo. Este archivo YAML crea un grupo de contenedores denominado gpucontainergroup en el que se especifica una instancia de contenedor con una GPU V100. La instancia ejecuta una aplicación de adición de vector CUDA de ejemplo. Las solicitudes de recursos son suficientes para ejecutar la carga de trabajo.
Nota
En el ejemplo siguiente se usa una imagen de contenedor público. Para mejorar la confiabilidad, importe y administre la imagen en un registro de contenedor privado de Azure y actualice el archivo YAML para usar la imagen base administrada de forma privada. Más información sobre cómo trabajar con imágenes 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
Implemente el grupo de contenedores con el comando az container create y especifique el nombre del archivo YAML para el parámetro --file
. Deberá proporcionar el nombre de un grupo de recursos y una ubicación para el grupo de contenedores como eastus que admita los recursos de GPU.
az container create --resource-group myResourceGroup --file gpu-deploy-aci.yaml --location eastus
La implementación tarda varios minutos en completarse. A continuación, el contenedor se inicia y ejecuta una operación de adición de vector CUDA. Ejecute el comando az container logs para ver la salida del registro:
az container logs --resource-group myResourceGroup --name gpucontainergroup --container-name gpucontainer
Salida:
[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
Ejemplo de plantilla de Resource Manager
Otra manera de implementar un grupo de contenedores con recursos de GPU es usar una plantilla de Resource Manager. Para empezar, cree un archivo llamado gpudeploy.json
y copie el siguiente código JSON en él. Este ejemplo implementa una instancia de contenedor con una GPU V100 que ejecuta un trabajo de aprendizaje TensorFlow en relación con el conjunto de datos MNIST. Las solicitudes de recursos son suficientes para ejecutar la carga de trabajo.
{
"$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"
}
}
]
}
Implemente la plantilla con el comando az deployment group create. Deberá proporcionar el nombre de un grupo de recursos que se creó en una región como eastus que admite recursos de GPU.
az deployment group create --resource-group myResourceGroup --template-file gpudeploy.json
La implementación tarda varios minutos en completarse. A continuación, el contenedor se inicia y ejecuta el trabajo de TensorFlow. Ejecute el comando az container logs para ver la salida del registro:
az container logs --resource-group myResourceGroup --name gpucontainergrouprm --container-name gpucontainer
Salida:
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
Limpieza de recursos
Como el uso de recursos de GPU puede ser caro, asegúrese de que los contenedores no se ejecutan inesperadamente durante largos períodos. Supervise los contenedores en Azure Portal o consulte el estado de un grupo de contenedores con el comando az container show. Por ejemplo:
az container show --resource-group myResourceGroup --name gpucontainergroup --output table
Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes comandos:
az container delete --resource-group myResourceGroup --name gpucontainergroup -y
az container delete --resource-group myResourceGroup --name gpucontainergrouprm -y
Pasos siguientes
- Obtenga más información sobre cómo implementar un grupo de contenedores con un archivo YAML o una plantilla de Resource Manager.
- Obtenga más información sobre los tamaños de máquinas virtuales optimizadas para GPU en Azure.