Použití vlastních knihoven Pythonu se servisem modelu

V tomto článku se dozvíte, jak při zaznamenávání modelu zahrnout vlastní knihovny nebo knihovny z privátního zrcadlového serveru, abyste je mohli použít v nasazeních modelů Model Serving. Kroky popsané v této příručce byste měli dokončit, až budete mít natrénovaný model ML připravený k nasazení, ale před vytvořením koncového bodu služby Azure Databricks Model Serving.

Vývoj modelů často vyžaduje použití vlastních knihoven Pythonu, které obsahují funkce pro předběžné nebo následné zpracování, definice vlastních modelů a další sdílené nástroje. Kromě toho mnoho podnikových týmů zabezpečení podporuje použití privátních zrcadlení PyPi, jako je Nexus nebo Artifactory, aby se snížilo riziko útoků dodavatelského řetězce. Azure Databricks nabízí nativní podporu pro instalaci vlastních knihoven a knihoven z privátního zrcadla v pracovním prostoru Azure Databricks.

Požadavky

  • MLflow 1,29 nebo vyšší

Možnost 1: Použití privátního úložiště balíčků

Možnost 1 použijte, pokud vaše organizace používá privátní zrcadlo PyPI (například Nexus nebo Artifactory). Správci pracovního prostoru ho můžou nakonfigurovat jako výchozí úložiště balíčků pro tento pracovní prostor. Model Serving automaticky používá tuto konfiguraci na úrovni pracovního prostoru při vytváření prostředí modelu.

Pokud chcete nastavit privátní úložiště balíčků, přečtěte si téma Konfigurace výchozích úložišť balíčků Pythonu.

Po nakonfigurování pokračujte v poskytování modelu.

Možnost 2: Zabalení vlastních knihoven jako souborů wheel

Možnost 2 použijte, pokud privátní zrcadlení PyPI není přístupné nebo pokud máte vlastní knihovny, které nejsou k dispozici v žádném úložišti balíčků. Můžete je zabalit jako soubory kol Pythonu a zahrnout je při protokolování modelu.

Krok 1: Nahrání souboru závislostí

Databricks doporučuje nahrát soubor závislostí do Unity Catalog Volumes. Případně ho můžete nahrát do systému souborů Databricks (DBFS) pomocí uživatelského rozhraní Azure Databricks.

Abyste měli jistotu, že je knihovna pro váš poznámkový blok dostupná, musíte ji nainstalovat pomocí %pip. Pomocí %pip nainstalujete knihovnu v aktuálním poznámkovém bloku a stáhnete potřebné závislosti do clusteru.

Krok 2: Zaznamenejte model pomocí vlastní knihovny

Po instalaci knihovny a nahrání souboru wheel Pythonu do svazků Unity Catalog nebo DBFS vložte do skriptu následující kód. Do pole extra_pip_requirements zadejte cestu k souboru závislosti.

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volumes/path/to/dependency.whl"])

Pokud máte vlastní knihovnu, musíte při konfiguraci protokolování zadat všechny vlastní knihovny Pythonu přidružené k vašemu modelu. Můžete to udělat pomocí parametrů nebo vlog_model().

from mlflow.utils.environment import _mlflow_conda_env

mlflow.pyfunc.log_model(
    name="model",
    python_model=MyModel(),
    extra_pip_requirements=["/volumes/path/to/dependency.whl"],
)

Pokud je vaše vlastní knihovna uložená někam jinam než do svazku nebo DBFS, můžete zadat její umístění pomocí parametru code_paths a předat parametr "code/<wheel-file-name>.whl" v extra_pip_requirements parametr.

mlflow.pyfunc.log_model(
    name="model",
    python_model=MyModel(),
    code_paths=["/path/to/dependency.whl"], # This will be logged as `code/dependency.whl`
    extra_pip_requirements=["code/dependency.whl"],
)

Krok 3: Aktualizace modelu MLflow pomocí souborů kol Pythonu

MLflow poskytuje nástroj add_libraries_to_model() pro protokolování modelu se všemi jeho závislostmi předem zabalenými jako soubory kol Pythonu. Kromě všech ostatních knihoven, které jsou určené jako závislosti modelu, zabalí tento balíček vaše vlastní knihovny společně s modelem. To zaručuje, že knihovny používané vaším modelem jsou přesně ty, které jsou přístupné z vašeho trénovacího prostředí.

V následujícím příkladu model_uri odkazuje na registr modelu Katalogu Unity pomocí syntaxe models:/<uc-model>/<model-version>. Pokud chcete odkazovat na registr modelů pracovního prostoru (starší verze), použijte models:/<model-name>/<model-version>.

Pokud použijete identifikátor URI registru modelů, tento nástroj vygeneruje novou verzi v rámci existujícího registrovaného modelu.

import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)

Obsluha modelu

Pokud je v registru modelů k dispozici nová verze modelu s zahrnutými balíčky, můžete tuto verzi modelu přidat do koncového bodu s obsluhou modelu.

Řešení potíží s instalací balíčku

Pokud nasazení modelu selže během fáze sestavení, můžete zkontrolovat protokoly sestavení a identifikovat problémy s instalací balíčku.

  1. Přejděte na stránku Obsluha v pracovním prostoru Azure Databricks.
  2. Kliknutím na název koncového bodu otevřete podrobnosti o koncovém bodu.
  3. Klikněte na kartu Protokoly .
  4. V rozevírací nabídce vyberte verzi, která selhala.
  5. Klikněte na Vytvořit protokoly.

Zkontrolujte chybové zprávy a identifikujte problém.

Po vyřešení tohoto problému vytvořte nové nasazení nebo aktualizujte koncový bod, aby se aktivovalo nové sestavení.

Řešení potíží s úložištěm privátních balíčků

Pokud používáte privátní úložiště balíčků, mezi běžné problémy patří:

  • Chybějící balíčky: Balíček není k dispozici v nakonfigurovaném úložišti. Přidejte požadovaný balíček do privátního úložiště.
  • Problémy s připojením: Obsluha modelů se nemůže spojit s úložištěm balíčků. Ověřte připojení k síti a pravidla brány firewall.
  • Selhání ověřování: Přihlašovací údaje nakonfigurované pro vaše úložiště nejsou platné nebo nevypršela jeho platnost. Aktualizujte tajné kódy v konfiguraci pracovního prostoru.

Bezserverové poznámkové bloky používají stejné výchozí úložiště balíčků nakonfigurované pro váš pracovní prostor. Můžete použít notebook k otestování připojení, ověřování a dostupnosti balíčků instalací požadavků z vašeho souboru modelu requirements.txt před nasazením do služby Model Serving.

import mlflow
import subprocess
import sys

# Step 1: Set your model details
catalog = "<your_catalog>"
schema = "<your_schema>"
model_name = "<your_model>"
version = <your_version>

# Step 2: Download the model's requirements.txt
full_model_name = f"{catalog}.{schema}.{model_name}"
requirements_uri = f"models:/{full_model_name}/{version}/requirements.txt"

print(f"Downloading artifacts from: {requirements_uri}")
local_path = mlflow.artifacts.download_artifacts(requirements_uri)

# Step 3: Print the requirements
with open(local_path, "r") as f:
    print(f.read())

# Step 4: Install the requirements using the workspace's default package repository
print(f"Installing requirements from {local_path}...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", local_path])
print("Installation complete!")