Criar cluster

Se tiver interesse em clusters de preparação do Vertex AI, contacte o seu representante de vendas para aceder.

Esta página fornece o método direto baseado em API para criar e gerir um cluster de preparação. Vai saber como definir a configuração completa do cluster, incluindo nós de início de sessão, partições de GPU de alto desempenho, como a A4, e definições do orquestrador Slurm, num ficheiro JSON. Também está incluído como usar o curl e as chamadas API REST para implementar esta configuração, criar o cluster e gerir o respetivo ciclo de vida com as operações GET, LIST, UPDATE e DELETE.

Defina a configuração do cluster

Crie um ficheiro JSON para definir a configuração completa do seu cluster de preparação.

Se a sua política organizacional proibir endereços IP públicos em instâncias de computação, implemente o cluster de preparação com o parâmetro enable_public_ips: false e use o Cloud NAT para a saída da Internet.

O primeiro passo no aprovisionamento de um cluster de preparação é definir a respetiva configuração completa num ficheiro JSON. Este ficheiro funciona como o projeto do cluster, especificando tudo, desde o nome e as definições de rede ao hardware para os respetivos nós de início de sessão e de trabalho.

A secção seguinte apresenta vários ficheiros de configuração JSON completos que servem como modelos práticos para uma variedade de exemplos de utilização comuns. Consulte esta lista para encontrar o exemplo que melhor se adequa às suas necessidades e usá-lo como ponto de partida.

Cada exemplo é seguido de uma descrição detalhada dos parâmetros principais usados nessa configuração específica.

GPU apenas com o Filestore

Esta é a configuração padrão. Fornece uma instância do Filestore que serve como o diretório /home para o cluster, adequado para utilização geral e armazenamento de dados do utilizador.

O exemplo seguinte mostra o conteúdo de gpu-filestore.json. Esta especificação cria um cluster com uma partição de GPU. Pode usar isto como modelo e modificar valores como machineType ou nodeCount de acordo com as suas necessidades.

Para ver uma lista de parâmetros, consulte a referência 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 com Filestore e Managed Lustre

Esta configuração avançada inclui a instância padrão do Filestore, além de um sistema de ficheiros Lustre de elevado desempenho. Escolha esta opção se as suas tarefas de preparação requererem acesso de elevado débito a grandes conjuntos de dados.

Para ver uma lista de parâmetros, consulte a referência 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 com script de arranque

Este exemplo demonstra como adicionar um script personalizado a um conjunto de nós. Este script é executado em todos os nós nesse conjunto no arranque. Para configurar esta opção, adicione os campos relevantes à definição do conjunto de nós, além das definições gerais. Para ver uma lista de parâmetros e respetivas descrições, consulte a referência 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"
    }
  }
}
}

Cluster apenas com CPU

Para aprovisionar um ambiente de cluster de preparação, primeiro tem de definir a respetiva configuração completa num ficheiro JSON. Este ficheiro funciona como o projeto do seu cluster, especificando tudo, desde o nome e as definições de rede ao hardware para os respetivos nós de início de sessão e de trabalho.

Para ver uma lista de parâmetros, consulte a referência 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 com configuração avançada do Slurm

Este exemplo demonstra como personalizar o orquestrador Slurm com parâmetros avançados. Use este modelo se precisar de um controlo detalhado sobre o comportamento do agendamento de tarefas, como definir ponderações de prioridade multifatoriais, configurar a preempção de tarefas e executar scripts de prólogo e epílogo para a configuração e a limpeza automatizadas de tarefas.

Para ver uma lista de parâmetros, consulte a referência 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"
    }
  }
}

Depois de definir o cluster num ficheiro JSON, use os seguintes comandos da API REST para implementar e gerir o cluster. Os exemplos usam um alias gcurl, que é um atalho autenticado conveniente para interagir com os pontos finais da API. Estes comandos abrangem o ciclo de vida completo, desde a implementação inicial do cluster à atualização de um cluster que obtém o respetivo estado, a listagem de todos os clusters e, por último, a eliminação do cluster.

Autenticação

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

Crie um ficheiro JSON

Crie um ficheiro JSON (por exemplo, @cpu-cluster.json) para especificar a configuração do cluster de preparação de modelos.

Implemente o cluster

Depois de criar o ficheiro de configuração JSON, pode implementar o cluster através da API REST.

Defina variáveis de ambiente

Antes de executar o comando, defina as seguintes variáveis de ambiente. Isto torna o comando da API mais simples e fácil de gerir.

  • PROJECT_ID: O ID do projeto onde o cluster vai ser criado. Google Cloud
  • REGION: A Google Cloud região do cluster e os respetivos recursos.
  • ZONE: a Google Cloud zona onde os recursos do cluster vão ser aprovisionados.
  • CLUSTER_ID: um identificador exclusivo para o seu cluster de preparação, que também é usado como prefixo para a nomenclatura de recursos relacionados.

Execute o comando de criação

Agora, execute o seguinte comando gcurl. Usa o ficheiro JSON (neste exemplo, cpu-cluster.json) como o corpo do pedido e as variáveis de ambiente que acabou de definir para construir o ponto final da API e os 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
    

Assim que a implementação começar, é gerado um ID da operação. Certifique-se de que copia este ID. Precisa dele para validar o cluster no passo seguinte.

  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..."
  }
    

Valide a implementação do cluster

Acompanhe o progresso da implementação através do ID da operação fornecido quando implementou o cluster. Por exemplo, 2995239222190800896 é o ID da operação no exemplo citado anteriormente.

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

Em resumo

O envio da configuração do cluster com o comando gcurl POST inicia o aprovisionamento do cluster, que é uma operação assíncrona de longa duração. A API devolve imediatamente uma resposta que contém um Operation ID. É fundamental guardar este ID, uma vez que o vai usar nos passos seguintes para monitorizar o progresso da implementação, verificar se o cluster foi criado com êxito e gerir o respetivo ciclo de vida.

Referência de parâmetros

A lista seguinte descreve todos os parâmetros usados nos exemplos de configuração. Os parâmetros estão organizados em grupos lógicos com base no recurso que configuram.

Definições gerais e de rede

  • DISPLAY_NAME: um nome exclusivo para o seu cluster de preparação. A string só pode conter carateres alfanuméricos em minúsculas, tem de começar por uma letra e está limitada a 10 carateres.
  • PROJECT_ID: o ID do seu Google Cloud projeto.
  • REGION: A região Google Cloud onde o cluster e os respetivos recursos vão estar localizados.
  • NETWORK: A rede de nuvem privada virtual a usar para os recursos do cluster.
  • ZONE: a Google Cloud zona para o cluster e os respetivos recursos.
  • SUBNETWORK: a sub-rede a usar para os recursos do cluster.

Configuração do node pool

Os seguintes parâmetros são usados para definir os conjuntos de nós para os nós de início de sessão e de trabalho.

Definições comuns de node pools

  • ID: um identificador exclusivo do node pool no cluster (por exemplo, "login", "a4", "cpu").
  • MACHINE_TYPE: o tipo de máquina do nó trabalhador. Os valores suportados são: a3-megagpu-8g, a3-ultragpu-8g e a4-highgpu-8g.
  • MIN_NODE_COUNT: o valor MIN_NODE_COUNT tem de ser igual ao valor MAX_NODE_COUNT.
  • MAX_NODE_COUNT: para o conjunto de nós de início de sessão, o MAX_NODE_COUNT tem de ser igual ao MIN_NODE_COUNT.
  • ENABLE_PUBLIC_IPS: Um valor booleano (true ou false) para determinar se o nó de início de sessão tem um endereço IP público.
  • BOOT_DISK_TYPE: O tipo de disco de arranque do nó de início de sessão (por exemplo, pd-standard, pd-ssd).
  • BOOT_DISK_SIZE_GB: o tamanho do disco de arranque em GB para o nó de início de sessão.

Definições específicas do trabalhador

  • ACCELERATOR_TYPE: o acelerador de GPU correspondente a associar aos nós trabalhadores. Os valores suportados são:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: o número de aceleradores a associar a cada nó de trabalho.
  • PROVISIONING_MODEL: O modelo de aprovisionamento para o nó de trabalho (por exemplo, ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • RESERVATION_AFFINITY_TYPE: a afinidade de reserva para o conjunto de nós (por exemplo, SPECIFIC_RESERVATION).
  • RESERVATION_NAME: o nome da reserva a usar para o node pool.

Configuração do orquestrador e do armazenamento

Estes campos são definidos no bloco orchestrator_spec.slurm_spec do ficheiro JSON.

Definições principais do Slurm e de armazenamento

  • FILESTORE (corresponde a home_directory_storage): o nome completo do recurso da instância do Filestore a ser montada como o diretório /home.
  • LUSTRE (corresponde a lustres num objeto node_pools ): uma lista de instâncias do Lustre geridas pré-existentes para montar nos nós do cluster para acesso a ficheiros de alto desempenho.
  • LOGIN_NODE_POOL_ID (corresponde a login_node_pool_id): o ID do conjunto de nós que deve ser usado para nós de início de sessão.
  • partitions: uma lista de objetos de partição, em que cada objeto requer um id e uma lista de node_pool_ids.

Definições avançadas do Slurm

  • prolog_bash_scripts: uma lista de strings, em que cada string contém o conteúdo completo de um script Bash a ser executado antes do início de uma tarefa.
  • epilog_bash_scripts: uma lista de strings, em que cada string contém o conteúdo completo de um script Bash a ser executado após a conclusão de uma tarefa.
  • ACCOUNTING_STORAGE_ENFORCE: Aplica limites de contabilidade à utilização do armazenamento.
  • PRIORITY_TYPE: O algoritmo de prioridade de agendamento a usar (por exemplo, priority/multifactor).
  • priority_weight_*: um conjunto de valores inteiros que atribuem peso a diferentes fatores no cálculo da prioridade de agendamento (por exemplo, priority_weight_age, priority_weight_fairshare).
  • PREEMPT_TYPE: o plug-in de antecipação a usar (por exemplo, preempt/partition_prio).
  • PREEMPT_MODE: o modo do plug-in de antecipação (por exemplo, REQUEUE).
  • PREEMPT_EXEMPT_TIME: o tempo após o início de uma tarefa durante o qual não é possível interrompê-la.

O que se segue?

Use o cluster de preparação persistente ativo para executar as suas cargas de trabalho de aprendizagem automática.