Utilizzare le prenotazioni con la previsione

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

Le prenotazioni sono una funzionalità di Compute Engine. Ti aiutano ad avere a disposizione le risorse per creare VM con lo stesso hardware (memoria e vCPU) e le risorse facoltative (GPU 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 questo caso, Compute Engine riserva le risorse, crea la prenotazione e si verifica quanto segue:

  • Puoi utilizzare immediatamente le risorse riservate, che rimangono disponibili fino a quando non elimini la prenotazione.
  • Ti viene addebitato il costo delle risorse riservate 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. Per saperne di più, consulta la pagina relativa alle prenotazioni di risorse di zona di Compute Engine.

Limitazioni e requisiti

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

  • Vertex AI può utilizzare solo le prenotazioni delle VM con GPU collegate.
  • Vertex AI non può utilizzare le prenotazioni delle VM con dischi SSD locali collegati manualmente.
  • L'utilizzo delle prenotazioni Compute Engine con Vertex AI è supportato solo per l'addestramento e le previsioni personalizzate.
  • Per utilizzare una prenotazione, le proprietà della VM 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 Requisiti.
  • Per utilizzare una prenotazione condivisa di VM GPU, devi farlo utilizzando il progetto del proprietario o un progetto consumer con cui la prenotazione è condivisa. Consulta Come funzionano le prenotazioni condivise.
  • Per supportare aggiornamenti regolari dei deployment di Vertex AI, ti consigliamo di aumentare il numero di VM per più del numero totale di repliche come segue, in base al tipo di prenotazione utilizzato dal tuo DeployedModel:
    • SPECIFIC_RESERVATION: devi specificare almeno 1 VM aggiuntiva. Consigliamo il 10% (ma almeno 1). I modelli di cui è stato eseguito il deployment utilizzando SPECIFIC_RESERVATION consumeranno obbligatoriamente solo le VM della prenotazione. Vertex AI non può eseguire aggiornamenti se non sono presenti VM aggiuntive.
    • ANY:
      • Non è necessario disporre di VM aggiuntive, perché i modelli di cui è stato eseguito il deployment utilizzando la prenotazione ANY utilizzano VM on demand se la capacità della prenotazione non è sufficiente. Tuttavia, senza VM aggiuntive, la prenotazione potrebbe non essere utilizzata completamente dopo un upgrade. Ad esempio, supponiamo di avere una prenotazione con 40 VM e di eseguire il deployment di un modello con 40 repliche utilizzando questa prenotazione. Al primo deployment, tutte le 40 VM della prenotazione vengono utilizzate dal DeployedModel. Dopo un upgrade, solo 36 VM provengono dalla prenotazione e 4 VM sono on demand.
      • Se vuoi mantenere l'utilizzo entro i limiti della prenotazione, ti consigliamo di avere almeno 1 VM aggiuntiva per ogni DeployedModel o DeploymentResourcePool che utilizza la prenotazione. Se il numero totale di VM dello stesso tipo nelle tue prenotazioni ANY è inferiore a 50, ti consigliamo di aumentarlo del 10% (ma di almeno 1). Se è superiore a 50, ti consigliamo di aumentare il 25%. Ad esempio:
        • Se prevedi di eseguire il deployment di modelli utilizzando 40 VM A3, puoi avere 1 prenotazione A3 con 44 VM o 2 prenotazioni A3: prenotazione X con 30 VM e prenotazione Y con 14 VM (44 in totale). Lo stesso vale per altri numeri di prenotazioni, a condizione che siano tutte condivise con Vertex AI e che il numero totale di VM in queste prenotazioni sia almeno pari a 44.
        • Se prevedi di eseguire il deployment di modelli utilizzando 100 VM A3, il numero totale di VM in tutte le prenotazioni A3 condivise con Vertex AI deve essere almeno pari a 125.
        • Se prevedi di eseguire il deployment di 2 modelli utilizzando 10 VM, il numero totale di VM in tutte le prenotazioni A3 condivise con Vertex AI deve essere almeno di 12. Il numero di VM è inferiore a 50, ma il numero di VM aggiuntive è 2 (1 per DeployedModel).
  • Per utilizzare una prenotazione SPECIFIC_RESERVATION, concedi il ruolo IAM Visualizzatore risorse di calcolo 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 con la previsione di Vertex AI:

    • Conformità al Federal Risk and Authorization Management Program (FedRAMP)

Fatturazione

Quando utilizzi le prenotazioni 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 delle previsioni di Vertex AI oltre all'utilizzo dell'infrastruttura. Consulta la pagina Prezzi di Prediction.

Prima di iniziare

Consentire l'utilizzo di una prenotazione

Prima di utilizzare una prenotazione di VM GPU, devi impostare le norme di condivisione per consentire a Vertex AI di utilizzare la prenotazione. A tal fine, utilizza uno dei seguenti metodi:

Consentire il consumo durante la creazione di una prenotazione

Quando crei una prenotazione per un singolo progetto o una prenotazione condivisa di VM GPU, puoi consentire a Vertex AI di utilizzare la prenotazione come segue:

  • Se utilizzi la console Google Cloud, 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 il consumo in una prenotazione esistente

Per consentire a Vertex AI di utilizzare una prenotazione esistente di VM GPU, consulta Modificare il criterio di condivisione di una prenotazione.

Verificare che una prenotazione sia stata utilizzata

Per verificare che la prenotazione venga utilizzata, consulta Verificare il consumo delle prenotazioni nella documentazione di Compute Engine.

Ottenere le previsioni utilizzando una prenotazione

Per creare un deployment del modello che utilizza una prenotazione Compute Engine di VM GPU, utilizza l'API REST o l'SDK Vertex AI per Python.

REST

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

  • LOCATION_ID: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il progetto in cui è stata creata la prenotazione. Per utilizzare una prenotazione condivisa di un altro progetto, devi condividerla con quel progetto. Per ulteriori informazioni, consulta Modificare i progetti consumer in una prenotazione condivisa.
  • ENDPOINT_ID: l'ID dell'endpoint.
  • MODEL_ID: l'ID del modello da implementare.
  • DEPLOYED_MODEL_NAME: un nome per il DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per DeployedModel.
  • MACHINE_TYPE: il tipo di macchina da utilizzare per ogni nodo di questo deployment. L'impostazione predefinita è n1-standard-2. Per ulteriori informazioni sui tipi di macchine supportati, consulta Configurare le risorse di calcolo per la previsione.
  • ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Per ulteriori informazioni sul tipo di GPU supportato da ogni tipo di macchina, consulta GPU per carichi di lavoro di calcolo.
  • ACCELERATOR_COUNT: il numero di acceleratori da collegare alla macchina.
  • RESERVATION_AFFINITY_TYPE: deve essere ANY, SPECIFIC_RESERVATION o NONE.
    • ANY indica che le VM del tuo customJob possono automaticamente utilizzare qualsiasi prenotazione con proprietà corrispondenti.
    • SPECIFIC_RESERVATION indica che le VM di 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.
  • RESERVATION_NAME: il nome della prenotazione.
  • MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino al numero massimo di nodi e mai meno di questo numero. Questo valore deve essere maggiore o uguale a 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino a questo numero di nodi e mai inferiore al numero minimo di nodi.
  • TRAFFIC_SPLIT_THIS_MODEL: la percentuale del traffico di previsione per questo endpoint da inoltrare al modello di cui viene eseguito il deployment con questa operazione. Il valore predefinito è 100. La somma di tutte le percentuali di traffico deve essere pari al 100%. Scopri di più sulle suddivisioni del traffico.
  • DEPLOYED_MODEL_ID_N: facoltativo. Se in questo endpoint sono di cui è stato eseguito il deployment di altri modelli, devi aggiornare le relative percentuali di suddivisione del traffico in modo che tutte le percentuali sommate diano 100.
  • TRAFFIC_SPLIT_MODEL_N: il valore percentuale della suddivisione del traffico per la chiave ID modello di cui è stato eseguito il deployment.
  • PROJECT_NUMBER: il numero del progetto generato automaticamente.

Metodo HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corpo JSON della richiesta:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_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"
          ]
        }
      },
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI SDK for Python.

Prima di eseguire uno degli script riportati di seguito, effettua le seguenti sostituzione:

  • DEPLOYED_NAME: un nome per il modello di cui è stato eseguito il deployment.
  • TRAFFIC_SPLIT: il valore percentuale della suddivisione del traffico per la chiave ID modello di cui è stato eseguito il deployment.
  • MACHINE_TYPE: la macchina utilizzata per ogni nodo di questo deployment. L'impostazione predefinita è n1-standard-2. Scopri di più sui tipi di macchine.
  • ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Per ulteriori informazioni sul tipo di GPU supportato da ogni tipo di macchina, consulta GPU per carichi di lavoro di calcolo.
  • ACCELERATOR_COUNT: il numero di acceleratori da collegare alla macchina.
  • PROJECT_ID: il progetto in cui è stata creata la prenotazione. Per utilizzare una prenotazione condivisa da un altro progetto, devi condividerla con quel progetto. Per ulteriori informazioni, vedi Modificare i progetti consumer in una prenotazione condivisa.
  • ZONE: la zona in cui si trova la prenotazione.
  • RESERVATION_NAME: il nome della prenotazione.
  • MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino al numero massimo di nodi e mai meno di questo numero. Questo valore deve essere maggiore o uguale a 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base al carico della previsione, fino a questo numero di nodi e mai inferiore al numero minimo di nodi.

A seconda del tipo di prenotazione che vuoi utilizzare, procedi in uno dei seguenti modi:

  • Per utilizzare una prenotazione specifica:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="SPECIFIC_RESERVATION",
        reservation_affinity_key="compute.googleapis.com/reservation-name",
        reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"],
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )
  • Per utilizzare una prenotazione consumata automaticamente:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="ANY_RESERVATION",
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )

Passaggi successivi