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 illustra il flusso di lavoro dell'utente con e senza routine di inferenza personalizzate.
Le principali differenze sono:
Non devi scrivere un server di modelli o un Dockerfile. Il server di modelli, ovvero il server HTTP che ospita il modello, viene fornito.
Puoi eseguire il deployment e il debug del modello in locale, velocizzando 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 su un endpoint locale sia su un endpoint online.
Configurazione
Nel tuo ambiente devono essere installati l'SDK Agent Platform per Python e Docker.
Scrivere l'interfaccia di inferenza Predictor personalizzata
Implementa l'interfaccia Predictor.
Ad esempio, consulta l'implementazione di SklearnPredictor.
Scrivere un Handler personalizzato (facoltativo)
I gestori personalizzati hanno accesso all'oggetto della richiesta non elaborata e, pertanto, sono utili nei rari casi in cui devi personalizzare la logica correlata al server web, ad esempio supportare intestazioni di richiesta e risposta aggiuntive o deserializzare le richieste di inferenza in formato non JSON.
Ecco un notebook di esempio che implementa sia Predictor sia Handler.
Anche se non è 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 Predictor, come mostrato nel gestore predefinito.
Creare un container personalizzato
Inserisci il codice personalizzato e un file requirements.txt aggiuntivo, se devi installare pacchetti nelle immagini, in una directory.
Utilizza l'SDK Agent Platform 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) Eseguire il container in locale
Questo passaggio è obbligatorio solo se vuoi eseguire e testare il container in locale, il che è utile per un'iterazione più rapida. Nell'esempio seguente, esegui il deployment su un endpoint locale e invii 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)
Caricare in Model Registry di Gemini Enterprise Agent Platform
Il modello dovrà accedere agli artefatti del modello (i file di addestramento), quindi assicurati di averli caricati in Google Cloud Storage.
Esegui il push dell'immagine in Artifact Registry.
local_model.push_image()
Quindi, carica 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 in Model Registry, può essere utilizzato per ottenere inferenze batch o eseguirne il deployment su un endpoint Agent Platform per ottenere inferenze online.
Eseguire il deployment sull'endpoint Agent Platform
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 pre-elaborazione e post-elaborazione personalizzate utilizzando Vertex AI Inference.
- Predictor personalizzato con pre-elaborazione e post-elaborazione personalizzate per Sklearn, crea il tuo container con l'SDK Agent Platform per Python.
- Implementa solo il caricamento dei metodi di pre-elaborazione, pre-elaborazione e post-elaborazione serializzati nel Predictor. Eredita il caricamento del modello predefinito e il comportamento di previsione da
SklearnPredictordistribuito da Agent Platform.
- Implementa solo il caricamento dei metodi di pre-elaborazione, pre-elaborazione e post-elaborazione serializzati nel Predictor. Eredita il caricamento del modello predefinito e il comportamento di previsione da
- Predictor personalizzato, crea il tuo container con l'SDK Agent Platform per Python.
- Implementazione personalizzata dell'intero Predictor.
- Predictor e gestore personalizzati, crea il tuo container con l'SDK Agent Platform per Python.
- Implementazione personalizzata di Predictor e Handler.
- La personalizzazione del gestore consente al server di modelli di gestire gli input CSV.
- Predictor personalizzato, crea il tuo container con l'SDK Agent Platform per Python e PyTorch.
- Implementazione personalizzata del Predictor.
- Immagine esistente, testa l'inferenza in locale ed esegui il deployment dei modelli con l'SDK Agent Platform per Python.
- Utilizza il server di inferenza NVIDIA Triton per i modelli PyTorch.