Implementación de instancias de contenedor que usan recursos de GPUDeploy container instances that use GPU resources

Para ejecutar determinadas cargas de trabajo de proceso intensivo en Azure Container Instances, implemente los grupos de contenedores con recursos de GPU.To run certain compute-intensive workloads on Azure Container Instances, deploy your container groups with GPU resources. 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.The container instances in the group can access one or more NVIDIA Tesla GPUs while running container workloads such as CUDA and deep learning applications.

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.This article shows how to add GPU resources when you deploy a container group by using a YAML file or Resource Manager template. También puede especificar los recursos de GPU al implementar una instancia de contenedor mediante Azure Portal.You can also specify GPU resources when you deploy a container instance using the Azure portal.

Importante

Esta funcionalidad actualmente está en su versión preliminar y se aplican algunas limitaciones.This feature is currently in preview, and some limitations apply. Las versiones preliminares están a su disposición con la condición de que acepte los términos de uso adicionales.Previews are made available to you on the condition that you agree to the supplemental terms of use. Es posible que algunos de los aspectos de esta característica cambien antes de ofrecer disponibilidad general.Some aspects of this feature may change prior to general availability (GA).

Limitaciones de vista previaPreview limitations

En la versión preliminar, las siguientes limitaciones se aplican al uso de recursos de GPU en grupos de contenedores.In preview, the following limitations apply when using GPU resources in container groups.

Disponibilidad en regionesRegion availability

RegionsRegions SOOS SKU de GPU disponiblesAvailable GPU SKUs
Este de EE. UU., Oeste de Europa, Oeste de EE. UU. 2East US, West Europe, West US 2 LinuxLinux K80, P100, V100K80, P100, V100
Sudeste de AsiaSoutheast Asia LinuxLinux P100, V100P100, V100
Centro de la IndiaCentral India LinuxLinux V100V100
Norte de EuropaNorth Europe LinuxLinux K80K80

Con el tiempo se admitirán más regiones.Support will be added for additional regions over time.

Tipos de sistemas operativos compatibles : solo Linux.Supported OS types : Linux only

Limitaciones adicionales : no se pueden usar los recursos de GPU al implementar un grupo de contenedores en una red virtual.Additional limitations : GPU resources can't be used when deploying a container group into a virtual network.

Acerca de los recursos de GPUAbout GPU resources

Recuento y SKUCount and SKU

Para usar GPU en una instancia de contenedor, especifique un recurso de GPU con la siguiente información:To use GPUs in a container instance, specify a GPU resource with the following information:

  • Recuento : el número de GPU: 1 , 2 o 4.Count - The number of GPUs: 1 , 2 , or 4.

  • SKU : SKU de GPU: K80 , P100 o V100.SKU - The GPU SKU: K80 , P100 , or V100. Cada SKU asigna la GPU NVIDIA Tesla a una de las siguientes familias de máquinas virtuales habilitadas para GPU de Azure:Each SKU maps to the NVIDIA Tesla GPU in one the following Azure GPU-enabled VM families:

    SKUSKU Familia de VMVM family
    K80K80 NCNC
    P100P100 NCv2NCv2
    V100V100 NCv3NCv3

Recursos máximos por SKUMaximum resources per SKU

SOOS SKU de GPUGPU SKU Recuento de GPUGPU count Uso máximo de CPUMax CPU Memoria máxima (GB)Max Memory (GB) Almacenamiento (GB)Storage (GB)
LinuxLinux K80K80 11 66 5656 5050
LinuxLinux K80K80 22 1212 112112 5050
LinuxLinux K80K80 44 2424 224224 5050
LinuxLinux P100P100 11 66 112112 5050
LinuxLinux P100P100 22 1212 224224 5050
LinuxLinux P100P100 44 2424 448448 5050
LinuxLinux V100V100 11 66 112112 5050
LinuxLinux V100V100 22 1212 224224 5050
LinuxLinux V100V100 44 2424 448448 5050

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.When deploying GPU resources, set CPU and memory resources appropriate for the workload, up to the maximum values shown in the preceding table. Estos valores actualmente son mayores que los recursos de CPU y memoria disponibles en los grupos de contenedores sin recursos de GPU.These values are currently larger than the CPU and memory resources available in container groups without GPU resources.

Importante

Los límites de suscripción (cuotas) predeterminados para los recursos de GPU difieren en la SKU.Default subscription limits (quotas) for GPU resources differ by SKU. Los límites de CPU predeterminados para las SKU P100 y V100 se establecen inicialmente en 0.The default CPU limits for the P100 and V100 SKUs are initially set to 0. Para solicitar un aumento en una región disponible, envíe una solicitud de soporte técnico de Azure.To request an increase in an available region, please submit an Azure support request.

Cosas que debe saberThings to know

  • Tiempo de implementación : la creación de un grupo de contenedores que contienen recursos de GPU tarda hasta 8-10 minutos.Deployment time - Creation of a container group containing GPU resources takes up to 8-10 minutes. Esto se debe al tiempo adicional para aprovisionar y configurar una VM de GPU en Azure.This is due to the additional time to provision and configure a GPU VM in 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.Pricing - Similar to container groups without GPU resources, Azure bills for resources consumed over the duration of a container group with GPU resources. La duración se calcula desde el momento en que se extrae la imagen del primer contenedor hasta que el grupo de contenedores finaliza.The duration is calculated from the time to pull your first container's image until the container group terminates. No incluye el tiempo de implementación del grupo de contenedores.It does not include the time to deploy the container group.

    Consulte los detalles de los precios.See pricing details.

  • 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.CUDA drivers - Container instances with GPU resources are pre-provisioned with NVIDIA CUDA drivers and container runtimes, so you can use container images developed for CUDA workloads.

    Solo se admite CUDA 9.0 en esta fase.We support only CUDA 9.0 at this stage. Por ejemplo, puede usar las imágenes base siguientes para su archivo de Docker:For example, you can use the following base images for your Docker file:

Ejemplo de YAMLYAML example

Una forma de agregar los recursos de GPU es implementar un grupo de contenedores mediante una archivo YAML.One way to add GPU resources is to deploy a container group by using a YAML file. Copie el siguiente archivo YAML en un nuevo archivo denominado gpu-deploy-aci.yaml y, después, guárdelo.Copy the following YAML into a new file named gpu-deploy-aci.yaml , then save the file. Este archivo YAML crea un grupo de contenedores denominado gpucontainergroup en el que se especifica una instancia de contenedor con una GPU K80.This YAML creates a container group named gpucontainergroup specifying a container instance with a K80 GPU. La instancia ejecuta una aplicación de adición de vector CUDA de ejemplo.The instance runs a sample CUDA vector addition application. Las solicitudes de recursos son suficientes para ejecutar la carga de trabajo.The resource requests are sufficient to run the workload.

additional_properties: {}
apiVersion: '2019-12-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: K80
  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.Deploy the container group with the az container create command, specifying the YAML file name for the --file parameter. 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.You need to supply the name of a resource group and a location for the container group such as eastus that supports GPU resources.

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

La implementación tarda varios minutos en completarse.The deployment takes several minutes to complete. A continuación, el contenedor se inicia y ejecuta una operación de adición de vector CUDA.Then, the container starts and runs a CUDA vector addition operation. Ejecute el comando az container logs para ver la salida del registro:Run the az container logs command to view the log output:

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

Salida:Output:

[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 ManagerResource Manager template example

Otra manera de implementar un grupo de contenedores con recursos de GPU es usar una plantilla de Resource Manager.Another way to deploy a container group with GPU resources is by using a Resource Manager template. Para empezar, cree un archivo llamado gpudeploy.json y copie el siguiente código JSON en él.Start by creating a file named gpudeploy.json, then copy the following JSON into it. 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.This example deploys a container instance with a V100 GPU that runs a TensorFlow training job against the MNIST dataset. Las solicitudes de recursos son suficientes para ejecutar la carga de trabajo.The resource requests are sufficient to run the workload.

{
    "$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": "2019-12-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.Deploy the template with the az deployment group create command. Deberá proporcionar el nombre de un grupo de recursos que se creó en una región como eastus que admite recursos de GPU.You need to supply the name of a resource group that was created in a region such as eastus that supports GPU resources.

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

La implementación tarda varios minutos en completarse.The deployment takes several minutes to complete. A continuación, el contenedor se inicia y ejecuta el trabajo de TensorFlow.Then, the container starts and runs the TensorFlow job. Ejecute el comando az container logs para ver la salida del registro:Run the az container logs command to view the log output:

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

Salida:Output:

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 K80 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 K80, 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 recursosClean up resources

Como el uso de recursos de GPU puede ser caro, asegúrese de que los contenedores no se ejecutan inesperadamente durante largos períodos.Because using GPU resources may be expensive, ensure that your containers don't run unexpectedly for long periods. Supervise los contenedores en Azure Portal o consulte el estado de un grupo de contenedores con el comando az container show.Monitor your containers in the Azure portal, or check the status of a container group with the az container show command. Por ejemplo:For example:

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:When you're done working with the container instances you created, delete them with the following commands:

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

Pasos siguientesNext steps