Condividi le risorse tra i deployment

Per impostazione predefinita, viene eseguito il deployment di un modello Vertex AI sulla propria istanza di macchina virtuale (VM). Vertex AI offre la possibilità di ospitare in co-hosting i modelli sulla stessa VM, il che offre i seguenti vantaggi:

  • Condivisione delle risorse tra più deployment.
  • Pubblicazione del modello conveniente.
  • Miglioramento dell'utilizzo della memoria e delle risorse di calcolo.

Questa guida descrive come condividere le risorse tra più deployment su Vertex AI.

Panoramica

Il supporto del co-hosting dei modelli introduce il concetto di DeploymentResourcePool, che raggruppa i deployment dei modelli che condividono le risorse all'interno di una singola VM. È possibile eseguire il deployment di più endpoint sulla stessa VM all'interno di un'istruzione DeploymentResourcePool. Ogni endpoint ha uno o più modelli di cui è stato eseguito il deployment. I modelli di cui è stato eseguito il deployment per un determinato endpoint possono essere raggruppati nello stesso DeploymentResourcePool o in uno diverso.

Nell'esempio seguente, sono presenti quattro modelli e due endpoint:

Cohosting di modelli da più endpoint

È stato eseguito il deployment di Model_A, Model_B e Model_C in Endpoint_1 e il traffico viene indirizzato a tutti. Model_D viene implementato in Endpoint_2, che riceve il 100% del traffico per quell'endpoint. Invece di assegnare ogni modello a una VM separata, puoi raggruppare i modelli in uno dei seguenti modi:

  • Raggruppa Model_A e Model_B per condividere una VM, che li rende parte di DeploymentResourcePool_X.
  • Raggruppa Model_C e Model_D (attualmente non nello stesso endpoint) per condividere una VM, che li rende parte di DeploymentResourcePool_Y.

Pool di risorse di deployment diversi non possono condividere una VM.

Considerazioni

Non esiste un limite superiore al numero di modelli che possono essere di cui è possibile eseguire il deployment in un singolo pool di risorse di deployment. Dipende dalla forma della VM scelta, dalle dimensioni del modello e dai pattern di traffico. Il cohosting funziona bene quando si hanno molti modelli di cui è stato eseguito il deployment con traffico sparso, per cui l'assegnazione di una macchina dedicata a ciascun modello di cui è stato eseguito il deployment non utilizza efficacemente le risorse.

Puoi eseguire il deployment dei modelli nello stesso pool di risorse di deployment contemporaneamente. Tuttavia, esiste un limite di 20 richieste di deployment simultanee in un dato momento.

Un pool di risorse di deployment vuoto non consuma la tua quota di risorse. Il provisioning delle risorse viene eseguito in un pool di risorse di deployment quando viene eseguito il deployment del primo modello e vengono rilasciate quando viene annullato il deployment dell'ultimo modello.

I modelli in un singolo pool di risorse di deployment non sono isolati tra loro e possono essere in concorrenza per CPU e memoria. Il rendimento di un modello potrebbe essere peggiore se un altro modello sta elaborando contemporaneamente una richiesta di inferenza.

Limitazioni

Quando esegui il deployment di modelli con la condivisione delle risorse abilitata, sono presenti le seguenti limitazioni:

Esegui il deployment di un modello

Per eseguire il deployment di un modello in un DeploymentResourcePool:

  1. Crea un pool di risorse di deployment, se necessario.
  2. Crea un endpoint, se necessario.
  3. Recupera l'ID endpoint.
  4. Esegui il deployment del modello nell'endpoint nel pool di risorse di deployment.

Crea un pool di risorse di deployment

Se esegui il deployment di un modello in DeploymentResourcePool esistente, salta questo passaggio:

Utilizza CreateDeploymentResourcePool per creare un pool di risorse.

Cloud Console

  1. Nella console Google Cloud, vai alla pagina Pool di risorse di deployment di Vertex AI.

    Vai a Pool di risorse di deployment

  2. Fai clic su Crea e compila il modulo (mostrato di seguito).

    Crea il modulo del pool di risorse di deployment con il numero di nodi minimo e massimo impostato su 1 e i nodi di scalabilità automatica in base alla soglia della CPU impostati su 60

REST

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

  • LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
  • PROJECT_ID: il tuo ID progetto.
  • MACHINE_TYPE: facoltativo. Le risorse macchina utilizzate per ogni nodo e deployment continuo. L'impostazione predefinita è n1-standard-2. Scopri di più sui tipi di macchine.
  • ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Facoltativo se ACCELERATOR_COUNT non è specificato o è pari a zero. Sconsigliato per Modelli AutoML o modelli addestrati personalizzati che utilizzano immagini non GPU. Scopri di più.
  • ACCELERATOR_COUNT: il numero di acceleratori da utilizzare per ogni replica. Facoltativo. Deve essere zero o non specificato per i modelli AutoML o i modelli con addestramento personalizzato che utilizzano immagini non GPU.
  • MIN_REPLICA_COUNT: 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 conteggio dei nodi può essere aumentato o diminuito in base al carico della previsione. fino a questo numero di nodi e mai meno del numero minimo di nodi.
  • DEPLOYMENT_RESOURCE_POOL_ID: un nome per il DeploymentResourcePool. La lunghezza massima è di 63 caratteri e i caratteri validi sono /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.

Metodo HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/deploymentResourcePools

Corpo JSON della richiesta:

{
  "deploymentResourcePool":{
    "dedicatedResources":{
      "machineSpec":{
        "machineType":"MACHINE_TYPE",
        "acceleratorType":"ACCELERATOR_TYPE",
        "acceleratorCount":"ACCELERATOR_COUNT"
      },
      "minReplicaCount":MIN_REPLICA_COUNT, 
      "maxReplicaCount":MAX_REPLICA_COUNT
    }
  },
  "deploymentResourcePoolId":"DEPLOYMENT_RESOURCE_POOL_ID"
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateDeploymentResourcePoolOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-15T05:48:06.383592Z",
      "updateTime": "2022-06-15T05:48:06.383592Z"
    }
  }
}

Puoi eseguire un polling per conoscere lo stato dell'operazione la risposta include "done": true.

Python

# Create a deployment resource pool.
deployment_resource_pool = aiplatform.DeploymentResourcePool.create(
    deployment_resource_pool_id="DEPLOYMENT_RESOURCE_POOL_ID",  # User-specified ID
    machine_type="MACHINE_TYPE",  # Machine type
    min_replica_count=MIN_REPLICA_COUNT,  # Minimum number of replicas
    max_replica_count=MAX_REPLICA_COUNT,  # Maximum number of replicas
)

Sostituisci quanto segue:

  • DEPLOYMENT_RESOURCE_POOL_ID: un nome per il DeploymentResourcePool. La lunghezza massima è di 63 caratteri ed è valida i caratteri sono /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • MACHINE_TYPE: facoltativo. Le risorse della macchina utilizzate per ogni nodo di questo deployment. Il valore predefinito è n1-standard-2. Scopri di più sui tipi di macchine.
  • 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 di nodi. Questo valore deve essere maggiore o uguale a 1.
  • MAX_REPLICA_COUNT: il numero massimo di nodi per questo deployment. Il conteggio dei nodi può essere aumentato o diminuito in base alle esigenze il carico della previsione, fino a questo numero di nodi e mai meno di il numero minimo di nodi.

Creazione endpoint

Per creare un endpoint, consulta Eseguire il deployment di un modello in un endpoint. Questo passaggio è lo stesso di un deployment con un solo modello.

Recuperare l'ID endpoint

Per recuperare l'ID endpoint, consulta Eseguire il deployment di un modello in un endpoint. Questo passaggio è lo stesso di un deployment con un solo modello.

Esegui il deployment del modello in un pool di risorse di deployment

Dopo aver creato un DeploymentResourcePool e un endpoint, puoi eseguire il deployment utilizzando il metodo dell'API DeployModel. Questa procedura è simile a un deployment di un singolo modello. Se è presente un valore DeploymentResourcePool, specifica shared_resources pari a DeployModel con il nome della risorsa DeploymentResourcePool di cui stai eseguendo il deployment.

Cloud Console

  1. Nella console Google Cloud, vai al registro dei modelli di Vertex AI .

    Vai al registro dei modelli

  2. Individua il modello e fai clic su Deployment su endpoint.

  3. In Impostazioni modello (mostrate di seguito), seleziona Esegui il deployment in un pool di risorse di deployment condiviso.

    Modulo delle impostazioni del modello, con la suddivisione del traffico impostata su 100 e l'opzione Esegui il deployment in un pool di risorse di deployment condiviso selezionato

REST

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

  • LOCATION_ID: la regione in cui stai utilizzando Vertex AI.
  • PROJECT: il tuo ID progetto.
  • ENDPOINT_ID: l'ID dell'endpoint.
  • MODEL_ID: l'ID del modello di cui eseguire il deployment.
  • DEPLOYED_MODEL_NAME: un nome per DeployedModel. Puoi utilizzare il nome visualizzato del Model anche per DeployedModel.
  • DEPLOYMENT_RESOURCE_POOL_ID: un nome per il tuo DeploymentResourcePool. La lunghezza massima è di 63 caratteri, mentre i caratteri validi sono /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • TRAFFIC_SPLIT_THIS_MODEL: la percentuale del traffico di previsione verso questo endpoint da indirizzare 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 viene eseguito il deployment di altri modelli su questo endpoint, devono aggiornare le rispettive percentuali di suddivisione del traffico in modo che la somma di tutte le percentuali arrivi a 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 di progetto generato automaticamente del progetto

Metodo HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel

Corpo JSON della richiesta:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "sharedResources":"projects/PROJECT/locations/us-central1/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID"
  },
  "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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-19T17:53:16.502088Z",
      "updateTime": "2022-06-19T17:53:16.502088Z"
    }
  }
}

Python

# Deploy model in a deployment resource pool.
model = aiplatform.Model("MODEL_ID")
model.deploy(deployment_resource_pool=deployment_resource_pool)

Sostituisci MODEL_ID con l'ID del modello da implementare.

Ripeti la richiesta precedente con modelli diversi che hanno le stesse risorse condivise per eseguire il deployment di più modelli nello stesso pool di risorse di deployment.

Ricevi previsioni

Puoi inviare richieste di previsione a un modello in un DeploymentResourcePool come faresti con qualsiasi altro modello di cui è stato eseguito il deployment su Vertex AI.