Questo documento spiega come utilizzare le prenotazioni di Compute Engine per avere un'elevata garanzia che i job di inferenza batch 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 rimarranno disponibili finché non elimini la 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 addebitate solo le risorse al di fuori della prenotazione, come dischi o indirizzi IP. Per saperne di più, consulta i prezzi per le prenotazioni.
Limitazioni e requisiti
Quando utilizzi le prenotazioni di Compute Engine con Vertex AI, tieni presente le seguenti limitazioni e i seguenti requisiti:
- Vertex AI può utilizzare le prenotazioni solo per CPU, VM GPU, o TPU (anteprima).
- Vertex AI non può utilizzare le prenotazioni di VM a cui sono collegati manualmente dischi SSD locali.
- L'utilizzo delle prenotazioni di Compute Engine con Vertex AI è supportato solo per l'addestramento serverless, l'inferenza e Vertex AI Workbench (anteprima) di Vertex AI.
- Per utilizzare una prenotazione, le proprietà della VM devono corrispondere esattamente al carico di lavoro di Vertex AI
per utilizzare la prenotazione. Ad esempio, se una prenotazione specifica un
tipo di macchina
a2-ultragpu-8g, il carico di lavoro di Vertex AI può utilizzare la prenotazione solo se utilizza anche un tipo di macchinaa2-ultragpu-8g. Consulta 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 utilizzare una prenotazione
SPECIFIC_RESERVATION, concedi il ruolo IAM Compute Viewer all'account di servizio Vertex AI nel progetto proprietario delle prenotazioni (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com, dove PROJECT_NUMBER è il numero del progetto che utilizza la prenotazione). -
I seguenti servizi e funzionalità non sono supportati quando utilizzi le prenotazioni di Compute Engine prenotazioni con l'inferenza batch di Vertex AI:
- Conformità al Federal Risk and Authorization Management Program (FedRAMP)
Fatturazione
Quando utilizzi le prenotazioni di Compute Engine, ti vengono addebitati i costi seguenti:
- 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'inferenza batch di Vertex AI oltre all'utilizzo dell'infrastruttura. Consulta i prezzi delle previsioni.
Prima di iniziare
- Esamina i requisiti e le limitazioni per le prenotazioni.
- Esamina i requisiti relativi alle quote e le limitazioni per le prenotazioni condivise.
Consentire l'utilizzo di una prenotazione
Prima di utilizzare una prenotazione di CPU, VM GPU o TPU, devi impostare la relativa policy di condivisione in modo da consentire a Vertex AI di utilizzare la prenotazione. Per farlo, utilizza uno dei seguenti metodi:
- Consentire l'utilizzo durante la creazione di una prenotazione
- Consentire l'utilizzo in una prenotazione esistente
Consentire l'utilizzo durante la creazione di una prenotazione
Quando crei una prenotazione per un singolo progetto o condivisa di VM GPU, puoi consentire a Vertex AI 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-policyflag impostato suALLOW_ALL. - Se utilizzi l'API REST, nel corpo della richiesta includi il
serviceShareTypecampo impostato suALLOW_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 a Vertex AI 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.Ottenere inferenze batch utilizzando una prenotazione
Per creare una richiesta di inferenza batch che utilizzi una prenotazione di VM GPU di Compute Engine, puoi utilizzare l'API REST e scegliere Cloud Storage o BigQuery come origine e destinazione.
Cloud Storage
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
-
LOCATION_ID: la regione in cui è archiviato il modello e in cui viene eseguito il job di previsioni in batch. Ad esempio,
us-central1. -
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.
-
BATCH_JOB_NAME: un nome visualizzato per il job di previsioni in batch.
-
MODEL_ID: l'ID del modello da utilizzare per effettuare le previsioni.
-
INPUT_FORMAT: il formato dei dati di input dati:
jsonl,csv,tf-record,tf-record-gzip, ofile-list. -
INPUT_URI: l'URI Cloud Storage dei dati di input. Può contenere caratteri jolly.
-
OUTPUT_DIRECTORY: l'URI Cloud Storage di una directory in cui vuoi che Vertex AI salvi l'output.
-
MACHINE_TYPE: le risorse macchina da utilizzare per questo job di previsioni in batch.
-
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.
-
RESERVATION_AFFINITY_TYPE: deve essere
ANY,SPECIFIC_RESERVATION, oNONE.ANYsignifica che le VM del tuocustomJobpossono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.SPECIFIC_RESERVATIONsignifica che le VM del tuocustomJobpossono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.NONEsignifica che le VM del tuocustomJobnon possono utilizzare alcuna prenotazione. La specifica diNONEha lo stesso effetto dell'omissione di una specifica di affinità di prenotazione.
-
BATCH_SIZE: il numero di istanze da inviare in ogni richiesta di previsione ; il valore predefinito è 64. L'aumento della dimensione del batch può comportare una maggiore velocità effettiva, ma può anche causare timeout delle richieste.
-
STARTING_REPLICA_COUNT: il numero di nodi per questo job di previsioni in batch.
Metodo HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON della richiesta:
{
"displayName": "BATCH_JOB_NAME",
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
"inputConfig": {
"instancesFormat": "INPUT_FORMAT",
"gcsSource": {
"uris": ["INPUT_URI"],
},
},
"outputConfig": {
"predictionsFormat": "jsonl",
"gcsDestination": {
"outputUriPrefix": "OUTPUT_DIRECTORY",
},
},
"dedicatedResources" : {
"machineSpec" : {
"machineType": MACHINE_TYPE,
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT,
"reservationAffinity": {
"reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
"key": "compute.googleapis.com/reservation-name",
"values": [
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
]
}
},
"startingReplicaCount": STARTING_REPLICA_COUNT
},
"manualBatchTuningParameters": {
"batch_size": BATCH_SIZE,
}
}
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Salva il corpo della richiesta in un file denominato request.json,
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Dovresti ricevere una risposta JSON simile alla seguente:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
"displayName": "BATCH_JOB_NAME 202005291958",
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
"inputConfig": {
"instancesFormat": "jsonl",
"gcsSource": {
"uris": [
"INPUT_URI"
]
}
},
"outputConfig": {
"predictionsFormat": "jsonl",
"gcsDestination": {
"outputUriPrefix": "OUTPUT_DIRECTORY"
}
},
"state": "JOB_STATE_PENDING",
"createTime": "2020-05-30T02:58:44.341643Z",
"updateTime": "2020-05-30T02:58:44.341643Z",
}
BigQuery
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
-
LOCATION_ID: la regione in cui è archiviato il modello e in cui viene eseguito il job di previsioni in batch. Ad esempio,
us-central1. -
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.
-
BATCH_JOB_NAME: un nome visualizzato per il job di previsioni in batch.
-
MODEL_ID: l'ID del modello da utilizzare per effettuare le previsioni.
-
INPUT_PROJECT_ID: l'ID del Google Cloud progetto da cui vuoi recuperare i dati.
-
INPUT_DATASET_NAME: il nome del set di dati BigQuery da cui vuoi recuperare i dati.
-
INPUT_TABLE_NAME: il nome della tabella BigQuery da cui vuoi recuperare i dati.
-
OUTPUT_PROJECT_ID: l'ID del progetto in cui vuoi salvare l'output. Google Cloud
-
OUTPUT_DATASET_NAME: il nome del set di dati BigQuery di destinazione in cui vuoi salvare l'output.
-
OUTPUT_TABLE_NAME: il nome della tabella di destinazione BigQuery in cui vuoi salvare l'output.
-
MACHINE_TYPE: le risorse macchina da utilizzare per questo job di previsioni in batch.
-
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.
-
RESERVATION_AFFINITY_TYPE: deve essere
ANY,SPECIFIC_RESERVATION, oNONE.ANYsignifica che le VM del tuocustomJobpossono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.SPECIFIC_RESERVATIONsignifica che le VM del tuocustomJobpossono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.NONEsignifica che le VM del tuocustomJobnon possono utilizzare alcuna prenotazione. La specifica diNONEha lo stesso effetto dell'omissione di una specifica di affinità di prenotazione.
-
BATCH_SIZE: il numero di istanze da inviare in ogni richiesta di previsione ; il valore predefinito è 64. L'aumento della dimensione del batch può comportare una maggiore velocità effettiva, ma può anche causare timeout delle richieste.
-
STARTING_REPLICA_COUNT: il numero di nodi per questo job di previsioni in batch.
Metodo HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON della richiesta:
{
"displayName": "BATCH_JOB_NAME",
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
"inputConfig": {
"instancesFormat": "bigquery",
"bigquerySource": {
"inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME"
},
},
"outputConfig": {
"predictionsFormat":"bigquery",
"bigqueryDestination":{
"outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_NAME"
}
},
"dedicatedResources" : {
"machineSpec" : {
"machineType": MACHINE_TYPE,
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT,
"reservationAffinity": {
"reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
"key": "compute.googleapis.com/reservation-name",
"values": [
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
]
}
},
"startingReplicaCount": STARTING_REPLICA_COUNT
},
"manualBatchTuningParameters": {
"batch_size": BATCH_SIZE,
}
}
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Salva il corpo della richiesta in un file denominato request.json,
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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Dovresti ricevere una risposta JSON simile alla seguente:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
"displayName": "BATCH_JOB_NAME 202005291958",
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
"inputConfig": {
"instancesFormat": "jsonl",
"bigquerySource": {
"uris": [
"INPUT_URI"
]
}
},
"outputConfig": {
"predictionsFormat": "jsonl",
"bigqueryDestination": {
"outputUri": "OUTPUT_URI"
}
},
"state": "JOB_STATE_PENDING",
"createTime": "2020-05-30T02:58:44.341643Z",
"updateTime": "2020-05-30T02:58:44.341643Z",
}
Recuperare i risultati dell'inferenza batch
Al termine di un'attività di inferenza batch, l'output dell'inferenza viene archiviato nel bucket Cloud Storage o nella località BigQuery specificata nella richiesta.
Passaggi successivi
- Scopri di più sulle prenotazioni delle risorse di zona di Compute Engine.
- Scopri come utilizzare le prenotazioni con Vertex AI inferenza online.
- Scopri come utilizzare le prenotazioni con Vertex AI addestramento.
- Scopri come visualizzare le prenotazioni.
- Scopri come monitorare l'utilizzo delle prenotazioni.