Per utilizzare un container personalizzato per pubblicare inferenze da un modello con addestramento personalizzato, devi fornire a Vertex AI un'immagine container Docker che esegue un server HTTP. Questo documento descrive i requisiti che un'immagine container deve soddisfare per essere compatibile con Vertex AI. Il documento descrive anche in che modo Vertex AI interagisce con il tuo container personalizzato una volta avviato. In altre parole, questo documento descrive cosa devi considerare quando progetti un'immagine container da utilizzare con Vertex AI.
Per scoprire come utilizzare un'immagine container personalizzata per fornire inferenze, consulta l'articolo Utilizzo di un container personalizzato.
Requisiti per le immagini container
Quando l'immagine container Docker viene eseguita come container, quest'ultimo deve eseguire un server HTTP. Nello specifico, il container deve ascoltare e rispondere ai controlli di attività, ai controlli di integrità e alle richieste di inferenza. Le seguenti sottosezioni descrivono questi requisiti nel dettaglio.
Puoi implementare il server HTTP in qualsiasi modo, utilizzando qualsiasi linguaggio di programmazione, purché soddisfi i requisiti indicati in questa sezione. Ad esempio, puoi scrivere un server HTTP personalizzato utilizzando un framework web come Flask o utilizzare un software di servizio di machine learning (ML) che esegue un server HTTP, come TensorFlow Serving, TorchServe o KServe Python Server.
Esegui il server HTTP
Puoi eseguire un server HTTP utilizzando un'istruzione ENTRYPOINT
, un'istruzione CMD
o entrambe nel Dockerfile che utilizzi per creare l'immagine container. Scopri di più sull'interazione tra CMD
e
ENTRYPOINT
.
In alternativa, puoi specificare i campi containerSpec.command
e containerSpec.args
quando crei la risorsa Model
per ignorare ENTRYPOINT
e CMD
dell'immagine del container rispettivamente. La specifica di uno di questi campi consente
di utilizzare un'immagine container che altrimenti non soddisferebbe i requisiti a causa
di un ENTRYPOINT
o un CMD
incompatibile (o inesistente).
Indipendentemente dal modo in cui determini quale comando deve essere eseguito dal container all'avvio, assicurati
che questa istruzione ENTRYPOINT
venga eseguita a tempo indeterminato. Ad esempio, non eseguire un comando
che avvia un server HTTP in background e poi esce; in questo caso, il
container uscirà immediatamente dopo l'avvio.
Il server HTTP deve rimanere in ascolto delle richieste su 0.0.0.0
, su una porta a tua
scelta. Quando crei un Model
, specifica questa porta nel
campo containerSpec.ports
.
Per scoprire come il contenitore può accedere a questo valore, leggi la sezione di questo documento sulla variabile di ambiente AIP_HTTP_PORT
.
Controlli di attività
Vertex AI esegue un controllo di attività all'avvio del container per
assicurarsi che il server sia in esecuzione. Quando esegui il deployment di un modello con addestramento personalizzato in una risorsa Endpoint
, Vertex AI utilizza un sondaggio di attività TCP per tentare di stabilire una connessione TCP al container sulla porta configurata. Il probe esegue fino a 4 tentativi per stabilire una connessione,
attendendo 10 secondi dopo ogni errore. Se a questo punto il probe non ha ancora stabilito una connessione, Vertex AI riavvia il container.
Il server HTTP non deve eseguire alcun comportamento speciale per gestire questi controlli. Finché è in ascolto delle richieste sulla porta configurata, il probe di attività è in grado di stabilire una connessione.
Controlli di integrità
Puoi specificare facoltativamente startup_probe
o health_probe
.
Il probe di avvio controlla se l'applicazione container è stata avviata. Se non viene fornito il probe di avvio, non è presente alcun probe di avvio e i controlli di integrità iniziano immediatamente. Se viene fornito il probe di avvio, i controlli di integrità non vengono eseguiti finché il probe di avvio non viene completato.
Le applicazioni legacy che potrebbero richiedere un tempo di avvio aggiuntivo alla prima inizializzazione devono configurare un probe di avvio. Ad esempio, se l'applicazione deve copiare gli artefatti del modello da una fonte esterna, una sonda di avvio deve essere configurata per restituire l'esito positivo al termine dell'inizializzazione.
Il probe di integrità controlla se un container è pronto ad accettare il traffico. Se non viene fornita la sonda di integrità, Vertex AI utilizza i controlli di integrità predefiniti, come descritto in Controlli di integrità predefiniti.
Le applicazioni legacy che non restituiscono 200 OK
per indicare che il modello è caricato e pronto ad accettare il traffico devono configurare un probe di integrità. Ad esempio, un'applicazione potrebbe restituire 200 OK
per indicare l'esito positivo anche se lo stato di caricamento del modello effettivo nel corpo della risposta indica che il modello potrebbe non essere caricato e quindi non essere pronto ad accettare il traffico. In questo caso, è necessario configurare un probe di integrità in modo che restituisca esito positivo solo quando il modello è caricato e pronto a gestire il traffico.
Per eseguire un probe, Vertex AI esegue il comando exec
specificato
nel container di destinazione. Se il comando ha esito positivo, restituisce 0 e il
container è considerato attivo e integro.
Controlli di integrità predefiniti
Per impostazione predefinita, Vertex AI esegue controlli dell'integrità intermittenti sul server HTTP
durante l'esecuzione per assicurarsi che sia pronto a gestire le richieste di inferenza.
Il servizio utilizza un probe di integrità per inviare richieste HTTP GET
a un percorso di controllo di integrità configurabile sul tuo server. Specifica questo percorso nel
campo containerSpec.healthRoute
quando crei un Model
. Per scoprire come il contenitore può accedere a questo valore,
leggi la sezione di questo documento relativa alla variabile di ambiente AIP_HEALTH_ROUTE
.
Configura il server HTTP in modo che risponda a ogni richiesta di controllo di integrità nel seguente modo:
Se il server è pronto a gestire le richieste di inferenza,rispondi alla richiesta di controllo di integrità entro 10 secondi con il codice di stato
200 OK
. Il contenuto del corpo della risposta non è importante, Vertex AI lo ignora.Questa risposta indica che il server è integro.
Se il server non è pronto a gestire le richieste di inferenza, non rispondere alla richiesta dicontrollo di integritào dell'integrità entro 10 secondi o rispondi con un codice di stato diverso da
200 OK
. Ad esempio, rispondi con il codice di stato503 Service Unavailable
.Questa risposta (o la mancata risposta) indica che il server non è integro.
Se il probe di integrità riceve una risposta non integra dal server
(inclusa l'assenza di risposta entro 10 secondi), invia fino a tre
controlli di integrità aggiuntivi a intervalli di 10 secondi. Durante questo periodo, Vertex AI considera comunque il server integro. Se il probe riceve una risposta di stato integro a uno di questi controlli, torna immediatamente al programma intermittente di controlli di integrità. Tuttavia, se il probe riceve 4 risposte non integre consecutive, Vertex AI interrompe il routing del traffico di inferenza al container. Se la risorsa DeployedModel
viene scalata per utilizzare più nodi di inferenza, Vertex AI indirizza le richieste di inferenza ad altri container integri.
Vertex AI non riavvia il container. Il probe di integrità continua a inviare richieste di controllo di integrità intermittenti al server non integro. Se riceve una risposta di stato integro, contrassegna il container come integro e inizia di nuovo a indirizzarvi il traffico di inferenza.
Indicazioni pratiche
In alcuni casi, è sufficiente che il server HTTP nel contenitore risponda sempre
con il codice di stato 200 OK
ai controlli di integrità. Se il contenitore carica
le risorse prima di avviare il server, il contenitore non è integro durante il
periodo di avvio e durante i periodi in cui il server HTTP non funziona. In tutti gli altri
casi, risponde come sano.
Per una configurazione più sofisticata, potresti voler progettare intenzionalmente il server HTTP in modo che risponda ai controlli di integrità con uno stato non integro in determinati momenti. Ad esempio, potresti voler bloccare il traffico di inferenza verso un nodo per un periodo di tempo in modo che il container possa eseguire la manutenzione.
Richieste di inferenza
Quando un client invia una projects.locations.endpoints.predict
richiesta all'API Vertex AI, Vertex AI inoltra questa richiesta come richiesta HTTP POST
a un percorso di inferenza configurabile sul tuo server. Specifica questo
percorso nel campo
containerSpec.predictRoute
quando crei un Model
. Per scoprire in che modo il container può accedere a questo valore, leggi la sezione di questo documento relativa alla variabile di ambiente AIP_PREDICT_ROUTE
.
Requisiti della richiesta
Se il modello viene implementato su un endpoint pubblico, ogni richiesta di inferenza deve essere
di 1,5 MB o inferiore. Il server HTTP deve accettare le richieste di inferenza con
l'intestazione HTTP Content-Type: application/json
e i corpi JSON con il
seguente formato:
{
"instances": INSTANCES,
"parameters": PARAMETERS
}
In queste richieste:
INSTANCES è un array di uno o più valori JSON di qualsiasi tipo. Ogni valore rappresenta un'istanza per cui stai fornendo un'inferenza.
PARAMETERS è un oggetto JSON contenente tutti i parametri necessari al container per fornire inferenze sulle istanze. Vertex AI considera il campo
parameters
facoltativo, quindi puoi progettare il contenitore in modo che lo richieda, lo utilizzi solo quando viene fornito o lo ignori.
Scopri di più sui requisiti del corpo della richiesta.
Requisiti di risposta
Se il modello viene sottoposto a deployment su un endpoint pubblico, ogni risposta di inferenza deve essere di 1,5 MB o inferiore. Il server HTTP deve inviare risposte con corpi JSON che soddisfano il seguente formato:
{
"predictions": INFERENCES
}
In queste risposte, sostituisci INFERENCES con un array di valori JSON che rappresentano le inferenze generate dal contenitore per ciascuno dei INSTANCES nella richiesta corrispondente.
Dopo che il server HTTP invia questa risposta, Vertex AI aggiunge un
campodeployedModelId
alla risposta prima di restituirla al client. Questo campo specifica quale
DeployedModel
su un
Endpoint
sta inviando la risposta. Scopri di più sul formato del corpo della
risposta.
Requisiti di pubblicazione delle immagini container
Per utilizzare l'immagine container con Vertex AI, devi eseguirne il push in Artifact Registry. Scopri come eseguire il push di un'immagine container in Artifact Registry.
In particolare, devi eseguire il push dell'immagine container in un repository che soddisfi i seguenti requisiti di posizione e autorizzazioni.
Località
Quando utilizzi Artifact Registry, il repository deve utilizzare una
regione che corrisponda all'endpoint
di località in cui prevedi di creare un Model
.
Ad esempio, se prevedi di creare un Model
sull'endpoint us-central1-aiplatform.googleapis.com
, il nome completo dell'immagine container deve iniziare con us-central1-docker.pkg.dev/
. Non utilizzare un repository multiregionale per l'immagine container.
Autorizzazioni
Vertex AI deve disporre dell'autorizzazione per eseguire il pull dell'immagine container quando crei un Model
. Nello specifico, l'agente di servizio Vertex AI per il tuo progetto
deve avere le autorizzazioni del ruolo Lettore di artefatti Artifact
(roles/artifactregistry.reader
)
per il repository di immagini container.
Vertex AI utilizza l'agente di servizio Vertex AI per il tuo progetto per interagire con
altri Google Cloud servizi. Questo account di servizio ha l'indirizzo email
service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com
, dove PROJECT_NUMBER viene sostituito con il numero
di progetto
del tuo progetto Vertex AI.
Se hai eseguito il push dell'immagine container nello stesso progetto Google Cloud in cui utilizzi Vertex AI, non devi configurare alcuna autorizzazione. Le autorizzazioni predefinite concesse all'agente di servizio Vertex AI sono sufficienti.
D'altra parte, se hai eseguito il push dell'immagine container in un progettoGoogle Cloud diverso da quello in cui utilizzi Vertex AI, devi concedere il ruolo Lettore di Artifact Registry per il repository Artifact Registry all'agente di servizio Vertex AI.
Accedere agli artefatti del modello
Quando crei un Model
addestrato personalizzato senza un container personalizzato, devi specificare l'URI di una directory Cloud Storage con artefatti
del modello come campo artifactUri
. Quando
crei un Model
con un container personalizzato, fornire gli artefatti del modello in
Cloud Storage è facoltativo.
Se l'immagine container include gli artefatti del modello necessari per pubblicare le inferenze, non è necessario caricare i file da Cloud Storage.
Tuttavia, se fornisci artefatti del modello specificando il campo artifactUri
, il container deve caricarli all'avvio dell'esecuzione.
Quando Vertex AI avvia il container, imposta la variabile di ambiente AIP_STORAGE_URI
su un URI Cloud Storage che inizia con gs://
.
L'istruzione ENTRYPOINT
del container può scaricare la directory specificata da questo URI per accedere agli artefatti del modello.
Tieni presente che il valore della variabile di ambiente AIP_STORAGE_URI
non è
identico all'URI Cloud Storage specificato nel
campo artifactUri
quando crei Model
. AIP_STORAGE_URI
punta a una copia della directory degli artefatti del modello in un bucket Cloud Storage diverso, gestito da Vertex AI.
Vertex AI compila questa directory quando crei un Model
.
Non puoi aggiornare i contenuti della directory. Se vuoi utilizzare nuovi artefatti
del modello, devi creare un nuovo Model
.
Il account di servizio utilizzato per impostazione predefinita dal tuo container ha l'autorizzazione a leggere da questo URI.
D'altra parte, se specifichi un account di servizio personalizzato quando esegui il deployment di Model
in un Endpoint
, Vertex AI concede automaticamente all'account di servizio specificato il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer
) per il bucket Cloud Storage dell'URI.
Utilizza qualsiasi libreria che supporti le credenziali predefinite dell'applicazione (ADC) per caricare gli artefatti del modello; non è necessario configurare esplicitamente l'autenticazione.
Variabili di ambiente disponibili nel container
Durante l'esecuzione, l'istruzione ENTRYPOINT
del container può fare riferimento a variabili di ambiente che hai configurato manualmente, nonché a variabili di ambiente impostate automaticamente da Vertex AI. Questa sezione descrive ogni modo in cui puoi impostare le variabili di ambiente e fornisce dettagli sulle variabili impostate automaticamente da Vertex AI.
Variabili impostate nell'immagine container
Per impostare le variabili di ambiente nell'immagine container durante la creazione, utilizza
l'istruzione ENV
di Docker.
Non impostare variabili di ambiente che iniziano con il prefisso AIP_
.
L'istruzione ENTRYPOINT
del container può utilizzare queste variabili di ambiente, ma non puoi farvi riferimento in nessuno dei campi API di Model
.
Variabili impostate da Vertex AI
Quando Vertex AI inizia a eseguire il container, imposta le seguenti
variabili di ambiente nell'ambiente container. Ogni variabile inizia con
il prefisso AIP_
. Non impostare manualmente le variabili di ambiente che utilizzano questo
prefisso.
L'istruzione ENTRYPOINT
del contenitore può accedere a queste variabili. Per scoprire quali campi dell'API Vertex AI possono fare riferimento anche a queste variabili, consulta il riferimento API per ModelContainerSpec
.
Nome variabile | Valore predefinito | Come configurare il valore | Dettagli |
---|---|---|---|
AIP_ACCELERATOR_TYPE | Non impostato | Quando esegui il deployment di un Model come DeployedModel
in una risorsa Endpoint , imposta il campo dedicatedResources.machineSpec.acceleratorType . |
Se applicabile, questa variabile specifica il tipo di acceleratore utilizzato dall'istanza di macchina virtuale (VM) su cui è in esecuzione il container. |
AIP_DEPLOYED_MODEL_ID | Una stringa di cifre che identifica il DeployedModel a cui
è stato implementato il Model di questo contenitore. |
Non configurabile | Questo valore è il campo id
di DeployedModel . |
AIP_ENDPOINT_ID | Una stringa di cifre che identifica Endpoint su cui è stato
implementato Model del contenitore. |
Non configurabile | Questo valore è l'ultimo segmento del campo name di Endpoint (dopo endpoints/ ). |
AIP_FRAMEWORK | CUSTOM_CONTAINER |
Non configurabile | |
AIP_HEALTH_ROUTE | /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL In questa stringa, sostituisci ENDPOINT con il valore della variabile AIP_ENDPOINT_ID e sostituisci DEPLOYED_MODEL con il valore della variabile AIP_DEPLOYED_MODEL_ID . |
Quando crei un Model , imposta il campo containerSpec.healthRoute . |
Questa variabile specifica il percorso HTTP sul container a cui Vertex AI invia i controlli di integrità. |
AIP_HTTP_PORT | 8080 |
Quando crei un Model , imposta il campo containerSpec.ports . La prima voce in questo campo diventa il valore di
AIP_HTTP_PORT . |
Vertex AI invia controlli di attività, controlli di integrità e richieste di inferenza a questa porta sul container. Il server HTTP del container deve rimanere in ascolto delle richieste su questa porta. |
AIP_MACHINE_TYPE | Nessun valore predefinito, deve essere configurato | Quando esegui il deployment di un Model come DeployedModel
in una risorsa Endpoint , imposta il campo dedicatedResources.machineSpec.machineType . |
Questa variabile specifica il tipo di VM su cui viene eseguito il container. |
AIP_MODE | PREDICTION |
Non configurabile | Questa variabile indica che il container è in esecuzione su Vertex AI per pubblicare inferenze online. Puoi utilizzare questa variabile di ambiente per aggiungere una logica personalizzata al tuo container, in modo che possa essere eseguito in più ambienti di computing, ma utilizzare solo determinati percorsi di codice quando viene eseguito su Vertex AI. |
AIP_MODE_VERSION | 1.0.0 |
Non configurabile | Questa variabile indica la versione dei requisiti del contenitore personalizzato (questo documento) che Vertex AI si aspetta che il contenitore soddisfi. Questo documento viene aggiornato in base al versioning semantico. |
AIP_MODEL_NAME | Il valore della variabile AIP_ENDPOINT_ID |
Non configurabile | Vedi la riga AIP_ENDPOINT_ID . Questa variabile esiste per
motivi di compatibilità. |
AIP_PREDICT_ROUTE | /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict In questa stringa, sostituisci ENDPOINT con il valore della variabile AIP_ENDPOINT_ID e sostituisci DEPLOYED_MODEL con il valore della variabile AIP_DEPLOYED_MODEL_ID . |
Quando crei un Model , imposta il campo containerSpec.predictRoute . |
Questa variabile specifica il percorso HTTP sul container a cui Vertex AI inoltra le richieste di inferenza. |
AIP_PROJECT_NUMBER | Il numero di progetto del progetto Google Cloud in cui utilizzi Vertex AI | Non configurabile | |
AIP_STORAGE_URI |
|
Non configurabile | Questa variabile specifica la directory che contiene una copia degli artefatti del modello, se applicabile. |
AIP_VERSION_NAME | Il valore della variabile AIP_DEPLOYED_MODEL_ID |
Non configurabile | Vedi la riga AIP_DEPLOYED_MODEL_ID . Questa variabile esiste
per motivi di compatibilità. |
Variabili impostate nella risorsa Model
Quando crei un Model
, puoi impostare variabili di ambiente aggiuntive nel
campo containerSpec.env
.
L'istruzione ENTRYPOINT
del contenitore può accedere a queste variabili. Per scoprire quali campi dell'API Vertex AI possono fare riferimento anche a queste variabili, consulta il riferimento API per ModelContainerSpec
.
Passaggi successivi
- Scopri di più sulla pubblicazione di inferenze utilizzando un contenitore personalizzato, incluso come specificare i campi API correlati al contenitore quando importi un modello.