Utilizza le prenotazioni con l'addestramento

Questo documento spiega come utilizzare le prenotazioni di Compute Engine per avere un elevato livello di certezza che i job di addestramento serverless dispongano delle risorse di macchine virtuali (VM) necessarie per l'esecuzione.

Le prenotazioni sono una funzionalità di Compute Engine. Ti aiutano ad avere sempre a disposizione le risorse necessarie per creare VM con lo stesso hardware (memoria e vCPU) e le risorse facoltative (CPU, GPU, TPU e dischi SSD locali) ogni volta che ne hai bisogno.

Quando crei una prenotazione, Compute Engine verifica che la capacità richiesta sia disponibile nella zona specificata. In caso affermativo, Compute Engine prenota le risorse, crea la prenotazione e si verifica quanto segue:

  • Puoi utilizzare immediatamente le risorse prenotate, che rimangono disponibili fino all'eliminazione della prenotazione.
  • Le risorse prenotate ti vengono addebitate alla stessa tariffa on demand delle VM in esecuzione, inclusi eventuali sconti applicabili, fino all'eliminazione della prenotazione. Una VM che utilizza una prenotazione non comporta addebiti separati. Ti vengono addebitati solo i costi delle risorse al di fuori della prenotazione, come dischi o indirizzi IP. Per saperne di più, consulta i prezzi delle prenotazioni.

Limitazioni e requisiti

Quando utilizzi le prenotazioni di Compute Engine con Agent Platform, tieni presente le seguenti limitazioni e i seguenti requisiti:

  • Agent Platform può utilizzare le prenotazioni solo per CPU, VM GPU, o TPU (anteprima).
  • Agent Platform non può utilizzare le prenotazioni di VM a cui sono collegati manualmente dischi SSD locali.
  • L'utilizzo delle prenotazioni di Compute Engine con Agent Platform è supportato solo per l'addestramento serverless, l'inferenza e Agent Platform Workbench (anteprima) di Gemini Enterprise.
  • Per utilizzare una prenotazione, le proprietà della VM devono corrispondere esattamente al carico di lavoro di Agent Platform per utilizzare la prenotazione. Ad esempio, se una prenotazione specifica un tipo di macchina a2-ultragpu-8g, il carico di lavoro di Agent Platform può solo utilizzare la prenotazione se utilizza anche un tipo di macchina a2-ultragpu-8g. Consulta i requisiti.
  • Per utilizzare una prenotazione condivisa di VM GPU o TPU, devi utilizzarla utilizzando il progetto proprietario o un progetto consumer con cui la prenotazione è condivisa. Consulta Come funzionano le prenotazioni condivise.
  • Per supportare gli aggiornamenti regolari dei deployment di Agent Platform, ti consigliamo di aumentare il numero di VM di almeno una VM aggiuntiva per ogni deployment simultaneo.
  • L'inizio flessibile per Dynamic Workload Scheduler e l'esecuzione di job di addestramento su una risorsa permanente sono entrambi supportati, tranne quando si utilizzano le prenotazioni di Compute Engine con l'addestramento di Agent Platform.

Fatturazione

Quando utilizzi le prenotazioni di Compute Engine, ti vengono addebitati i costi per:

  • Prezzi di Compute Engine per le risorse di Compute Engine, inclusi eventuali sconti per impegno di utilizzo (CUD) applicabili. Consulta i prezzi di Compute Engine.
  • Tariffe di gestione dell'addestramento serverless di Agent Platform oltre all'utilizzo dell' infrastruttura. Consulta i prezzi dei modelli addestrati personalizzati.

Prima di iniziare

Consentire l'utilizzo di una prenotazione

Prima di utilizzare una prenotazione di CPU, VM GPU o TPU, devi impostarne la policy di condivisione in modo da consentire ad Agent Platform di utilizzare la prenotazione. Per farlo, utilizza uno dei seguenti metodi:

Consenti l'utilizzo durante la creazione di una prenotazione

Quando crei una prenotazione di VM GPU per un singolo progetto o condivisa, puoi consentire ad Agent Platform di utilizzare la prenotazione nel seguente modo:

  • Se utilizzi la Google Cloud console, nella sezione Servizi Google Cloud, seleziona Condividi prenotazione.
  • Se utilizzi Google Cloud CLI, includi il --reservation-sharing-policy flag impostato su ALLOW_ALL.
  • Se utilizzi l'API REST, nel corpo della richiesta includi il serviceShareType campo impostato su ALLOW_ALL.

Consentire l'utilizzo di una prenotazione esistente

Puoi modificare una prenotazione di VM GPU o TPU creata automaticamente per una prenotazione futura solo dopo l'ora di inizio della prenotazione.

Per consentire ad Agent Platform di utilizzare una prenotazione esistente, utilizza uno dei seguenti metodi:

Verificare che una prenotazione sia utilizzata

Per verificare che la prenotazione sia in uso, consulta Verifica l'utilizzo delle prenotazioni nella documentazione di Compute Engine.

Creare un job di addestramento serverless con una prenotazione

Utilizza l'API REST per creare un job di addestramento serverless di Gemini Enterprise Agent Platform che utilizza una prenotazione di VM GPU di Compute Engine.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • LOCATION: la regione dove verrà eseguito il container o il pacchetto Python.
  • PROJECT_ID: il progetto in cui è stata creata la prenotazione. Per utilizzare una prenotazione condivisa da un altro progetto, devi condividere la prenotazione con quel progetto. Per saperne di più, consulta Modificare i progetti consumer in una prenotazione condivisa.
  • JOB_NAME: obbligatorio. Un nome visualizzato per CustomJob.
  • MACHINE_TYPE: il tipo di macchina da utilizzare per il job. L'impostazione predefinita è n1-standard-2. Per saperne di più sui tipi di macchina supportati, consulta Configurare le risorse di calcolo per l'addestramento personalizzato.
  • ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Per saperne di più sul tipo di GPU supportato da ogni tipo di macchina, consulta GPU per carichi di lavoro di computing.
  • ACCELERATOR_COUNT: il numero di acceleratori da collegare alla macchina.
  • Definisci il job di addestramento personalizzato:
    • RESERVATION_AFFINITY_TYPE: deve essere ANY_RESERVATION, SPECIFIC_RESERVATION o NO_RESERVATION.

      • ANY_RESERVATION significa che le VM di customJob possono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.
      • SPECIFIC_RESERVATION significa che le VM di customJob possono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.
      • NO_RESERVATION significa che le VM di customJob non possono utilizzare alcuna prenotazione. La specifica di NO_RESERVATION ha lo stesso effetto dell'omissione di una specifica di affinità di prenotazione.
    • ZONE: la zona in cui è stata creata la prenotazione.
    • RESERVATION_NAME: il nome della prenotazione.
    • DISK_TYPE: facoltativo. Il tipo di disco di avvio da utilizzare per il job, pd-standard (impostazione predefinita) o pd-ssd. Scopri di più sui tipi di disco.
    • DISK_SIZE: facoltativo. Le dimensioni in GB del disco di avvio da utilizzare per il job. Il valore predefinito è 100.
    • REPLICA_COUNT: il numero di repliche dei worker da usare. Nella maggior parte dei casi, impostare questo valore su 1 per il primo pool di worker.
    • Se l'applicazione di addestramento viene eseguita in un container personalizzato, specifica quanto segue:
      • CUSTOM_CONTAINER_IMAGE_URI: l'URI di un'immagine container in Artifact Registry o Docker Hub da eseguire su ogni replica del worker.
      • CUSTOM_CONTAINER_COMMAND: facoltativo. Il comando da richiamare all'avvio del container. Questo comando esegue l'override dell'entrypoint predefinito del container.
      • CUSTOM_CONTAINER_ARGS: facoltativo. Gli argomenti da passare all'avvio del container.
    • Se l'applicazione di addestramento è un pacchetto Python eseguito in un container predefinito, specifica quanto segue:
      • EXECUTOR_IMAGE_URI: l'URI dell'immagine container che esegue il codice fornito. Scopri quali sono i container predefiniti disponibili per l' addestramento.
      • PYTHON_PACKAGE_URIS: elenco separato da virgole di URI di Cloud Storage che specificano i file del pacchetto Python, ovvero il programma di addestramento e i rispettivi pacchetti dipendenti. Il numero massimo di URI dei pacchetti è 100.
      • PYTHON_MODULE: il nome del modulo Python da eseguire dopo l'installazione dei pacchetti.
      • PYTHON_PACKAGE_ARGS: facoltativo. Argomenti della riga di comando da passare al modulo Python.
    • TIMEOUT: facoltativo. Il tempo di esecuzione massimo per il job.
  • Specifica LABEL_NAME e LABEL_VALUE per le etichette che vuoi applicare a questo job personalizzato.

Metodo HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corpo JSON della richiesta:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "reservationAffinity": {
            "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
            // Use the following key and values only if
            // the reservationAffinityType is SPECIFIC_RESERVATION.
            "key": "compute.googleapis.com/reservation-name",
            "values": [
              "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

La risposta contiene informazioni sulle specifiche e sul TRAININGPIPELINE_ID.

Passaggi successivi