Condividi tramite


Convalida preliminare della distribuzione per la gestione del modello

Le indicazioni contenute in questo articolo consentono di rilevare i problemi relativi al modello prima di attendere il processo di distribuzione dell'endpoint. Databricks consiglia di eseguire questi passaggi di convalida per garantire un'esperienza di sviluppo migliore quando si usa la gestione del modello.

Testare le stime prima della distribuzione

Prima di distribuire il modello all'endpoint di servizio, testa le predizioni offline in un ambiente virtuale utilizzando mlflow.models.predict ed esempi di input. MLflow fornisce API di convalida che simulano l'ambiente di distribuzione e consentono il test delle dipendenze modificate.

Sono disponibili due opzioni di convalida pre-distribuzione: l'API Python MLflow e la riga di comando MLflow. Per indicazioni più dettagliate, vedere la documentazione di MLflow per testare le previsioni.

È possibile specificare i parametri seguenti:

  • Oggetto model_uri del modello distribuito nella gestione del modello.
  • Uno dei seguenti:
    • Oggetto input_data nel formato previsto per la mlflow.pyfunc.PyFuncModel.predict() chiamata del modello.
    • Oggetto input_path che definisce un file contenente i dati di input che verranno caricati e usati per la chiamata a predict.
  • Il formato content_type in csv o json.
  • Facoltativo output_path per scrivere le stime in un file. Se si omette questo parametro, le stime vengono stampate in stdout.
  • Gestore dell'ambiente, env_manager, usato per compilare l'ambiente per la gestione:
    • Il valore predefinito è virtualenv. Consigliato per la convalida.
    • local è disponibile, ma potenzialmente soggetto a errori per la gestione della convalida. In genere viene usato solo per il debug rapido.
  • Se si desidera installare la versione corrente di MLflow presente nell’ambiente con l'ambiente virtuale utilizzando install_mlflow. L'impostazione predefinita è False.
  • Se aggiornare e testare versioni diverse delle dipendenze del pacchetto per la risoluzione dei problemi o il debug. È possibile specificare questa opzione come elenco di sostituzioni o aggiunte di dipendenze di stringa usando l'argomento override pip_requirements_override.

Per esempio:

import mlflow

run_id = "..."
model_uri = f"runs:/{run_id}/model"

mlflow.models.predict(
  model_uri=model_uri,
  input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
  content_type="json",
  env_manager="virtualenv",
  install_mlflow=False,
  pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)

Aggiornare le dipendenze del modello

Se si verificano problemi con le dipendenze specificate con un modello registrato, è possibile aggiornare i requisiti usando l'interfaccia della riga di comando di MLflow o mlflow.models.model.update_model_requirements() nell'API Python MLflow senza dover registrare un altro modello.

Nell'esempio seguente viene illustrato come aggiornare l'oggetto pip_requirements.txt di un modello registrato direttamente.

È possibile aggiornare le definizioni esistenti con le versioni del pacchetto specificate o aggiungere requisiti inesistenti al file di pip_requirements.txt. Questo file si trova all’interno dell'artefatto del modello MLflow nel percorso specificato model_uri .

from mlflow.models.model import update_model_requirements

update_model_requirements(
  model_uri=model_uri,
  operation="add",
  requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)

Convalidare l'input del modello prima della distribuzione

I modelli che servono gli endpoint prevedono un formato speciale di input JSON. È possibile verificare che l'input del modello funzioni su un endpoint di servizio prima della distribuzione usando validate_serving_input in MLflow.

Di seguito è riportato un esempio del codice generato automaticamente nella scheda artefatti dell'esecuzione se il modello viene registrato con un esempio di input valido.

from mlflow.models import validate_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

serving_payload = """{
 "messages": [
   {
     "content": "How many product categories are there?",
     "role": "user"
   }
 ]
}
"""

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

È anche possibile testare qualsiasi esempio di input rispetto al modello registrato usando l'API convert_input_example_to_serving_input per generare un input di gestione JSON valido.

from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction

serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

Testare manualmente la gestione del modello

È possibile testare manualmente il comportamento di gestione del modello attenendosi alla procedura seguente:

  1. Aprire un notebook e collegarsi a un cluster all-purpose che usa una versione di Databricks Runtime, non Databricks Runtime per Machine Learning.
  2. Caricare il modello usando MLflow e provare a eseguire il debug da questa posizione.

È anche possibile caricare il modello in locale nel PC ed eseguire il debug da questa posizione. Caricare il modello in locale usando quanto segue:

import os
import mlflow

os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"

ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
    mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)

conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env

mlflow.pyfunc.load_model(local_path/artifact_path)