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

Pokyny v tomto článku vám můžou pomoct ověřit, že váš model a všechny jeho závislosti jsou před nasazením kompatibilní s obslužným prostředím, takže můžete zachytit problémy během vývoje, a nečekejte 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ů. Začněte testováním předpovědí, nejpřímější způsob, jak ověřit, že váš model a jeho závislosti fungují v prostředí, které simuluje obsluhu.

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í. Při použití výchozího nastavení env_manager="virtualenv" MLflow znovu vytvoří zaznamenané závislosti vašeho modelu v izolovaném prostředí, které simuluje produkční běhové prostředí, takže se zde projeví závislost, která chybí, je v konfliktu s jiným balíčkem nebo se ji nepodaří nainstalovat, namísto toho, aby se problém objevil až při nasazení koncového bodu.

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_uri modelu, který je nasazen do prostředí pro poskytování modelu.
  • Jedna z následujících možností:
    • input_data je v očekávaném formátu pro 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.
  • content_type ve formátu csv nebo 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čeno pro zajištění validace.
    • local je k dispozici, ale pro zajištění validace může být náchylná k chybám. Obecně se používá pouze pro rychlé ladění.
  • Zda nainstalovat do virtuálního prostředí pomocí install_mlflow aktuální verzi MLflow dostupnou ve vašem prostředí. 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)