Crea un'istanza ottimizzata per l'AI con A4X

Questo documento descrive i passaggi per creare istanze di macchine virtuali (VM) autonome che utilizzano i tipi di macchina A4X. Per saperne di più su questo tipo di macchina, vedi A4X.

Per scoprire altri modi per creare VM o cluster, vedi Panoramica delle opzioni di deployment.

Limitazioni

Quando crei una VM A4X autonoma, si applicano le seguenti limitazioni:

Prima di iniziare

Prima di creare le VM, se non l'hai ancora fatto, completa i seguenti passaggi:

  1. Scegli un'opzione di consumo: l'opzione di consumo scelta determina come ottenere e utilizzare le risorse GPU.

    Per saperne di più, consulta la sezione Scegliere un'opzione di consumo.

  2. Ottenere capacità: la procedura per ottenere capacità varia a seconda dell'opzione di consumo.

    Per scoprire di più sulla procedura per ottenere la capacità per l'opzione di consumo scelta, consulta Panoramica della capacità.

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

Console

When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

gcloud

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

REST

Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

    Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI 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.

Per saperne di più, consulta Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare VM, chiedi all'amministratore di concederti il ruolo IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) sul progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare VM. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare VM sono necessarie le seguenti autorizzazioni:

  • compute.instances.create sul progetto
  • Per utilizzare un'immagine personalizzata per creare la VM: compute.images.useReadOnly sull'immagine
  • Per utilizzare uno snapshot per creare la VM: compute.snapshots.useReadOnly sullo snapshot
  • Per utilizzare un template di istanza per creare la VM: compute.instanceTemplates.useReadOnly sul template di istanza
  • Per specificare una subnet per la VM: compute.subnetworks.use sul progetto o sulla subnet scelta
  • Per specificare un indirizzo IP statico per la VM: compute.addresses.use sul progetto
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete VPC: compute.subnetworks.useExternalIp sul progetto o sulla subnet scelta
  • Per assegnare una rete legacy alla VM: compute.networks.use sul progetto
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete legacy: compute.networks.useExternalIp sul progetto
  • Per impostare i metadati dell'istanza VM per la VM: compute.instances.setMetadata sul progetto
  • Per impostare i tag per la VM: compute.instances.setTags sulla VM
  • Per impostare le etichette per la VM: compute.instances.setLabels sulla VM
  • Per impostare un service account che la VM possa utilizzare: compute.instances.setServiceAccount sulla VM
  • Per creare un nuovo disco per la VM: compute.disks.create sul progetto
  • Per collegare un disco esistente in modalità di sola lettura o di lettura e scrittura: compute.disks.use sul disco
  • Per collegare un disco esistente in modalità di sola lettura: compute.disks.useReadOnly sul disco

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Elementi di base di A4X

Un cluster A4X è organizzato in una gerarchia di blocchi e sottoblocchi per facilitare prestazioni di rete non bloccanti su larga scala. Comprendere questa topologia è fondamentale quando si riserva la capacità e si eseguono il deployment dei workload.

Istanza A4X
Un'istanza A4X è un singolo tipo di macchina A4X a cui sono collegate 4 GPU.
Dominio o sottoblocco NVLink
Un dominio NVLink, chiamato anche sottoblocco, è l'unità fondamentale della capacità A4X. Un dominio NVLink è costituito da 18 istanze A4X (72 GPU) collegate tramite un sistema NVLink multi-nodo. Crea un dominio NVLink A4X o un sottoblocco applicando una policy di posizionamento compatto che specifica una topologia 1x72.
Blocca
Un blocco A4X è composto da 25 blocchi secondari (domini NVLink), per un totale di 450 istanze A4X (1800 GPU). I sottoblocchi sono allineati alle guide per una scalabilità efficiente. Ogni sottoblocco richiede un criterio di posizionamento compatto. Pertanto, per un singolo blocco A4X, puoi creare 25 policy di posizionamento compatto.

La tabella seguente mostra le opzioni di topologia supportate per le istanze A4X:

Topologia (gpuTopology) Numero di GPU Numero di istanze
1x72 72 18

Panoramica

La creazione di un'istanza con il tipo di macchina A4X include i seguenti passaggi:

  1. Crea reti VPC
  2. Crea una policy di posizionamento compatto
  3. Crea un'istanza

Crea reti VPC

Per configurare la rete per il tipo di macchina A4X, crea tre reti VPC per le seguenti interfacce di rete:

  • 2 reti VPC standard per le interfacce di rete (NIC) gVNIC. Vengono utilizzati per la comunicazione da host a host.
  • Per le NIC CX-7 è necessaria una rete VPC con il profilo di rete RoCE quando crei più sottoblocchi A4X. La rete VPC RoCE deve avere 4 subnet, una per ogni NIC CX-7. Queste NIC utilizzano RDMA su Converged Ethernet (RoCE), fornendo la comunicazione a bassa latenza e ad alta larghezza di banda essenziale per lo scale out a più sottoblocchi A4X. Per un singolo sottoblocco A4X, puoi ignorare questa rete VPC perché all'interno di un singolo sottoblocco, la comunicazione diretta da GPU a GPU è gestita da NVLink multimodale.

Per ulteriori informazioni sulla disposizione del NIC, consulta Controlla la larghezza di banda della rete e la disposizione del NIC.

Crea le reti manualmente seguendo le guide o automaticamente utilizzando lo script fornito.

Guide con istruzioni

Per creare le reti, puoi utilizzare le seguenti istruzioni:

Per queste reti VPC, ti consigliamo di impostare l'unità massima di trasmissione (MTU) su un valore maggiore. Per il tipo di macchina A4X, l'MTU consigliata è di 8896 byte. Per esaminare le impostazioni MTU consigliate per altri tipi di macchine GPU, consulta Impostazioni MTU per i tipi di macchine GPU.

Script

Per creare le reti, segui questi passaggi.

Per queste reti VPC, ti consigliamo di impostare l'unità massima di trasmissione (MTU) su un valore maggiore. Per il tipo di macchina A4X, l'MTU consigliata è di 8896 byte. Per esaminare le impostazioni MTU consigliate per altri tipi di macchine GPU, consulta Impostazioni MTU per i tipi di macchine GPU.

  1. Utilizza il seguente script per creare reti VPC regolari per le gVNIC.

      
        #!/bin/bash
    
        # Create regular VPC networks and subnets for the gVNICs
        for N in $(seq 0 1); do
          gcloud compute networks create GVNIC_NAME_PREFIX-net-$N \
            --subnet-mode=custom \
            --mtu=8896
    
          gcloud compute networks subnets create GVNIC_NAME_PREFIX-sub-$N \
            --network=GVNIC_NAME_PREFIX-net-$N \
            --region=REGION \
            --range=192.168.$N.0/24
    
          gcloud compute firewall-rules create GVNIC_NAME_PREFIX-internal-$N \
            --network=GVNIC_NAME_PREFIX-net-$N \
            --action=ALLOW \
            --rules=tcp:0-65535,udp:0-65535,icmp \
            --source-ranges=192.168.0.0/16
        done
    
        # Create SSH firewall rules
        gcloud compute firewall-rules create GVNIC_NAME_PREFIX-ssh \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=IP_RANGE
    
        # Assumes that an external IP is only created for vNIC 0
        gcloud compute firewall-rules create GVNIC_NAME_PREFIX-allow-ping-net-0 \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=IP_RANGE
    
      
  2. Se hai bisogno di più sottoblocchi A4X, utilizza il seguente script per creare la rete VPC RoCE e le subnet per le quattro NIC CX-7 su ogni istanza A4X.

      
        # List and make sure network profiles exist in the machine type's zone
        gcloud compute network-profiles list --filter "location.name=ZONE"
    
        # Create network for CX-7
        gcloud compute networks create RDMA_NAME_PREFIX-mrdma \
          --network-profile=ZONE-vpc-roce \
          --subnet-mode custom \
          --mtu=8896
    
        # Create subnets
        for N in $(seq 0 3); do
          gcloud compute networks subnets create RDMA_NAME_PREFIX-mrdma-sub-$N \
            --network=RDMA_NAME_PREFIX-mrdma \
            --region=REGION \
            --range=192.168.$((N+2)).0/24 & # offset to avoid overlap with gVNICs
        done
    
      

    Sostituisci quanto segue:

    • GVNIC_NAME_PREFIX: il prefisso del nome personalizzato da utilizzare per le reti VPC e le subnet regolari per le gNIC.
    • RDMA_NAME_PREFIX: il prefisso del nome personalizzato da utilizzare per la rete VPC e le subnet RoCE per le NIC CX-7.
    • ZONE: specifica una zona in cui è disponibile il tipo di macchina che vuoi utilizzare, ad esempio us-central1-a. Per informazioni sulle regioni, consulta la sezione Disponibilità delle GPU per regioni e zone.
    • REGION: la regione in cui vuoi creare le subnet. Questa regione deve corrispondere alla zona specificata. Ad esempio, se la tua zona è us-central1-a, la tua regione è us-central1.
    • IP_RANGE: l'intervallo IP da utilizzare per le regole firewall SSH.
  3. (Facoltativo) Per verificare che le risorse di rete VPC siano state create correttamente, controlla le impostazioni di rete nella console Google Cloud :
    1. Nella console Google Cloud , vai alla pagina Reti VPC.

      Vai a Reti VPC

    2. Cerca nell'elenco le reti che hai creato nel passaggio precedente.
    3. Per visualizzare le subnet, le regole firewall e altre impostazioni di rete, fai clic sul nome della rete.

Crea una policy di posizionamento compatto

Per creare una policy di posizionamento compatto, seleziona una delle seguenti opzioni:

gcloud

Per creare una policy di posizionamento compatto, utilizza il comando gcloud beta compute resource-policies create group-placement:

gcloud beta compute resource-policies create group-placement POLICY_NAME \
    --collocation=collocated \
    --gpu-topology=1x72 \
    --region=REGION

Sostituisci quanto segue:

  • POLICY_NAME: il nome della policy di posizionamento compatto.
  • REGION: la regione in cui vuoi creare la policy di posizionamento compatto. Specifica una regione in cui è disponibile il tipo di macchina che vuoi utilizzare. Per informazioni sulle regioni, vedi Disponibilità delle GPU per regioni e zone.

REST

Per creare una policy di posizionamento compatto, invia una richiesta POST al metodo resourcePolicies.insert beta.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/resourcePolicies
  {
    "name": "POLICY_NAME",
    "groupPlacementPolicy": {
      "collocation": "COLLOCATED",
      "gpuTopology": "1x72"
    }
  }

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • POLICY_NAME: il nome della policy di posizionamento compatto.
  • REGION: la regione in cui vuoi creare la policy di posizionamento compatto. Specifica una regione in cui è disponibile il tipo di macchina che vuoi utilizzare. Per informazioni sulle regioni, vedi Disponibilità delle GPU per regioni e zone.

Crea un'istanza A4X

Per ottenere una topologia GPU di 1x72, crea 18 istanze. Quando crei le istanze, applica la policy di posizionamento compatto che specifica il campo gpuTopology. L'applicazione della policy garantisce che Compute Engine crei tutte le 18 istanze in un unico sottoblocco per utilizzare un dominio NVLink.

Se un sottoblocco non ha capacità per un'istanza, la richiesta di creazione dell'istanza non va a buon fine.

Per creare un'istanza A4X, seleziona una delle seguenti opzioni.

I seguenti comandi impostano anche l'ambito di accesso per le tue istanze. Per semplificare la gestione delle autorizzazioni, Google consiglia di impostare l'ambito di accesso di un'istanza su cloud-platform e poi utilizzare i ruoli IAM per definire i servizi a cui l'istanza può accedere. Per saperne di più, consulta le best practice per gli ambiti.

gcloud

Per creare la VM, utilizza il comando gcloud compute instances create.

gcloud compute instances create VM_NAME  \
    --machine-type=a4x-highgpu-4g \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --zone=ZONE \
    --boot-disk-type=hyperdisk-balanced \
    --boot-disk-size=DISK_SIZE \
    --scopes=cloud-platform \
    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-0,subnet=GVNIC_NAME_PREFIX-sub-0 \
    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-1,subnet=GVNIC_NAME_PREFIX-sub-1,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-0,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-1,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-2,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-3,no-address \
    --reservation-affinity=specific \
    --reservation=RESERVATION \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --resource-policies=POLICY_NAME

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • IMAGE_FAMILY: la famiglia di immagini dell'immagine del sistema operativo che vuoi utilizzare. Per un elenco dei sistemi operativi supportati, consulta Dettagli del sistema operativo.
  • IMAGE_PROJECT: l'ID progetto dell'immagine del sistema operativo.
  • ZONE: la zona in cui è disponibile il tipo di macchina che vuoi utilizzare. Devi utilizzare una zona nella stessa regione della policy di posizionamento compatto. Per informazioni sulle regioni, vedi Disponibilità delle GPU per regioni e zone.
  • DISK_SIZE: le dimensioni del disco di avvio in GB.
  • GVNIC_NAME_PREFIX: il prefisso del nome che hai specificato durante la creazione delle reti VPC e delle subnet standard che utilizzano gVNIC.
  • RDMA_NAME_PREFIX: il prefisso del nome che hai specificato durante la creazione delle reti VPC e delle subnet che utilizzano NIC RDMA.
  • RESERVATION: il nome della prenotazione, di un blocco o di un sottoblocco all'interno di una prenotazione. Per ottenere il nome della prenotazione o i blocchi disponibili, vedi Visualizzare la capacità riservata. In base ai tuoi requisiti per il posizionamento delle istanze, scegli una delle seguenti opzioni:
    • Per creare le istanze su un singolo blocco:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME
          
    • Per creare le istanze su un blocco specifico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
          
    • Per creare le istanze in un sottoblocco specifico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
          
  • TERMINATION_ACTION: indica se Compute Engine arresta (STOP) o elimina (DELETE) la VM al termine del periodo di prenotazione.

  • POLICY_NAME: il nome della policy di posizionamento compatto.

REST

Per creare la VM, invia una richiesta POST al metodo instances.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "projects/PROJECT_ID/zones/ZONE/machineTypes/a4x-highgpu-4g",
  "name": "VM_NAME",
  "disks":[
    {
      "boot":true,
      "initializeParams":{
        "diskSizeGb": "DISK_SIZE",
        "diskType": "hyperdisk-balanced",
        "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
      },
      "mode": "READ_WRITE",
      "type": "PERSISTENT"
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/cloud-platform"
      ]
    }
  ],
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "name": "external-nat",
          "type": "ONE_TO_ONE_NAT"
        }
      ],
      "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-0",
      "nicType": "GVNIC",
      "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-0"
    },
    {
      "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-1",
      "nicType": "GVNIC",
      "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-1"
    },
    {
      "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-2",
      "nicType": "GVNIC",
      "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-2"
    },
    {
      "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-3",
      "nicType": "GVNIC",
      "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-3"
    },
    {
      "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-4",
      "nicType": "GVNIC",
      "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-4"
    }
  ],
  "reservationAffinity":{
    "consumeReservationType": "SPECIFIC_RESERVATION",
    "key": "compute.googleapis.com/reservation-name",
    "values":[
      "RESERVATION"
    ]
  },
  "scheduling":{
    "provisioningModel": "RESERVATION_BOUND",
    "instanceTerminationAction": "TERMINATION_ACTION",
    "onHostMaintenance": "TERMINATE",
    "automaticRestart": true
  },
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto in cui vuoi creare la VM.
  • ZONE: la zona in cui è disponibile il tipo di macchina che vuoi utilizzare. Devi utilizzare una zona nella stessa regione della policy di posizionamento compatto. Per informazioni sulle regioni, vedi Disponibilità delle GPU per regioni e zone.
  • VM_NAME: il nome della VM.
  • DISK_SIZE: le dimensioni del disco di avvio in GB.
  • IMAGE_PROJECT: l'ID progetto dell'immagine del sistema operativo.
  • IMAGE_FAMILY: la famiglia di immagini dell'immagine del sistema operativo che vuoi utilizzare. Per un elenco dei sistemi operativi supportati, consulta Dettagli del sistema operativo.
  • NETWORK_PROJECT_ID: l'ID progetto della rete.
  • GVNIC_NAME_PREFIX: il prefisso del nome che hai specificato durante la creazione delle reti VPC e delle subnet standard che utilizzano gVNIC.
  • REGION: la regione della subnet.
  • RDMA_NAME_PREFIX: il prefisso del nome che hai specificato durante la creazione delle reti VPC e delle subnet che utilizzano NIC RDMA.
  • RESERVATION: il nome della prenotazione, di un blocco o di un sottoblocco all'interno di una prenotazione. Per ottenere il nome della prenotazione o i blocchi disponibili, vedi Visualizzare la capacità riservata. In base ai tuoi requisiti per il posizionamento delle istanze, scegli una delle seguenti opzioni:
    • Per creare le istanze su un singolo blocco:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME
          
    • Per creare le istanze su un blocco specifico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
          
    • Per creare le istanze in un sottoblocco specifico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
          
  • TERMINATION_ACTION: indica se Compute Engine arresta (STOP) o elimina (DELETE) la VM al termine del periodo di prenotazione.

  • PROJECT_ID: l'ID progetto della policy di posizionamento compatto.
  • REGION: la regione della policy di posizionamento compatto.
  • POLICY_NAME: il nome della policy di posizionamento compatto.

Passaggi successivi