Le routine di inferenza personalizzate ti consentono di creare container personalizzati con codice di pre-elaborazione e post-elaborazione, senza dover gestire i dettagli della configurazione di un server HTTP o della creazione di un container da zero. Puoi utilizzare la pre-elaborazione per normalizzare e trasformare gli input o effettuare chiamate a servizi esterni per ottenere dati aggiuntivi e utilizzare la post-elaborazione per formattare l'inferenza del modello o eseguire la logica di business.
Il seguente diagramma mostra il flusso di lavoro dell'utente con e senza routine di inferenza personalizzate.
Le differenze principali sono:
Non devi scrivere un server di modelli o un Dockerfile. Il server del modello, ovvero il server HTTP che ospita il modello, viene fornito.
Puoi eseguire il deployment e il debug del modello in locale, accelerando il ciclo di iterazione durante lo sviluppo.
Creazione e deployment di un container personalizzato
Questa sezione descrive come utilizzare CPR per creare un container personalizzato con logica di pre-elaborazione e post-elaborazione ed eseguire il deployment sia in un endpoint locale che online.
Configurazione
Nel tuo ambiente devono essere installati l'SDK Vertex AI per Python e Docker.
Scrivi un'interfaccia di inferenza Predictor
personalizzata
Implementa l'interfaccia Predictor
.
Ad esempio, vedi l'implementazione di Predictor
di Sklearn.
Scrivere un Handler
personalizzato (facoltativo)
I gestori personalizzati hanno accesso all'oggetto richiesta non elaborato e sono quindi utili nei rari casi in cui è necessario personalizzare la logica relativa al server web, ad esempio per supportare intestazioni di richieste e risposte aggiuntive o per deserializzare richieste di inferenza in formato non JSON.
Ecco un notebook di esempio che implementa sia Predictor che Handler.
Sebbene non sia obbligatorio, per una migliore organizzazione e riutilizzabilità del codice, ti consigliamo di implementare la logica del server web nel gestore e la logica ML nel predittore, come mostrato nel gestore predefinito.
Crea container personalizzato
Inserisci il codice personalizzato e un file requirements.txt
aggiuntivo, se devi installare pacchetti nelle immagini, in una directory.
Utilizza l'SDK Vertex AI per Python per creare container personalizzati nel seguente modo:
from google.cloud.aiplatform.prediction import LocalModel
# {import your predictor and handler}
local_model = LocalModel.build_cpr_model(
{PATH_TO_THE_SOURCE_DIR},
f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
predictor={PREDICTOR_CLASS},
handler={HANDLER_CLASS},
requirements_path={PATH_TO_REQUIREMENTS_TXT},
)
Puoi esaminare la specifica del container per ottenere informazioni utili come l'URI dell'immagine e le variabili di ambiente.
local_model.get_serving_container_spec()
(Facoltativo) Esegui il container localmente
Questo passaggio è obbligatorio solo se vuoi eseguire e testare il container localmente, il che è utile per un'iterazione più rapida. Nell'esempio seguente, esegui il deployment in un endpoint locale e invia una richiesta di inferenza (formato per il corpo della richiesta).
with local_model.deploy_to_local_endpoint(
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
health_check_response = local_endpoint.run_health_check()
predict_response = local_endpoint.predict(
request_file={PATH_TO_INPUT_FILE},
headers={ANY_NEEDED_HEADERS},
)
Stampa la risposta del controllo di integrità e dell'inferenza.
print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)
Stampa tutti i log dei container.
local_endpoint.print_container_logs(show_all=True)
Carica in Vertex AI Model Registry
Il modello dovrà accedere agli artefatti del modello (i file dell'addestramento), quindi assicurati di averli caricati su Google Cloud Storage.
Esegui il push dell'immagine in Artifact Registry.
local_model.push_image()
Quindi, caricalo in Model Registry.
from google.cloud import aiplatform
model = aiplatform.Model.upload(
local_model=local_model,
display_name={MODEL_DISPLAY_NAME},
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)
Una volta caricato il modello nel registro dei modelli, può essere utilizzato per ottenere inferenze batch o eseguirne il deployment su un endpoint Vertex AI per ottenere inferenze online.
Esegui il deployment sull'endpoint Vertex AI
endpoint = model.deploy(machine_type="n1-standard-4")
Una volta eseguito il deployment del modello, puoi ottenere inferenze online.
Notebook di esempio
Gli esempi mostrano i diversi modi in cui puoi eseguire il deployment di un modello con preelaborazione e post-elaborazione personalizzate utilizzando Vertex AI Inference.
- Predittore personalizzato con pre/post-elaborazione personalizzata per Sklearn, crea il tuo container con l'SDK Vertex AI per Python.
- Implementa solo il caricamento dei metodi di preelaborazione, elaborazione e post-elaborazione serializzati nel predittore. Eredita il comportamento predefinito di caricamento e previsione dei modelli da
SklearnPredictor
distribuito da Vertex AI.
- Implementa solo il caricamento dei metodi di preelaborazione, elaborazione e post-elaborazione serializzati nel predittore. Eredita il comportamento predefinito di caricamento e previsione dei modelli da
- Custom Predictor, crea il tuo container con l'SDK Vertex AI Python.
- Implementazione personalizzata dell'intero Predictor.
- Predictor e gestore personalizzati, crea il tuo contenitore con l'SDK Vertex AI per Python.
- Implementazione personalizzata di Predictor e Handler.
- La personalizzazione del gestore consente al server del modello di gestire gli input CSV.
- Custom Predictor, crea il tuo container con l'SDK Vertex AI per Python e PyTorch.
- Implementazione personalizzata del predittore.
- Immagine esistente, test dell'inferenza in locale ed esecuzione del deployment dei modelli con l'SDK Vertex AI per Python.
- Utilizza il server di inferenza NVIDIA Triton per i modelli PyTorch.