Per utilizzare un container personalizzato al fine di fornire previsioni da un modello con addestramento personalizzato, devi fornire a Vertex AI un'immagine container Docker che esegue server web. Questo documento descrive i requisiti che un'immagine container deve per la compatibilità con Vertex AI. Il documento descrive anche in che modo Vertex AI interagisce con il tuo contenitore personalizzato una volta avviato. In altre parole, il presente documento descrive gli aspetti da considerare per la progettazione di un'immagine container da usare con Vertex AI.
Per informazioni dettagliate sull'utilizzo di un'immagine container personalizzata per la pubblicazione di previsioni, consulta Utilizzare un container personalizzato.
Requisiti delle immagini container
Quando l'immagine container Docker viene eseguita come container, quest'ultimo deve eseguire HTTP(S). Nello specifico, il container deve ascoltare e rispondere all'attività controlli di integrità, controlli di integrità e richieste di previsione. Le seguenti sottosezioni a descrivere questi requisiti in 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 il machine learning (ML) che gestisce un software che esegue un server HTTP, come TensorFlow Pubblicazione, TorchServe, oppure Server Python di KServe.
Esegui il server HTTP
Puoi eseguire un server HTTP utilizzando un'istruzione ENTRYPOINT
, un'istruzione CMD
o entrambe nel Dockerfile utilizzato per creare l'immagine container. Scopri di più sull'interazione tra CMD
e
ENTRYPOINT
.
In alternativa, puoi specificare il campo containerSpec.command
e containerSpec.args
quando crei la risorsa Model
per eseguire l'override del tuo container
rispettivamente ENTRYPOINT
e CMD
dell'immagine. La specifica di uno di questi campi consente di utilizzare un'immagine contenitore che altrimenti non soddisferebbe i requisiti a causa di un ENTRYPOINT
o CMD
incompatibile (o inesistente).
Indipendentemente da quale sia il comando eseguito dal container all'avvio, assicurati
che l'istruzione ENTRYPOINT
venga eseguita all'infinito. Ad esempio, non eseguire un comando
che avvia un server HTTP in background e poi si chiude; Se lo fai,
il container uscirà subito dopo l'avvio.
Il tuo server HTTP deve rimanere in ascolto delle richieste su 0.0.0.0
, su una porta del tuo
scelta. Quando crei una Model
, specifica questa porta nel
containerSpec.ports
.
Per informazioni su 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 attivazione quando il contenitore si avvia per verificare 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. La sonda effettua fino a 4 tentativi di stabilire una connessione,
aspettando 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é resta in ascolto delle richieste sulla porta configurata, Il probe di attività è in grado di stabilire una connessione.
Controlli di integrità
Se vuoi, puoi specificare 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 viene eseguito alcun probe di avvio e i controlli dell'integrità iniziano immediatamente. Se viene fornito il probe di avvio, i controlli di integrità non vengono eseguiti finché il probe di avvio non va a buon fine.
Le applicazioni precedenti che potrebbero richiedere un tempo di avvio aggiuntivo alla prima inizialeizzazione devono configurare una sonda di avvio. Ad esempio, se l'applicazione deve copiare gli artefatti del modello da un'origine esterna, deve essere configurato in modo da restituire l'esito positivo al termine dell'inizializzazione.
Il probe di integrità controlla se un container è pronto ad accettare il traffico. Se il probe di integrità non è fornito, Vertex AI utilizza l'integrità predefinita come descritto in Controlli di integrità predefiniti.
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
l'applicazione potrebbe restituire 200 OK
per indicare l'esito positivo anche se l'effettiva
Lo stato di caricamento del modello presente nel corpo della risposta indica che il modello potrebbe
non è stato caricato e potrebbe quindi non essere pronto ad accettare il traffico. In questo caso, un
il probe di integrità deve essere configurato in modo da restituire l'esito positivo solo quando il modello
caricati e pronti 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
un container è considerato attivo e integro.
Controlli di integrità predefiniti
Per impostazione predefinita, Vertex AI esegue intermittentemente controlli di integrità sul server HTTP mentre è in esecuzione per assicurarsi che sia pronto a gestire le richieste di previsione.
Il servizio utilizza un probe di integrità per inviare richieste HTTP GET
a un percorso di controllo di integrità configurabile sul server. Specifica questo percorso nel
containerSpec.healthRoute
campo
quando crei un Model
. Per scoprire in che modo 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à come segue:
Se il server è pronto a gestire le richieste di previsione, rispondi al prompt. richiesta di controllo di integrità entro 10 secondi con codice di stato
200 OK
. I contenuti del corpo della risposta non sono importanti; Vertex AI li ignora.Questa risposta indica che il server è integro.
Se il server non è pronto a gestire le richieste di previsione, non rispondere. alla richiesta di controllo di integrità entro 10 secondi o rispondere con un codice di stato tranne
200 OK
. Ad esempio, rispondi con il codice di stato503 Service Unavailable
.Questa risposta (o l'assenza di una risposta) indica che il server non è integro.
Se il probe di integrità riceve una risposta non integro dal tuo server
(inclusa l'assenza di risposta entro 10 secondi), invia fino a 3
di integrità a intervalli di 10 secondi. Durante questo
periodo, Vertex AI considera comunque il tuo server integro. Se la sonda
riceve una risposta integro a uno qualsiasi di questi controlli, il probe
torna alla programmazione intermittente dei controlli di integrità. Tuttavia, se il probe
riceve 4 risposte in stato non integro consecutive, Vertex AI si arresta
l'indirizzamento del traffico di previsione al container. (Se la risorsa DeployedModel
è
scalato per l'uso di più nodi di previsione, route di Vertex AI
richieste di previsione ad altri container integri).
Vertex AI non riavvia il container; il probe di integrità continua a inviare richieste di controllo di integrità intermittente al server in stato non integro. Se riceve una risposta integro, contrassegna il container come integro inizia a instradare di nuovo il traffico di previsione.
Indicazioni pratiche
In alcuni casi, è sufficiente che il server HTTP nel contenitore risponda sempre con il codice di stato 200 OK
ai controlli di salute. Se il contenitore carica le risorse prima di avviare il server, il contenitore non è in stato corretto durante il periodo di avvio e durante i periodi in cui il server HTTP non funziona. In tutti gli altri casi, risponde come se fosse in buone condizioni.
Per una configurazione più sofisticata, ti consigliamo di progettare intenzionalmente il server HTTP in modo che risponda ai controlli di integrità con uno stato non corretto in determinati momenti. Ad esempio, potresti voler bloccare il traffico di previsione su un nodo per un determinato periodo in modo che il contenitore possa eseguire la manutenzione.
Richieste di previsione
Quando un client invia una projects.locations.endpoints.predict
richiesta all' API Vertex AI, Vertex AI la inoltra come richiesta HTTPPOST
a un percorso di previsione configurabile sul tuo server. Specifica questo
percorso in containerSpec.predictRoute
campo
quando crei un Model
. Per informazioni su come il container può accedere
consulta la sezione di questo documento relativa all'attributo AIP_PREDICT_ROUTE
variabile di ambiente.
Requisiti delle richieste
Se il modello viene distribuito in un endpoint pubblico, ogni richiesta di previsione deve essere
Massimo 1,5 MB. Il server HTTP deve accettare richieste di previsione che abbiano l'intestazione HTTP Content-Type: application/json
e i relativi testi JSON nel seguente formato:
{
"instances": INSTANCES,
"parameters": PARAMETERS
}
In queste richieste:
INSTANCES è un array di uno o più valori JSON di qualsiasi tipo. Ciascuna rappresenta un'istanza per cui stai fornendo una previsione.
PARAMETERS è un oggetto JSON contenente tutti i parametri richiesti dal tuo contenitore per contribuire a fornire le previsioni sulle istanze. Vertex AI considera facoltativo il campo
parameters
, pertanto puoi progettare il contenitore in modo che lo richieda, utilizzarlo solo se fornito o ignorarlo.
Scopri di più sui requisiti del corpo della richiesta.
Requisiti di risposta
Se il modello viene distribuito in un endpoint pubblico, ogni risposta della previsione deve essere Massimo 1,5 MB. Il server HTTP deve inviare le risposte con corpi JSON che soddisfano il seguente formato:
{
"predictions": PREDICTIONS
}
In queste risposte, sostituisci PREDICTIONS con un array di valori JSON che rappresentano le previsioni generate dal container per ciascuno dei INSTANCES nella richiesta corrispondente.
Dopo che il server HTTP ha inviato questa risposta, Vertex AI aggiunge una
deployedModelId
campo
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 per la pubblicazione di immagini container
Per poter 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 a un repository che soddisfi i requisiti i requisiti relativi a località e autorizzazioni.
Località
Quando utilizzi Artifact Registry, il repository deve utilizzare una
regione corrispondente all'endpoint regionale in cui prevedi di creare un Model
.
Ad esempio, se prevedi di creare un Model
nella
Endpoint us-central1-aiplatform.googleapis.com
, il nome completo del tuo
l'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
crea un Model
. Nello specifico, l'agente di servizio Vertex AI per il progetto
deve disporre delle autorizzazioni del ruolo Lettore Artifact Registry
(roles/artifactregistry.reader
)
per il repository dell'immagine container.
Vertex AI utilizza l'agente di servizio Vertex AI per interagire con il tuo progetto
e altri servizi Google Cloud. 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
del progetto
del tuo progetto Vertex AI.
Se hai eseguito il push dell'immagine del contenitore 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 del contenitore in un progetto Google 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 elementi del modello
Quando crei un Model
addestrato in modo personalizzato senza un contenitore personalizzato, devi specificare l'URI di una directory Cloud Storage con gli elementi del modello come campo artifactUri
. Quando
crei un Model
con un container personalizzato, fornendo artefatti del modello in
Cloud Storage è facoltativo.
Se l'immagine container include gli artefatti del modello che devi pubblicare
non è necessario caricare file da Cloud Storage.
Tuttavia, se fornisci gli elementi del modello specificando il campo artifactUri
, il contenitore deve caricarli all'avvio.
Quando Vertex AI avvia il container, imposta il AIP_STORAGE_URI
a un URI Cloud Storage che inizia con gs://
.
L'istruzione ENTRYPOINT
del container può scaricare la directory specificata da questo
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 nella
artifactUri
quando crei il Model
. Al contrario,
AIP_STORAGE_URI
fa riferimento a una copia della directory degli artefatti del modello in un
altro bucket Cloud Storage, gestito da Vertex AI.
Vertex AI compila questa directory quando crei un Model
.
Non puoi aggiornare il contenuto della directory. Se vuoi usare un nuovo modello
devi creare un nuovo elemento Model
.
L'account di servizio utilizzato dal container per impostazione predefinita dispone dell'autorizzazione di lettura da questo URI.
Se invece specifichi un account di servizio personalizzato quando esegui il deployment del 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 impostazioni predefinite dell'applicazione (ADC) per caricare artefatti del modello; non devi configurare esplicitamente l'autenticazione.
Variabili di ambiente disponibili nel contenitore
Durante l'esecuzione, l'istruzione ENTRYPOINT
del container può fare riferimento all'ambiente
le variabili configurate manualmente, nonché le variabili di ambiente
viene impostata automaticamente da Vertex AI. Questa sezione descrive ogni modo
che ti consente di impostare le variabili di ambiente, oltre a fornire dettagli
impostate automaticamente da Vertex AI.
Variabili impostate nell'immagine container
Per impostare le variabili di ambiente nell'immagine container quando la crei, utilizza
ENV
di Docker
istruzioni per l'uso.
Non impostare variabili di ambiente che iniziano con il prefisso AIP_
.
L'istruzione ENTRYPOINT
del contenitore può utilizzare queste variabili di ambiente, ma
non puoi farvi riferimento in nessuna delle API di Model
campi.
Variabili impostate da Vertex AI
Quando Vertex AI avvia l'esecuzione del container, imposta quanto segue
variabili di ambiente nell'ambiente del container. Ogni variabile inizia con
il prefisso AIP_
. Non impostare manualmente le variabili di ambiente che utilizzano questo metodo
.
L'istruzione ENTRYPOINT
del contenitore può accedere a queste variabili. Per sapere quali
I campi dell'API Vertex AI possono anche fare riferimento a queste variabili. Leggi
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 dedicatedResources.machineSpec.acceleratorType
campo. |
Se applicabile, questa variabile specifica il tipo di acceleratore utilizzato l'istanza della macchina virtuale (VM) su cui è in esecuzione il container. |
AIP_DEPLOYED_MODEL_ID | Una stringa di cifre che identifica il DeployedModel su cui è stato eseguito il deployment del Model di questo contenitore. |
Non configurabile | Questo valore è il id
campo di DeployedModel . |
AIP_ENDPOINT_ID | Una stringa di cifre che identifica Endpoint su cui
È stato eseguito il deployment di Model del container. |
Non configurabile | Questo valore è l'ultimo segmento di name di Endpoint
(seguente 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 DEPLOYED_MODEL con il valore della variabile AIP_DEPLOYED_MODEL_ID . |
Quando crei un Model , imposta il containerSpec.healthRoute
campo. |
Queste variabili specificano il percorso HTTP sul contenitore a cui Vertex AI invia i controlli di integrità. |
AIP_HTTP_PORT | 8080 |
Quando crei un Model , imposta il containerSpec.ports
campo. La prima voce in questo campo diventa il valore di
AIP_HTTP_PORT . |
Vertex AI invia controlli di attività, controlli di integrità e a questa porta sul container. Il server HTTP del tuo 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 dedicatedResources.machineSpec.machineType
campo. |
Questa variabile specifica il tipo di VM su cui è in esecuzione il contenitore. |
AIP_MODE | PREDICTION |
Non configurabile | Questa variabile indica che il container è in esecuzione su Vertex AI per fornire previsioni online. Puoi utilizzare questo variabile di ambiente per aggiungere logica personalizzata al container, può essere eseguito in più ambienti di elaborazione, ma utilizza solo un certo codice quando vengono eseguiti 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 controllo delle versioni semantico. |
AIP_MODEL_NAME | Il valore della variabile AIP_ENDPOINT_ID |
Non configurabile | Consulta la riga AIP_ENDPOINT_ID . Questa variabile esiste per
per motivi di compatibilità. |
AIP_PREDICT_ROUTE | /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict In questa stringa, sostituisci ENDPOINT con il valore del AIP_ENDPOINT_ID e sostituisci
DEPLOYED_MODEL con il valore
AIP_DEPLOYED_MODEL_ID . |
Quando crei un Model , imposta il containerSpec.predictRoute
campo. |
Questa variabile specifica il percorso HTTP del container a cui Vertex AI inoltra le richieste di previsione. |
AIP_PROJECT_NUMBER | Il numero del 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 | Consulta 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 all'API per ModelContainerSpec
.
Passaggi successivi
- Scopri di più su come pubblicare le previsioni utilizzando un contenitore personalizzato, inclusa la procedura per specificare i campi dell'API relativi al contenitore quando importi un modello.