Utilizzare le prenotazioni con l'inferenza batch

Questo documento spiega come utilizzare le prenotazioni di Compute Engine per avere la certezza che i tuoi 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 a garantire di avere 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 a quando 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 addebitati costi solo per le risorse al di fuori della prenotazione, ad esempio dischi o indirizzi IP. Per saperne di più, consulta i prezzi delle prenotazioni.

Limitazioni e requisiti

Quando utilizzi le prenotazioni di Compute Engine con Vertex AI, tieni presente le seguenti limitazioni e requisiti:

  • Vertex AI può utilizzare le prenotazioni solo per CPU, VM GPU o TPU (anteprima).
  • Vertex AI non può utilizzare le prenotazioni di VM con dischi SSD locali collegati manualmente.
  • L'utilizzo delle prenotazioni Compute Engine con Vertex AI è supportato solo per l'addestramento personalizzato e l'inferenza e per Vertex AI Workbench (anteprima).
  • Per utilizzare una prenotazione, le proprietà della VM della prenotazione devono corrispondere esattamente al tuo carico di lavoro Vertex AI. Ad esempio, se una prenotazione specifica un tipo di macchina a2-ultragpu-8g, il carico di lavoro Vertex AI può utilizzare la prenotazione solo 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 tramite 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 Visualizzatore Compute 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 di progetto del progetto che utilizza la prenotazione).
  • I seguenti servizi e funzionalità non sono supportati quando utilizzi le prenotazioni di Compute Engine 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 seguenti costi:

  • Prezzi di Compute Engine per le risorse di Compute Engine, inclusi eventuali sconti per impegno di utilizzo (CUD) applicabili. Consulta la pagina Prezzi di Compute Engine.
  • Tariffe di gestione dell'inferenza batch Vertex AI oltre all'utilizzo dell'infrastruttura. Consulta la pagina Prezzi della previsione.

Prima di iniziare

Consenti l'utilizzo di una prenotazione

Prima di utilizzare una prenotazione di CPU, VM GPU o TPU, devi impostare la relativa policy di condivisione per consentire a Vertex AI di utilizzare la prenotazione. Per farlo, utilizza uno dei seguenti metodi:

Consenti il consumo 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 console Google Cloud , nella sezione Servizi Google Cloud, seleziona Condividi prenotazione.
  • Se utilizzi Google Cloud CLI, includi il flag --reservation-sharing-policy impostato su ALLOW_ALL.
  • Se utilizzi l'API REST, nel corpo della richiesta includi il campo serviceShareType impostato su ALLOW_ALL.

Consenti il consumo in una prenotazione esistente

Puoi modificare una prenotazione creata automaticamente di VM GPU o TPU 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:

Verifica che una prenotazione sia stata utilizzata

Per verificare che la prenotazione venga utilizzata, 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 utilizza una prenotazione Compute Engine di VM GPU, puoi utilizzare l'API REST e scegliere Cloud Storage o BigQuery per l'origine e la destinazione.

Cloud Storage

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

  • LOCATION_ID: la regione in cui è archiviato il modello e viene eseguito il job di previsione 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 Modifica i progetti consumer in una prenotazione condivisa.

  • BATCH_JOB_NAME: un nome visualizzato per il job di previsione batch.

  • MODEL_ID: l'ID del modello da utilizzare per fare previsioni.

  • INPUT_FORMAT: il formato dei dati di input: jsonl, csv, tf-record, tf-record-gzip o file-list.

  • INPUT_URI: l'URI Cloud Storage dei dati di input. Possono 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 previsione batch.

  • ACCELERATOR_TYPE: Il tipo di acceleratore da collegare alla macchina. Per ulteriori informazioni sul tipo di GPU supportato da ogni tipo di macchina, vedi 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 o NONE.

    • ANY significa che le VM del tuo customJob possono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.
    • SPECIFIC_RESERVATION significa che le VM del tuo customJob possono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.
    • NONE significa che le VM del tuo customJob non possono utilizzare alcuna prenotazione. La specifica di NONE ha lo stesso effetto dell'omissione di una specifica di affinità della 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ò portare a una velocità effettiva maggiore, ma può anche causare timeout delle richieste.

  • STARTING_REPLICA_COUNT: Il numero di nodi per questo job di previsione 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, ed esegui questo comando:

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 seguenti sostituzioni:

  • LOCATION_ID: la regione in cui è archiviato il modello e viene eseguito il job di previsione 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 Modifica i progetti consumer in una prenotazione condivisa.

  • BATCH_JOB_NAME: un nome visualizzato per il job di previsione batch.

  • MODEL_ID: l'ID del modello da utilizzare per fare previsioni.

  • INPUT_PROJECT_ID: L'ID del progetto Google Cloud 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 Google Cloud in cui vuoi salvare l'output.

  • 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 previsione batch.

  • ACCELERATOR_TYPE: Il tipo di acceleratore da collegare alla macchina. Per ulteriori informazioni sul tipo di GPU supportato da ogni tipo di macchina, vedi 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 o NONE.

    • ANY significa che le VM del tuo customJob possono utilizzare automaticamente qualsiasi prenotazione con proprietà corrispondenti.
    • SPECIFIC_RESERVATION significa che le VM del tuo customJob possono utilizzare solo una prenotazione che le VM hanno come target specifico per nome.
    • NONE significa che le VM del tuo customJob non possono utilizzare alcuna prenotazione. La specifica di NONE ha lo stesso effetto dell'omissione di una specifica di affinità della 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ò portare a una velocità effettiva maggiore, ma può anche causare timeout delle richieste.

  • STARTING_REPLICA_COUNT: Il numero di nodi per questo job di previsione 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, ed esegui questo comando:

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 posizione BigQuery che hai specificato nella richiesta.

Passaggi successivi