Introduzione
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 co-ospitare i modelli sulla stessa VM, il che offre i seguenti vantaggi:
- Condivisione delle risorse tra più deployment.
- Pubblicazione di un modello conveniente.
- Utilizzo delle risorse di calcolo e di memoria migliorato.
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 oggetto DeploymentResourcePool
. Ogni endpoint include 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:
Viene eseguito il deployment di Model_A
, Model_B
e Model_C
in Endpoint_1
, con traffico indirizzato a tutte. Viene eseguito il deployment di Model_D
in Endpoint_2
, che riceve il 100% del traffico per quell'endpoint.
Anziché assegnare ogni modello a una VM separata, puoi raggrupparli in uno dei seguenti modi:
- Raggruppa
Model_A
eModel_B
per condividere una VM e, di conseguenza, entrano a far parte diDeploymentResourcePool_X
. - Raggruppa
Model_C
eModel_D
(attualmente non nello stesso endpoint) per condividere una VM e, di conseguenza, fanno parte diDeploymentResourcePool_Y
.
Pool di risorse di deployment diversi non possono condividere una VM.
Considerazioni
Non esiste un limite massimo al numero di modelli 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 modelli di traffico. Il co-hosting funziona bene quando si esegue il deployment di molti modelli con traffico sparso, in modo che l'assegnazione di una macchina dedicata a ogni modello di cui è stato eseguito il deployment non utilizzi in modo efficace le risorse.
Puoi eseguire il deployment di modelli nello stesso pool di risorse di deployment contemporaneamente. Tuttavia, esiste un limite di 20 richieste di deployment simultanee in un dato momento.
Si verifica un aumento dell'utilizzo della CPU durante il deployment di un modello. L'aumento dell'utilizzo della CPU può portare a un aumento della latenza per il traffico esistente o può attivare la scalabilità automatica. Per un'esperienza ottimale, è consigliabile evitare un traffico elevato verso un pool di risorse di deployment durante il deployment di un nuovo modello.
Il traffico esistente verso un pool di risorse di deployment non è interessato dall'annullamento del deployment di un modello al suo interno. Non è previsto alcun impatto sull'utilizzo della CPU o sulla latenza del traffico esistente durante l'annullamento del deployment di un modello.
Un pool di risorse di deployment vuoto non consuma la tua quota di risorse. Viene eseguito il provisioning delle risorse in un pool di risorse di deployment al momento del deployment del primo modello e il rilascio quando viene annullato il deployment dell'ultimo modello.
I modelli in un singolo pool di risorse di deployment non sono isolati l'uno dall'altro in termini di risorse, come CPU e memoria. Se un modello utilizza la maggior parte delle risorse, attiverà la scalabilità automatica.
Limitazioni
Quando esegui il deployment di modelli con la condivisione delle risorse abilitata, sono previste le seguenti limitazioni:
- Questa funzionalità è supportata solo per i deployment dei modelli TensorFlow che utilizzano i container predefiniti di Tensorflow di previsione Vertex AI. Gli altri framework dei modelli e container personalizzati non sono ancora supportati.
- Al momento sono supportati solo i modelli addestrati personalizzati o importati. I modelli AutoML non sono ancora supportati.
- Solo i modelli con la stessa immagine container (inclusa la versione framework) di container predefiniti di Vertex AI TensorFlow per la previsione possono essere sottoposti a deployment nello stesso pool di risorse di deployment.
- Le seguenti funzionalità non sono ancora supportate: account di servizio personalizzati, logging dei container, Vertex Explainable AI, Controlli di servizio VPC ed endpoint privati.
Deployment di un modello
Per eseguire il deployment di un modello in un DeploymentResourcePool
, completa i seguenti passaggi:
- Crea un pool di risorse di deployment, se necessario.
- Crea un endpoint, se necessario.
- Recupera l'ID endpoint.
- Esegui il deployment del modello sull'endpoint nel pool di risorse di deployment.
Creazione di un pool di risorse di deployment
Se esegui il deployment di un modello su un DeploymentResourcePool
esistente, salta questo passaggio:
Utilizza CreateDeploymentResourcePool
per creare un pool di risorse.
Console Cloud
Nella console Google Cloud, vai alla pagina Pool di risorse di deployment di Vertex AI.
Fai clic su Crea e compila il modulo (mostrato di seguito).
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto.
-
MACHINE_TYPE: facoltativo. Le risorse macchina utilizzate per ogni nodo di questo deployment. La sua impostazione predefinita è
n1-standard-2
. Scopri di più sui tipi di macchina. - ACCELERATOR_TYPE: il tipo di acceleratore da collegare alla macchina. Facoltativo se ACCELERATOR_COUNT non è specificato o è pari a zero. Opzione non consigliata per i modelli AutoML o per i modelli con addestramento personalizzato che utilizzano immagini non GPU. Scopri di più.
- ACCELERATOR_COUNT: il numero di acceleratori da utilizzare per ogni replica. Facoltativo. Il valore deve essere zero o non specificato per i modelli AutoML o per i modelli addestrati personalizzati che utilizzano immagini non GPU.
- MIN_REPLICA_COUNT: il numero minimo di nodi per questo deployment. Il numero di nodi può essere aumentato o diminuito in base alle esigenze del 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 di previsione, fino a questo numero di nodi e mai inferiore al numero minimo di nodi.
-
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])?$/.
Metodo HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/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 di queste 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.v1beta1.CreateDeploymentResourcePoolOperationMetadata", "genericMetadata": { "createTime": "2022-06-15T05:48:06.383592Z", "updateTime": "2022-06-15T05:48:06.383592Z" } } }
Puoi eseguire il polling per verificare lo stato dell'operazione finché la risposta non include "done": true
.
Creazione endpoint
Segui queste istruzioni per creare un endpoint. Questo passaggio è come il deployment di un modello singolo.
Recupera ID endpoint
Segui queste istruzioni per recuperare l'ID endpoint. Questo passaggio è come il deployment di un modello singolo.
Esegui il deployment di un modello in un pool di risorse di deployment
Dopo aver creato un DeploymentResourcePool
e un endpoint, puoi eseguire il deployment utilizzando il metodo API DeployModel
. Questo processo è simile a un deployment a modello singolo. Se è presente un valore DeploymentResourcePool
, specifica shared_resources
di DeployModel
con il nome della risorsa DeploymentResourcePool
di cui stai eseguendo il deployment.
Console Cloud
Nella console Google Cloud, vai alla pagina Model Registry di Vertex AI.
Individua il modello e fai clic su Deployment su endpoint.
In Impostazioni del modello (mostrate di seguito), seleziona Esegui il deployment in un pool di risorse di deployment condiviso.
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- LOCATION_ID: la regione in cui utilizzi 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 anche il nome visualizzato diModel
perDeployedModel
. -
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 instradare 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 a 100. Scopri di più sulle suddivisioni del traffico.
- DEPLOYED_MODEL_ID_N: facoltativo. Se viene eseguito il deployment di altri modelli in questo endpoint, devi aggiornare le percentuali di suddivisione del traffico in modo che la somma delle percentuali corrisponda a 100.
- TRAFFIC_SPLIT_MODEL_N: il valore percentuale di suddivisione del traffico per la chiave ID modello di cui è stato eseguito il deployment.
- PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto
Metodo HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1beta1/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 di queste 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.v1beta1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2022-06-19T17:53:16.502088Z", "updateTime": "2022-06-19T17:53:16.502088Z" } } }
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.
ottieni previsioni
Puoi inviare richieste di previsione a un modello in DeploymentResourcePool
come faresti con qualsiasi altro modello di cui è stato eseguito il deployment su Vertex AI.