Crear clúster

Si te interesan los clústeres de entrenamiento de Vertex AI, ponte en contacto con tu representante de ventas para obtener acceso.

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

Definir 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 organización prohíbe las direcciones IP públicas en las instancias de proceso, implementa el clúster de entrenamiento con el parámetro enable_public_ips: false y utiliza Cloud NAT para la salida a 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 plano de tu clúster, especificando todo, desde su nombre y configuración de red hasta el hardware de sus nodos de inicio de sesión y de trabajo.

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

Cada ejemplo va seguido de una descripción detallada de los parámetros clave que se utilizan 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 directorio /home del clúster, adecuada para uso general y para almacenar datos de 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 adaptarlo a tus necesidades.

Para ver una lista de parámetros, consulte 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",
        "provisioning_model": "RESERVATION",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/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 alto rendimiento a grandes conjuntos de datos.

Para ver una lista de parámetros, consulte 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 añadir una secuencia de comandos personalizada a un grupo de nodos. Esta secuencia de comandos se ejecuta en todos los nodos de ese grupo al inicio. Para configurar esta opción, añade los campos correspondientes a la definición del grupo de nodos, además de los ajustes generales. Para ver una lista de 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",
        "provisioning_model": "RESERVATION_NAME",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "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 plano de tu clúster, especificando todo, desde su nombre y configuración de red hasta el hardware de sus nodos de inicio de sesión y de trabajo.

Para ver una lista de parámetros, consulte 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 preciso sobre el comportamiento de la programación de trabajos, como definir pesos de prioridad multifactor, configurar la apropiación de trabajos y ejecutar secuencias de comandos de prólogo y epílogo para la configuración y la limpieza automatizadas de trabajos.

Para ver una lista de parámetros, consulte 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 hayas definido el clúster en un archivo JSON, usa los siguientes comandos de la API REST para implementar y gestionar el clúster. En los ejemplos se usa un alias gcurl, que es un acceso directo autenticado y práctico para interactuar con los endpoints 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, por último, la eliminación del clúster.

Autenticación

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

Crear un archivo JSON

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

Desplegar el clúster

Una vez que hayas creado el archivo de configuración JSON, podrás desplegar el clúster con la API REST.

Establece variables de entorno:

Antes de ejecutar el comando, define las siguientes variables de entorno. De esta forma, el comando de la API será más claro y fácil de gestionar.

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

Ejecuta el comando create

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 definir para crear el endpoint de la API y los parámetros de consulta.

  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 se inicie la implementación, se generará un ID de operación. Asegúrate de copiar este ID. Lo 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..."
  }
    

Validar la implementación del clúster

Para monitorizar el progreso de la implementación, usa el ID de operación que se te proporcionó cuando implementaste el clúster. Por ejemplo, 2995239222190800896 es el ID de operación del ejemplo citado anteriormente.

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

En resumen

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

Referencia de parámetros

En la siguiente lista se describen todos los parámetros utilizados en los ejemplos de configuración. Los parámetros se organizan en grupos lógicos en función del recurso que configuran.

Ajustes generales y de red

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

Configuración del grupo de nodos

Los siguientes parámetros se usan para definir los grupos de nodos de inicio de sesión y de trabajo.

Configuración habitual de grupos de nodos

  • ID: identificador único del grupo de nodos en el clúster (por ejemplo, "login", "a4" o "cpu").
  • MACHINE_TYPE: el tipo de máquina del nodo de 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: En el caso del grupo de nodos de inicio de sesión, el valor de MAX_NODE_COUNT debe ser el mismo que el de MIN_NODE_COUNT.
  • ENABLE_PUBLIC_IPS: valor booleano (true o false) para determinar si el nodo de inicio de sesión tiene una dirección IP pública.
  • BOOT_DISK_TYPE: el tipo de disco de arranque del nodo de inicio de sesión (por ejemplo, pd-standard o pd-ssd).
  • BOOT_DISK_SIZE_GB: tamaño del disco de arranque en GB del nodo de inicio de sesión.

Configuración específica de los trabajadores

  • ACCELERATOR_TYPE: el acelerador de GPU correspondiente que se va a conectar a los nodos de trabajador. Los valores posibles son:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: número de aceleradores que se adjuntarán a cada nodo de trabajador.
  • PROVISIONING_MODEL: el modelo de aprovisionamiento del nodo de trabajo (por ejemplo, ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • RESERVATION_AFFINITY_TYPE: la afinidad de reserva del grupo de nodos (por ejemplo, SPECIFIC_RESERVATION).
  • RESERVATION_NAME: nombre de la reserva que se va a usar en el grupo de nodos.

Configuración del orquestador y del almacenamiento

Estos campos se definen en el bloque orchestrator_spec.slurm_spec del archivo JSON.

Configuración principal de Slurm y almacenamiento

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

Configuración avanzada de Slurm

  • prolog_bash_scripts: lista de cadenas, donde cada cadena contiene el contenido completo de una secuencia de comandos Bash que se ejecutará antes de que empiece un trabajo.
  • epilog_bash_scripts: lista de cadenas, donde 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 contabilidad al uso del almacenamiento.
  • PRIORITY_TYPE: algoritmo de prioridad de programación que se va a usar (por ejemplo, priority/multifactor).
  • priority_weight_*: 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 y priority_weight_fairshare).
  • PREEMPT_TYPE: el complemento de preferencia que se va a usar (por ejemplo, preempt/partition_prio).
  • PREEMPT_MODE: el modo del complemento de preferencia (por ejemplo, REQUEUE).
  • PREEMPT_EXEMPT_TIME: el tiempo que transcurre después de que se inicia un trabajo durante el cual no se puede interrumpir.

Siguientes pasos

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