Routine di inferenza personalizzate

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.