Crear VMs de GPU de forma masiva


Puedes 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, obtienes una validación por adelantado en la que la solicitud falla rápido si no es factible. Además, si usas la marca de región, la API de creación masiva elige de forma automática la zona que tiene la capacidad de completar la solicitud.

Para obtener más información sobre la creación masiva, consulta Acerca de la creación masiva de VMs. Para obtener más información sobre cómo crear VMs con GPU conectadas, consulta Descripción general para crear una instancia con GPU conectadas.

Antes de comenzar

  • Para revisar las limitaciones y los pasos de requisitos previos adicionales para crear instancias con GPUs conectadas, como seleccionar una imagen de SO y verificar la cuota de GPU, consulta Descripción general para crear una instancia con GPUs conectadas.
  • Para revisar las limitaciones de la creación masiva, consulta Acerca de la creación masiva de VMs.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para crear VMs, pídele a tu administrador que te otorgue el rol de IAM Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear VM. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear VM:

  • compute.instances.create en el proyecto
  • Si deseas usar una imagen personalizada para crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
  • Para usar una instantánea a fin de crear la VM, haz lo siguiente: compute.snapshots.useReadOnly en la instantánea
  • Si quieres usar una plantilla de instancias para crear la VM, sigue estos pasos: compute.instanceTemplates.useReadOnly en la plantilla de instancias
  • Para asignar una red heredada a la VM, ejecuta compute.networks.use en el proyecto.
  • Si deseas 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, ejecuta compute.networks.useExternalIp en el proyecto
  • A fin de especificar una subred para tu 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 de VPC, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida.
  • Para configurar los metadatos de la instancia de VM para la VM, compute.instances.setMetadata en el proyecto.
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setTags en la VM
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setLabels en la VM
  • A fin de configurar una cuenta de servicio para que la VM use: compute.instances.setServiceAccount en la VM
  • Crear un disco nuevo para la VM: compute.disks.create en el proyecto
  • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, usa compute.disks.use en el disco.
  • Para conectar un disco existente en modo de solo lectura, haz lo siguiente: compute.disks.useReadOnly en el disco

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Descripción general

Cuando creas VMs con GPU conectadas mediante el método de creación masiva, puedes elegir crear VMs 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 VMs en cualquier zona dentro de la región que admite las GPU.

Tipos de máquina

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

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

Crea grupos de VMs A3, A2 y G2

En esta sección, se explica que puedes crear instancias masivas para las series de máquinas A3 High, A3 Mega, A3 Edge, A2 y G2 con Google Cloud CLI o REST.

gcloud

Para crear un grupo de VMs, usa el comando gcloud compute instances bulk create. Para obtener más información sobre los parámetros y cómo usar este comando, consulta Crea VMs de forma masiva.

Las siguientes marcas opcionales se muestran en el comando de muestra:

  • --provisioning-model=SPOT es una marca opcional que configura tus VMs como VMs Spot. Si tu carga de trabajo es tolerante a errores y puede admitir una posible interrupciónde la VM, considera usar VMs Spot para reducir el costo de tus VMs y las GPUs adjuntas. Para obtener más información, consulta GPU en VMs Spot. En el caso de las VMs Spot, las marcas de las opciones de reinicio automático y mantenimiento del host están inhabilitadas.

  • La marca --accelerator para especificar una estación de trabajo virtual. Las estaciones de trabajo virtuales (vWS) NVIDIA RTX solo son compatibles con las VMs de G2.

Ejemplo

En este ejemplo, se crean dos VMs que tienen GPUs 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]

Reemplaza lo siguiente:

  • REGION: la región para las VMs. Esta región debe ser compatible con el modelo de GPU seleccionado.
  • MACHINE_TYPE: el tipo de máquina que seleccionaste. Elige una de las siguientes opciones:

    • Un tipo de máquina A3
    • Un tipo de máquina A2
    • Un tipo de máquina G2. Los tipos de máquinas G2 también admiten memoria personalizada. La memoria debe ser un múltiplo de 1,024 MB y debe estar dentro del rango de memoria admitido. Por ejemplo, para crear una VM con 4 CPU virtuales y 19 GB de memoria, especifica --machine-type=g2-custom-4-19456.
  • IMAGE: una imagen del sistema operativo que admite GPU.

    Si deseas usar la imagen más reciente en una familia de imágenes, reemplaza la marca --image por la marca --image-family y configura su valor en una familia de imágenes que admita GPU. Por ejemplo: --image-family=rocky-linux-8-optimized-gcp

    También puedes especificar una imagen personalizada o una Deep Learning VM Image.

  • IMAGE_PROJECT: el proyecto de imagen de Compute Engine al que pertenece la imagen de SO. Si usas una imagen personalizada o una Deep Learning VM Image, especifica el proyecto al que pertenecen esas imágenes.

  • VWS_ACCELERATOR_COUNT es la cantidad de GPUs virtuales que necesitas.

Si se ejecuta de forma correcta, 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.]

REST

Usa el método instances.bulkInsert con los parámetros necesarios para crear varias VM en una región. Para obtener más información sobre los parámetros y cómo usar este comando, consulta Crea VMs de forma masiva.

Ejemplo

En este ejemplo, se crean dos VMs que tienen GPUs conectadas mediante las siguientes especificaciones:

  • Nombres de las VM: my-test-vm-1, my-test-vm-2
  • Cada VM tiene dos GPU conectadas, especificadas mediante el tipo de máquina optimizado para aceleradores adecuado

    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]
      }
    }
    }
    

Reemplaza lo siguiente:

  • PROJECT_ID: El ID de tu proyecto
  • REGION: la región para las VMs. Esta región debe ser compatible con el modelo de GPU seleccionado.
  • MACHINE_TYPE: el tipo de máquina que seleccionaste. Elige una de las siguientes opciones:

    • Un tipo de máquina A2
    • Un tipo de máquina G2. Los tipos de máquinas G2 también admiten memoria personalizada. La memoria debe ser un múltiplo de 1,024 MB y debe estar dentro del rango de memoria admitido. Por ejemplo, para crear una VM con 4 CPU virtuales y 19 GB de memoria, especifica --machine-type=g2-custom-4-19456.
  • SOURCE_IMAGE_URI: el URI de la imagen o familia de imágenes específicas que deseas usar.

    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 de SO no obsoleta más reciente de esa familia. Para obtener más información sobre el balanceo de cargas, consulta Prácticas recomendadas para las familias de imágenes.

Configuración adicional:

  • Si tu carga de trabajo es tolerante a errores y puede admitir una posible interrupciónde la VM, considera usar VMs Spot para reducir el costo de tus VMs y las GPUs adjuntas. Para obtener más información, consulta GPU en VMs Spot. Para usar una VM Spot, agrega la opción "provisioningModel": "SPOT a tu solicitud. En el caso de las VMs Spot, las marcas de las opciones de reinicio automático y mantenimiento del host están inhabilitadas.

    "scheduling":
      {
        "provisioningModel": "SPOT"
      }
    
  • Para las VM G2, se admiten estaciones de trabajo virtuales (vWS) de NVIDIA RTX. Para especificar una estación de trabajo virtual, agrega la opción guestAccelerators a tu solicitud. Reemplaza VWS_ACCELERATOR_COUNT por la cantidad de GPU virtuales que necesitas.

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

Crear grupos de VMs de uso general N1

Puedes crear un grupo de VMs con GPU conectadas mediante Google Cloud CLI o REST.

En esta sección, se describe cómo crear varias VM con los siguientes tipos de GPU:

GPU de NVIDIA:

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

NVIDIA RTX Virtual Workstation (vWS) (antes 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 de forma automática una licencia de NVIDIA RTX Virtual Workstation (vWS) a tu VM.

gcloud

Para crear un grupo de VMs, usa el comando gcloud compute instances bulk create. Para obtener más información sobre los parámetros y cómo usar este comando, consulta Crea VMs de forma masiva.

Ejemplo

En el siguiente ejemplo, se crean dos VMs con GPU conectadas mediante las siguientes especificaciones:

  • Nombres de las VM: my-test-vm-1, my-test-vm-2
  • VM creadas en cualquier zona de us-central1 que admita GPU
  • Cada VM tiene dos GPU T4 conectadas, especificadas mediante el tipo de acelerador y las marcas de recuento de aceleradores.
  • Cada VM tiene instalados controladores de GPU
  • Cada VM usa Deep Learning VM Image 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 se ejecuta de forma correcta, 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.]

REST

Usa el método instances.bulkInsert con los parámetros necesarios para crear varias VM en una región. Para obtener más información sobre los parámetros y cómo usar este comando, consulta Crea VMs de forma masiva.

Ejemplo

En el siguiente ejemplo, se crean dos VMs con GPU conectadas mediante las siguientes especificaciones:

  • Nombres de las VM: my-test-vm-1, my-test-vm-2
  • VM creadas en cualquier zona de us-central1 que admita GPU
  • Cada VM tiene dos GPU T4 conectadas, especificadas mediante el tipo de acelerador y las marcas de recuento de aceleradores.
  • Cada VM tiene instalados controladores de GPU
  • Cada VM usa Deep Learning VM Image pytorch-latest-gpu-v20211028-debian-10

Reemplaza PROJECT_ID con el ID del 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"
          }
        ]
      }
  }
 }

Próximos pasos