Cree máquinas virtuales GPU de forma masiva


Puede crear un grupo de máquinas virtuales (VM) que tengan unidades de procesamiento gráfico (GPU) conectadas mediante el proceso de creación masiva. Con el proceso de creación masiva, obtiene una validación inicial en la que la solicitud falla rápidamente si no es factible. Además, si utiliza la bandera de región, la API de creación masiva elige automáticamente la zona que tiene la capacidad de cumplir con la solicitud.

Para obtener más información sobre la creación masiva, consulte Acerca de la creación masiva de máquinas virtuales . Para obtener más información sobre la creación de máquinas virtuales con GPU conectadas, consulte Descripción general de la creación de una instancia con GPU conectadas .

Antes de comenzar

Roles requeridos

Para obtener los permisos que necesita para crear máquinas virtuales, solicite a su administrador que le otorgue la función de IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulte Administrar el acceso a proyectos, carpetas y organizaciones .

Esta función predefinida contiene los permisos necesarios para crear máquinas virtuales. Para ver los permisos exactos que se requieren, expanda la sección Permisos requeridos :

Permisos requeridos

Se requieren los siguientes permisos para crear máquinas virtuales:

  • compute.instances.create en el proyecto.
  • Para usar una imagen personalizada para crear la VM: compute.images.useReadOnly en la imagen
  • Para usar una instantánea para crear la VM: compute.snapshots.useReadOnly en la instantánea
  • Para usar una plantilla de instancia para crear la VM: compute.instanceTemplates.useReadOnly en la plantilla de instancia
  • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
  • Para especificar una dirección IP estática para la VM: compute.addresses.use en el proyecto
  • Para asignar una dirección IP externa a la VM cuando se usa una red heredada: compute.networks.useExternalIp en el proyecto
  • Para especificar una subred para su VM: compute.subnetworks.use en el proyecto o en la subred elegida
  • Para asignar una dirección IP externa a la VM cuando se usa una red VPC: compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
  • Para configurar metadatos de instancia de VM para la VM: compute.instances.setMetadata en el proyecto
  • Para configurar etiquetas para la VM: compute.instances.setTags en la VM
  • Para configurar etiquetas para la VM: compute.instances.setLabels en la VM
  • Para configurar una cuenta de servicio para que la use la VM: compute.instances.setServiceAccount en la VM
  • Para crear un nuevo disco para la VM: compute.disks.create en el proyecto
  • Para conectar un disco existente en modo de solo lectura o lectura-escritura: compute.disks.use en el disco
  • Para conectar un disco existente en modo de solo lectura: compute.disks.useReadOnly en el disco

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Descripción general

Al crear máquinas virtuales con GPU conectadas mediante el método de creación masiva, puede optar por crear máquinas virtuales en una región (como us-central1 ) o en una zona específica como ( us-central1-a ).

Si eliges especificar una región, Compute Engine coloca las VM en cualquier zona dentro de la región que admita GPU.

Tipos de máquinas

La familia de máquinas optimizadas para acelerador contiene varios tipos de máquinas.

Cada tipo de máquina optimizada para acelerador tiene adjunto un modelo específico de GPU NVIDIA.

Cree grupos de máquinas virtuales A3, A2 y G2

Esta sección explica que puede crear instancias de forma masiva para las series de máquinas A3 High, A3 Mega, A3 Edge, A2 y G2 mediante Google Cloud CLI o REST .

nube de gcloud

Para crear un grupo de máquinas virtuales, usa el comando gcloud compute instances bulk create . Para obtener más información sobre los parámetros y cómo utilizar este comando, consulte Crear máquinas virtuales de forma masiva .

Los siguientes indicadores opcionales se muestran en el comando de ejemplo:

  • --provisioning-model=SPOT es un indicador opcional que configura sus máquinas virtuales como máquinas virtuales de spot. Si su carga de trabajo es tolerante a fallas y puede soportar una posible apropiación de VM, considere usar Spot VM para reducir el costo de sus VM y las GPU conectadas. Para obtener más información, consulte GPU en máquinas virtuales puntuales . Para las máquinas virtuales puntuales, los indicadores de opciones de reinicio automático y mantenimiento del host están deshabilitados.

  • El indicador --accelerator para especificar una estación de trabajo virtual. Las estaciones de trabajo virtuales NVIDIA RTX (vWS) solo son compatibles con máquinas virtuales G2.

Ejemplo

En este ejemplo se crean dos máquinas virtuales que tienen GPU conectadas mediante las siguientes especificaciones:

gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --region=REGION \
    --count=2 \
    --machine-type=MACHINE_TYPE \
    --boot-disk-size=200 \
    --image=IMAGE \
    --image-project=IMAGE_PROJECT \
    --on-host-maintenance=TERMINATE \
    [--provisioning-model=SPOT] \
    [--accelerator=type=nvidia-l4-vws,count=VWS_ACCELERATOR_COUNT]

Reemplace lo siguiente:

  • REGION : la región de las máquinas virtuales. Esta región debe ser compatible con el modelo de GPU seleccionado .
  • MACHINE_TYPE : el tipo de máquina que seleccionó. Elija entre uno de los siguientes:

    • Una máquina tipo A3 .
    • Una máquina tipo A2 .
    • Una máquina tipo G2 . Los tipos de máquinas G2 también admiten memoria personalizada. La memoria debe ser múltiplo de 1024 MB y estar dentro del rango de memoria admitido. Por ejemplo, para crear una máquina virtual con 4 vCPU y 19 GB de memoria, especifique --machine-type=g2-custom-4-19456 .
  • IMAGE : una imagen del sistema operativo compatible con GPU .

    Si desea utilizar la imagen más reciente en una familia de imágenes , reemplace la marca --image con la marca --image-family y establezca su valor en una familia de imágenes que admita GPU. Por ejemplo: --image-family=rocky-linux-8-optimized-gcp .

    También puede especificar una imagen personalizada o imágenes de VM de aprendizaje profundo .

  • IMAGE_PROJECT : el proyecto de imagen de Compute Engine al que pertenece la imagen del sistema operativo. Si utiliza una imagen personalizada o imágenes de VM de aprendizaje profundo, especifique el proyecto al que pertenecen esas imágenes.

  • VWS_ACCELERATOR_COUNT : la cantidad de GPU virtuales que necesitas.

Si tiene éxito, el resultado es similar al siguiente:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

DESCANSAR

Utilice el método instances.bulkInsert con los parámetros necesarios para crear varias máquinas virtuales en una zona. Para obtener más información sobre los parámetros y cómo utilizar este comando, consulte Crear máquinas virtuales de forma masiva .

Ejemplo

En este ejemplo se crean dos máquinas virtuales que tienen GPU conectadas mediante las siguientes especificaciones:

  • Nombres de máquinas virtuales: my-test-vm-1 , my-test-vm-2
  • Cada VM tiene dos GPU conectadas, especificadas mediante el uso del tipo de máquina optimizada para acelerador apropiado

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
    {
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":MACHINE_TYPE,
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":SOURCE_IMAGE_URI
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        ["automaticRestart":true]
      }
    }
    }
    

Reemplace lo siguiente:

  • PROJECT_ID : ID de tu proyecto
  • REGION : la región de las máquinas virtuales. Esta región debe ser compatible con el modelo de GPU seleccionado .
  • MACHINE_TYPE : el tipo de máquina que seleccionó. Elija entre uno de los siguientes:

    • Una máquina tipo A2 .
    • Una máquina tipo G2 . Los tipos de máquinas G2 también admiten memoria personalizada. La memoria debe ser múltiplo de 1024 MB y estar dentro del rango de memoria admitido. Por ejemplo, para crear una máquina virtual con 4 vCPU y 19 GB de memoria, especifique --machine-type=g2-custom-4-19456 .
  • SOURCE_IMAGE_URI : el URI de la imagen o familia de imágenes específica que desea utilizar.

    Por ejemplo:

    • Imagen específica: "sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
    • Familia de imágenes: "sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp" .

    Cuando especificas una familia de imágenes, Compute Engine crea una VM a partir de la imagen del sistema operativo más reciente y no obsoleta de esa familia. Para obtener más información sobre cuándo utilizar familias de imágenes, consulte Mejores prácticas de familias de imágenes .

Configuraciones adicionales:

  • Si su carga de trabajo es tolerante a fallas y puede soportar una posible apropiación de VM, considere usar Spot VM para reducir el costo de sus VM y las GPU conectadas. Para obtener más información, consulte GPU en máquinas virtuales puntuales . Para usar una VM de spot, agregue la opción "provisioningModel": "SPOT a su solicitud. Para las VM de spot, los indicadores de opciones de reinicio automático y mantenimiento del host están deshabilitados.

    "scheduling":
      {
        "provisioningModel": "SPOT"
      }
    
  • Para las máquinas virtuales G2, se admiten las estaciones de trabajo virtuales NVIDIA RTX (vWS). Para especificar una estación de trabajo virtual, agregue la opción guestAccelerators a su solicitud. Reemplace VWS_ACCELERATOR_COUNT con la cantidad de GPU virtuales que necesita.

    "guestAccelerators":
     [
       {
         "acceleratorCount": VWS_ACCELERATOR_COUNT,
         "acceleratorType": "projects/PROJECT_ID/zones/ZONEacceleratorTypes/nvidia-l4-vws"
       }
     ]
    

Cree grupos de máquinas virtuales de uso general N1

Puedes crear un grupo de máquinas virtuales con GPU conectadas mediante la CLI de Google Cloud o REST .

Esta sección describe cómo crear varias máquinas virtuales utilizando los siguientes tipos de GPU:

GPU NVIDIA:

  • NVIDIA T4: nvidia-tesla-t4
  • NVIDIA P4: nvidia-tesla-p4
  • NVIDIA P100: nvidia-tesla-p100
  • NVIDIA V100: nvidia-tesla-v100

Estación de trabajo virtual NVIDIA RTX (vWS) (anteriormente conocida como NVIDIA GRID):

  • Estación de trabajo virtual NVIDIA T4: nvidia-tesla-t4-vws
  • Estación de trabajo virtual NVIDIA P4: nvidia-tesla-p4-vws
  • Estación de trabajo virtual NVIDIA P100: nvidia-tesla-p100-vws

    Para estas estaciones de trabajo virtuales, se agrega automáticamente una licencia de estación de trabajo virtual NVIDIA RTX (vWS) a su máquina virtual.

nube de gcloud

Para crear un grupo de máquinas virtuales, usa el comando gcloud compute instances bulk create . Para obtener más información sobre los parámetros y cómo utilizar este comando, consulte Crear máquinas virtuales de forma masiva .

Ejemplo

El siguiente ejemplo crea dos máquinas virtuales con GPU conectadas utilizando las siguientes especificaciones:

  • Nombres de máquinas virtuales: my-test-vm-1 , my-test-vm-2
  • Máquinas virtuales creadas en cualquier zona de us-central1 que admita GPU
  • Cada máquina virtual tiene dos GPU T4 conectadas, especificadas mediante los indicadores de tipo de acelerador y recuento de aceleradores.
  • Cada VM tiene controladores de GPU instalados
  • Cada VM utiliza la imagen de VM de aprendizaje profundo pytorch-latest-gpu-v20211028-debian-10
gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --count=2 \
    --region=us-central1 \
    --machine-type=n1-standard-2 \
    --accelerator type=nvidia-tesla-t4,count=2 \
    --boot-disk-size=200 \
    --metadata="install-nvidia-driver=True" \
    --scopes="https://www.googleapis.com/auth/cloud-platform" \
    --image=pytorch-latest-gpu-v20211028-debian-10 \
    --image-project=deeplearning-platform-release \
    --on-host-maintenance=TERMINATE --restart-on-failure

Si tiene éxito, el resultado es similar al siguiente:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

DESCANSAR

Utilice el método instances.bulkInsert con los parámetros necesarios para crear varias máquinas virtuales en una zona. Para obtener más información sobre los parámetros y cómo utilizar este comando, consulte Crear máquinas virtuales de forma masiva .

Ejemplo

El siguiente ejemplo crea dos máquinas virtuales con GPU conectadas utilizando las siguientes especificaciones:

  • Nombres de máquinas virtuales: my-test-vm-1 , my-test-vm-2
  • Máquinas virtuales creadas en cualquier zona de us-central1 que admita GPU
  • Cada máquina virtual tiene dos GPU T4 conectadas, especificadas mediante los indicadores de tipo de acelerador y recuento de aceleradores.
  • Cada VM tiene controladores de GPU instalados
  • Cada VM utiliza la imagen de VM de aprendizaje profundo pytorch-latest-gpu-v20211028-debian-10

Reemplace PROJECT_ID con su ID de proyecto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/us-central1/instances/bulkInsert

{
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":"n1-standard-2",
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":"projects/deeplearning-platform-release/global/images/pytorch-latest-gpu-v20211028-debian-10"
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-t4"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        "automaticRestart":true
      },
      "metadata":{
        "items":[
          {
            "key":"install-nvidia-driver",
            "value":"True"
          }
        ]
      }
  }
 }

¿Qué sigue?