Crea cluster

Se ti interessano i cluster di addestramento di Colab Enterprise, contatta il tuo rappresentante di vendita per l'accesso.

Questa pagina fornisce il metodo diretto basato su API per creare e gestire un cluster di addestramento. Scoprirai come definire la configurazione completa del cluster, inclusi i nodi di accesso, le partizioni GPU ad alte prestazioni come A4 e le impostazioni dell'orchestratore Slurm, all'interno di un file JSON. Viene inoltre spiegato come utilizzare le chiamate API REST e curl per eseguire il deployment di questa configurazione, creare il cluster e gestirne il ciclo di vita con le operazioni GET, LIST, UPDATE e DELETE.

Definisci la configurazione del cluster

Crea un file JSON per definire la configurazione completa del cluster di addestramento.

Se la policy dell'organizzazione vieta gli indirizzi IP pubblici sulle istanze di computing, esegui il deployment del cluster di addestramento con il parametro enable_public_ips: false e utilizza Cloud NAT per l'uscita da internet.

Il primo passaggio per il provisioning di un cluster di addestramento è definire la sua configurazione completa in un file JSON. Questo file funge da progetto per il cluster, specificando tutto, dal nome e dalle impostazioni della rete all'hardware per i nodi di accesso e worker.

La sezione seguente fornisce diversi file di configurazione JSON completi che fungono da modelli pratici per una serie di casi d'uso comuni. Consulta questo elenco per trovare l'esempio che corrisponde maggiormente alle tue esigenze e utilizzalo come punto di partenza.

Ogni esempio è seguito da una descrizione dettagliata dei parametri chiave utilizzati nella configurazione specifica.

GPU con solo Filestore

Questa è la configurazione standard. Fornisce un'istanza Filestore che funge da directory /home per il cluster, adatta all'uso generale e all'archiviazione dei dati utente.

L'esempio seguente mostra i contenuti di gpu-filestore.json. Questa specifica crea un cluster con una partizione GPU. Puoi utilizzarla come modello e modificare valori come machineType o nodeCount in base alle tue esigenze.

Per un elenco dei parametri, consulta Riferimento ai parametri.

 {
  "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 e Managed Lustre

Questa configurazione avanzata include l'istanza Filestore standard, oltre a un file system Lustre ad alte prestazioni. Scegli questa opzione se i job di addestramento richiedono un accesso con elevata velocità effettiva a set di dati di grandi dimensioni.

Per un elenco dei parametri, consulta Riferimento ai parametri.

{
  "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 script di avvio

Questo esempio mostra come aggiungere uno script personalizzato a un pool di nodi. Questo script viene eseguito su tutti i nodi del pool all'avvio. Per configurarlo, aggiungi i campi pertinenti alla definizione del pool di nodi , oltre alle impostazioni generali. Per un elenco dei parametri e delle relative descrizioni, consulta Riferimento ai parametri.

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

Cluster solo CPU

Per eseguire il provisioning di un ambiente di cluster di addestramento, devi prima definire la sua configurazione completa in un file JSON. Questo file funge da progetto per il cluster, specificando tutto, dal nome e dalle impostazioni della rete all'hardware per i nodi di accesso e worker.

Per un elenco dei parametri, consulta Riferimento ai parametri.

{
  "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 configurazione Slurm avanzata

Questo esempio mostra come personalizzare l'orchestratore Slurm con parametri avanzati. Utilizza questo modello se hai bisogno di un controllo granulare sul comportamento di pianificazione dei job, ad esempio impostando i pesi di priorità multifattoriale, configurando la sottrazione dei job ed eseguendo script di prologo ed epilogo per la configurazione e la pulizia automatica dei job.

Per un elenco dei parametri, consulta Riferimento ai parametri.

{
  "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 volta definito il cluster in un file JSON, utilizza i seguenti comandi API REST per eseguire il deployment e gestire il cluster. Gli esempi utilizzano un alias gcurl, che è una scorciatoia autenticata e pratica per interagire con gli endpoint API. Questi comandi coprono l'intero ciclo di vita, dal deployment iniziale del cluster all'aggiornamento di un cluster, all'ottenimento del suo stato, all'elenco di tutti i cluster e, infine, all'eliminazione del cluster.

Autenticazione

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

Crea un file JSON

Crea un file JSON (ad esempio, @cpu-cluster.json) per specificare la configurazione del cluster di addestramento dei modelli.

Esegui il deployment del cluster

Dopo aver creato il file di configurazione JSON, puoi eseguire il deployment del cluster utilizzando l'API REST.

Imposta le variabili di ambiente

Prima di eseguire il comando, imposta le seguenti variabili di ambiente. In questo modo, il comando API sarà più pulito e facile da gestire.

  • PROJECT_ID: l'ID progetto in cui verrà creato il cluster. Google Cloud
  • REGION: la Google Cloud regione per il cluster e le relative risorse.
  • ZONE: la Google Cloud zona in cui verrà eseguito il provisioning delle risorse del cluster.
  • CLUSTER_ID: un identificatore univoco per il cluster di addestramento, utilizzato anche come prefisso per la denominazione delle risorse correlate.

Esegui il comando di creazione

Ora esegui il seguente comando gcurl. Utilizza il file JSON (in questo esempio, cpu-cluster.json) come corpo della richiesta e le variabili di ambiente appena impostate per creare l'endpoint API e i parametri di query.

  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 volta avviato il deployment, verrà generato un ID operazione. Assicurati di copiare questo ID. Ti servirà per convalidare il cluster nel passaggio successivo.

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

Convalida il deployment del cluster

Monitora l'avanzamento del deployment utilizzando l'ID operazione fornito quando hai eseguito il deployment del cluster. Ad esempio, 2995239222190800896 è l'ID operazione nell'esempio citato in precedenza.

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

In sintesi

L'invio della configurazione del cluster con il comando gcurl POST avvia il provisioning del cluster, che è un'operazione asincrona a lunga esecuzione. L'API restituisce immediatamente una risposta contenente un Operation ID. È fondamentale salvare questo ID, poiché lo utilizzerai nei passaggi successivi per monitorare l'avanzamento del deployment, verificare che il cluster sia stato creato correttamente e gestirne il ciclo di vita.

Riferimento ai parametri

L'elenco seguente descrive tutti i parametri utilizzati negli esempi di configurazione. I parametri sono organizzati in gruppi logici in base alla risorsa che configurano.

Impostazioni generali e della rete

  • DISPLAY_NAME: un nome univoco per il cluster di addestramento. La stringa può contenere solo caratteri alfanumerici minuscoli, deve iniziare con una lettera ed è limitata a 10 caratteri.
  • PROJECT_ID: l' Google Cloud ID progetto.
  • REGION: la Google Cloud regione in cui si troveranno il cluster e le relative risorse.
  • NETWORK: la rete Virtual Private Cloud da utilizzare per le risorse del cluster.
  • ZONE: la Google Cloud zona per il cluster e le relative risorse.
  • SUBNETWORK: la subnet da utilizzare per le risorse del cluster.

Configurazione del node pool

I seguenti parametri vengono utilizzati per definire i node pool per i nodi di accesso e worker.

Impostazioni comuni del pool di nodi

  • ID: un identificatore univoco per il pool di nodi all'interno del cluster (ad esempio, "login", "a4", "cpu").
  • PROVISIONING_MODEL: il modello di provisioning per il nodo worker (ad esempio, ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • MACHINE_TYPE: il tipo di macchina per il nodo worker. I valori supportati sono a3-megagpu-8g, a3-ultragpu-8g, a4-highgpu-8g.
  • MIN_NODE_COUNT: il valore di MIN_NODE_COUNT deve essere uguale a quello di MAX_NODE_COUNT.
  • MAX_NODE_COUNT: per il pool di nodi del nodo di accesso, il valore di MAX_NODE_COUNT deve essere uguale a quello di MIN_NODE_COUNT.
  • ENABLE_PUBLIC_IPS: un valore booleano (true o false) per determinare se il nodo di accesso ha un indirizzo IP pubblico.
  • BOOT_DISK_TYPE: il tipo di disco di avvio per il nodo di accesso (ad esempio, pd-standard, pd-ssd).
  • BOOT_DISK_SIZE_GB: la dimensione del disco di avvio in GB per il nodo di accesso.

Impostazioni specifiche del worker

  • ACCELERATOR_TYPE: l'acceleratore GPU corrispondente da collegare ai nodi worker. I valori supportati sono:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: il numero di acceleratori da collegare a ogni nodo worker.
  • RESERVATION_AFFINITY_TYPE: l'affinità di prenotazione per il pool di nodi (ad esempio, SPECIFIC_RESERVATION).
  • RESERVATION_NAME: il nome della prenotazione da utilizzare per il pool di nodi.

Configurazione dell'orchestratore e dell'archiviazione

Questi campi sono definiti all'interno del blocco orchestrator_spec.slurm_spec del file JSON.

Impostazioni principali di Slurm e dell'archiviazione

  • FILESTORE (corrisponde a home_directory_storage): il nome completo della risorsa dell'istanza Filestore da montare come directory /home.
  • LUSTRE (corrisponde a lustres all'interno di un oggetto node_pools ): un elenco di istanze Managed Lustre preesistenti da montare sui nodi del cluster per l'accesso ai file ad alte prestazioni.
  • LOGIN_NODE_POOL_ID (corrisponde a login_node_pool_id): l'ID del pool di nodi da utilizzare per i nodi di accesso.
  • partitions: un elenco di oggetti di partizione, in cui ogni oggetto richiede un id e un elenco di node_pool_ids.

Impostazioni avanzate di Slurm

  • prolog_bash_scripts: un elenco di stringhe, in cui ogni stringa contiene l'intero contenuto di uno script Bash da eseguire prima dell'inizio di un job.
  • epilog_bash_scripts: un elenco di stringhe, in cui ogni stringa contiene l'intero contenuto di uno script Bash da eseguire al termine di un job.
  • ACCOUNTING_STORAGE_ENFORCE: applica i limiti di contabilità per l'utilizzo dello spazio di archiviazione.
  • PRIORITY_TYPE: l'algoritmo di priorità di pianificazione da utilizzare (ad esempio, priority/multifactor).
  • priority_weight_*: un insieme di valori interi che assegnano un peso a diversi fattori nel calcolo della priorità di pianificazione (ad esempio, priority_weight_age, priority_weight_fairshare).
  • PREEMPT_TYPE: il plug-in di sottrazione da utilizzare (ad esempio, preempt/partition_prio).
  • PREEMPT_MODE: la modalità per il plug-in di sottrazione (ad esempio, REQUEUE).
  • PREEMPT_EXEMPT_TIME: il tempo dopo l'avvio di un job durante il quale non può essere sottratto.

Passaggi successivi

Utilizza il cluster di addestramento persistente attivo per eseguire i carichi di lavoro di machine learning.