Sdílet prostřednictvím


Ověření před nasazením pro obsluhu modelů

Pokyny v tomto článku vám můžou pomoct zachytit problémy s modelem před čekáním na proces nasazení koncového bodu. Databricks doporučuje projít tyto kroky ověřování, aby se zajistilo lepší vývojové prostředí při používání obsluhy modelů.

Testování předpovědí před nasazením

Před nasazením modelu do obsluhujícího koncového bodu otestujte offline předpovědi s virtuálním prostředím pomocí mlflow.models.predict a vstupních příkladů. MLflow poskytuje rozhraní API pro ověřování, která simulují prostředí nasazení a umožňují testování upravených závislostí.

Existují dvě možnosti ověřování před nasazením: rozhraní PYTHON API MLflow a rozhraní příkazového řádku MLflow. Podrobnější pokyny najdete v dokumentaci MLflow k testování předpovědí.

Můžete zadat následující parametry:

  • Model model_uri , který se nasadí do obsluhy modelu.
  • Jedna z následujících možností:
    • Očekávaný input_data formát volání mlflow.pyfunc.PyFuncModel.predict() modelu.
    • Ten input_path definuje soubor obsahující vstupní data, která budou načtena a použita pro volání predict.
  • Formát content_type nebo incsv.json
  • Volitelné output_path pro zápis předpovědí do souboru. Pokud tento parametr vynecháte, předpovědi se vytisknou na stdout.
  • Správce prostředí, env_manager který se používá k sestavení prostředí pro obsluhu:
    • Výchozí hodnota je virtualenv. Doporučuje se pro obsluhu ověření.
    • local je k dispozici, ale potenciálně náchylná k chybám pro obsluhu ověřování. Obecně se používá pouze pro rychlé ladění.
  • Zda nainstalovat aktuální verzi MLflow, která je ve vašem prostředí s virtuálním prostředím pomocí install_mlflow. Toto nastavení je ve výchozím nastavení nastaveno na Falsehodnotu .
  • Ať už chcete aktualizovat a otestovat různé verze závislostí balíčků, pro řešení potíží nebo ladění. Můžete to zadat jako seznam přepsání nebo přidání řetězcových závislostí pomocí argumentu override, pip_requirements_override.

Například:

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"],
)

Aktualizace závislostí modelu

Pokud dojde k nějakým problémům se závislostmi zadanými v protokolovaném modelu, můžete požadavky aktualizovat pomocí rozhraní příkazového řádku MLflow nebo mlflow.models.model.update_model_requirements() v rozhraní PYTHON API MLflow, aniž byste museli protokolovat jiný model.

Následující příklad ukazuje, jak aktualizovat pip_requirements.txt protokolovaný model na místě.

Existující definice můžete aktualizovat pomocí zadaných verzí balíčků nebo do souboru pip_requirements.txt přidat neexistující požadavky. Tento soubor se nachází v artefaktu modelu MLflow v zadaném model_uri umístění.

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"],
)

ověření vstupu modelu před nasazením

Model obsluhující koncové body očekává speciální formát vstupu JSON. Pomocí validate_serving_input v MLflow můžete před nasazením ověřit, že vstup modelu funguje na obslužném koncovém bodu.

Dále uvádíme příklad automaticky vytvořeného kódu v záložce artefaktů spuštění, pokud je váš model protokolován s vzorovým příkladem vstupu.

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)

Pomocí rozhraní convert_input_example_to_serving_input API můžete také otestovat všechny vstupní příklady proti protokolovanému modelu a vygenerovat platný JSON pro obslužný vstup.

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)

Ruční testování obsluhy modelu

Chování modelu můžete ručně otestovat pomocí následujícího postupu:

  1. Otevřete poznámkový blok a připojte se ke clusteru pro všechny účely, který používá verzi Databricks Runtime, nikoli Databricks Runtime pro Machine Learning.
  2. Načtěte model pomocí MLflow a zkuste ho odsud ladit.

Model můžete také načíst místně na počítači a ladit ho odsud. Načtěte model místně pomocí následujícího příkazu:

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)