Crear clúster

Si te interesan los clústeres de entrenamiento de Vertex AI, comunícate con tu representante de ventas para obtener acceso.

En esta página, se proporciona el método directo basado en la API para crear y administrar un clúster de entrenamiento. Aprenderás a definir la configuración completa de tu clúster, incluidos los nodos de acceso, las particiones de GPU de alto rendimiento, como la A4, y la configuración del orquestador de Slurm, todo en un archivo JSON. También se incluye cómo usar curl y las llamadas a la API de REST para implementar esta configuración, crear el clúster y administrar su ciclo de vida con las operaciones GET, LIST, UPDATE y DELETE.

Define la configuración del clúster

Crea un archivo JSON para definir la configuración completa de tu clúster de entrenamiento.

Si tu política de la organización prohíbe las direcciones IP públicas en las instancias de procesamiento, implementa el clúster de entrenamiento con el parámetro enable_public_ips: false y utiliza Cloud NAT para el tráfico de salida de Internet.

El primer paso para aprovisionar un clúster de entrenamiento es definir su configuración completa en un archivo JSON. Este archivo actúa como el plano de tu clúster, ya que especifica todo, desde su nombre y configuración de red hasta el hardware de sus nodos de acceso y trabajadores.

En la siguiente sección, se proporcionan varios archivos de configuración JSON completos que sirven como plantillas prácticas para una variedad de casos de uso comunes. Consulta esta lista para encontrar el ejemplo que mejor se adapte a tus necesidades y úsalo como punto de partida.

Cada ejemplo está seguido de una descripción detallada de los parámetros clave que se usan en esa configuración específica.

Solo GPU con Filestore

Esta es la configuración estándar. Proporciona una instancia de Filestore que actúa como el directorio /home del clúster, apta para el uso general y el almacenamiento de datos del usuario.

En el siguiente ejemplo, se muestra el contenido de gpu-filestore.json. Esta especificación crea un clúster con una partición de GPU. Puedes usarlo como plantilla y modificar valores como machineType o nodeCount para que se adapten a tus necesidades.

Para obtener una lista de parámetros, consulta la referencia de parámetros.

 {
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      }
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

GPU con Filestore y Managed Lustre

Esta configuración avanzada incluye la instancia estándar de Filestore, además de un sistema de archivos Lustre de alto rendimiento. Elige esta opción si tus trabajos de entrenamiento requieren acceso de alta capacidad a grandes conjuntos de datos.

Para obtener una lista de parámetros, consulta la referencia de parámetros.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/asia-sREGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservation_affinity_type": RESERVATION_AFFINITY_TYPE,
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
  

GPU con secuencia de comandos de inicio

En este ejemplo, se muestra cómo agregar una secuencia de comandos personalizada a un grupo de nodos. Esta secuencia de comandos se ejecuta en todos los nodos de ese grupo durante el inicio. Para configurar esto, agrega los campos pertinentes a la definición de tu grupo de nodos, además de la configuración general. Para obtener una lista de los parámetros y sus descripciones, consulta la referencia de parámetros.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "PROVISIONING_MODEL",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

Clúster solo de CPU

Para aprovisionar un entorno de clúster de entrenamiento, primero debes definir su configuración completa en un archivo JSON. Este archivo actúa como el plano de tu clúster, ya que especifica todo, desde su nombre y la configuración de red hasta el hardware de sus nodos de acceso y de trabajador.

Para obtener una lista de parámetros, consulta la referencia de parámetros.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8",
      }
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

CPU con configuración avanzada de Slurm

En este ejemplo, se muestra cómo personalizar el orquestador de Slurm con parámetros avanzados. Usa esta plantilla si necesitas un control detallado sobre el comportamiento de la programación de trabajos, como establecer pesos de prioridad multifactoriales, configurar la preferencia de trabajos y ejecutar secuencias de comandos de prólogo y epílogo para la configuración y limpieza automatizadas de trabajos.

Para obtener una lista de parámetros, consulta la referencia de parámetros.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

Una vez que definas tu clúster en un archivo JSON, usa los siguientes comandos de la API de REST para implementarlo y administrarlo. En los ejemplos, se usa un alias de gcurl, que es un acceso directo autenticado y conveniente para interactuar con los extremos de la API. Estos comandos abarcan todo el ciclo de vida, desde la implementación inicial del clúster hasta la actualización, la obtención del estado, la enumeración de todos los clústeres y, finalmente, la eliminación del clúster.

Autenticación

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'

Crea un archivo JSON

Crea un archivo JSON (por ejemplo, @cpu-cluster.json) para especificar la configuración de tu clúster de entrenamiento del modelo.

Implementa el clúster

Una vez que hayas creado el archivo de configuración JSON, puedes implementar el clúster con la API de REST.

Configura las variables de entorno

Antes de ejecutar el comando, establece las siguientes variables de entorno. Esto hace que el comando de la API sea más limpio y fácil de administrar.

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud en el que se creará el clúster.
  • REGION: Es la región Google Cloud del clúster y sus recursos.
  • ZONE: Es la zona Google Cloud en la que se aprovisionarán los recursos del clúster.
  • CLUSTER_ID: Es un identificador único para tu clúster de entrenamiento, que también se usa como prefijo para nombrar los recursos relacionados.

Ejecuta el comando de creación

Ahora, ejecuta el siguiente comando de gcurl. Usa el archivo JSON (en este ejemplo, cpu-cluster.json) como cuerpo de la solicitud y las variables de entorno que acabas de configurar para construir el extremo de API y los parámetros de búsqueda.

  gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
    

Una vez que comience la implementación, se generará un ID de operación. Asegúrate de copiar este ID. La necesitarás para validar tu clúster en el siguiente paso.

  gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training
  {
      "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896",
      "metadata": {
      "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata",
      "genericMetadata": {
        "createTime": "2025-10-24T14:16:59.233332Z",
        "updateTime": "2025-10-24T14:16:59.233332Z"
      },
      "progressMessage": "Create Model Development Cluster request received, provisioning..."
  }
    

Valida la implementación del clúster

Realiza un seguimiento del progreso de la implementación con el ID de operación que se proporcionó cuando implementaste el clúster. Por ejemplo, 2995239222190800896 es el ID de operación en el ejemplo citado anteriormente.

    gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

En resumen

Cuando envías la configuración del clúster con el comando POST de gcurl, se inicia el aprovisionamiento del clúster, que es una operación asíncrona de larga duración. La API devuelve de inmediato una respuesta que contiene un Operation ID. Es fundamental que guardes este ID, ya que lo usarás en los siguientes pasos para supervisar el progreso de la implementación, verificar que el clúster se haya creado correctamente y administrar su ciclo de vida.

Referencia del parámetro

En la siguiente lista, se describen todos los parámetros que se usan en los ejemplos de configuración. Los parámetros se organizan en grupos lógicos según el recurso que configuran.

Configuración general y de red

  • DISPLAY_NAME: Es un nombre único para tu clúster de entrenamiento. La cadena solo puede contener caracteres alfanuméricos en minúscula, debe comenzar con una letra y está limitada a 10 caracteres.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • REGION: Es la Google Cloud región en la que se ubicarán el clúster y sus recursos.
  • NETWORK: Es la red de nube privada virtual que se usará para los recursos del clúster.
  • ZONE: Es la zona Google Cloud del clúster y sus recursos.
  • SUBNETWORK: Es la subred que se usará para los recursos del clúster.

Configuración de grupos de nodos

Los siguientes parámetros se usan para definir los grupos de nodos tanto para los nodos de acceso como para los nodos trabajadores.

Configuración común del grupo de nodos

  • ID: Es un identificador único para el grupo de nodos dentro del clúster (por ejemplo, “login”, “a4”, “cpu”).
  • PROVISIONING_MODEL: Es el modelo de aprovisionamiento del nodo trabajador (por ejemplo, ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • MACHINE_TYPE: Es el tipo de máquina del nodo trabajador. Los valores admitidos son a3-megagpu-8g, a3-ultragpu-8g y a4-highgpu-8g.
  • MIN_NODE_COUNT: El MIN_NODE_COUNT debe ser igual que el MAX_NODE_COUNT.
  • MAX_NODE_COUNT: Para el grupo de nodos de acceso, el MAX_NODE_COUNT debe ser igual al MIN_NODE_COUNT.
  • ENABLE_PUBLIC_IPS: Es un valor booleano (true o false) para determinar si el nodo de acceso tiene una dirección IP pública.
  • BOOT_DISK_TYPE: Es el tipo de disco de arranque para el nodo de acceso (por ejemplo, pd-standard, pd-ssd).
  • BOOT_DISK_SIZE_GB: Es el tamaño del disco de arranque en GB para el nodo de acceso.

Configuración específica del trabajador

  • ACCELERATOR_TYPE: Es el acelerador de GPU correspondiente que se debe conectar a los nodos trabajadores. Los valores admitidos son los siguientes:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: Es la cantidad de aceleradores que se deben conectar a cada nodo trabajador.
  • RESERVATION_AFFINITY_TYPE: Es la afinidad de reserva para el grupo de nodos (por ejemplo, SPECIFIC_RESERVATION).
  • RESERVATION_NAME: Es el nombre de la reserva que se usará para el grupo de nodos.

Configuración del organizador y el almacenamiento

Estos campos se definen dentro del bloque orchestrator_spec.slurm_spec del archivo JSON.

Configuración principal de Slurm y Storage

  • FILESTORE (corresponde a home_directory_storage): Es el nombre completo del recurso de la instancia de Filestore que se debe activar como el directorio /home.
  • LUSTRE (corresponde a lustres dentro de un objeto node_pools): Es una lista de instancias de Lustre administradas preexistentes para activar en los nodos del clúster para el acceso a archivos de alto rendimiento.
  • LOGIN_NODE_POOL_ID (corresponde a login_node_pool_id): Es el ID del grupo de nodos que se debe usar para los nodos de acceso.
  • partitions: Es una lista de objetos de partición, en la que cada objeto requiere un id y una lista de node_pool_ids.

Configuración avanzada de Slurm

  • prolog_bash_scripts: Es una lista de cadenas, en la que cada cadena contiene el contenido completo de una secuencia de comandos de Bash que se ejecutará antes de que comience un trabajo.
  • epilog_bash_scripts: Es una lista de cadenas, en la que cada cadena contiene el contenido completo de una secuencia de comandos de Bash que se ejecutará después de que se complete un trabajo.
  • ACCOUNTING_STORAGE_ENFORCE: Aplica límites de facturación para el uso del almacenamiento.
  • PRIORITY_TYPE: Es el algoritmo de prioridad de programación que se usará (por ejemplo, priority/multifactor).
  • priority_weight_*: Es un conjunto de valores enteros que asignan peso a diferentes factores en el cálculo de la prioridad de programación (por ejemplo, priority_weight_age, priority_weight_fairshare).
  • PREEMPT_TYPE: Es el complemento de expulsión previa que se usará (por ejemplo, preempt/partition_prio).
  • PREEMPT_MODE: Es el modo del complemento de expulsión preventiva (por ejemplo, REQUEUE).
  • PREEMPT_EXEMPT_TIME: Es el tiempo después de que comienza un trabajo durante el cual no se puede interrumpir.

¿Qué sigue?

Usa tu clúster de entrenamiento persistente activo para ejecutar tus cargas de trabajo de aprendizaje automático.