Závislosti modelu protokolů

V tomto článku se naučíte protokolovat model a jeho závislosti jako artefakty modelu, aby byly dostupné ve vašem prostředí pro produkční úlohy, jako je obsluha modelu.

Závislosti modelu balíčku Log Pythonu

MLflow má nativní podporu některých knihoven Python ML, kde MLflow dokáže spolehlivě protokolovat závislosti pro modely, které tyto knihovny používají. Podívejte se na předdefinované varianty modelu.

MLflow například podporuje scikit-learn v modulu mlflow.sklearn a příkaz mlflow.sklearn.log_model protokoluje verzi sklearn. Totéž platí pro autologování v ML knihovnách. Další příklady najdete v úložišti GitHub mLflow.

Poznámka:

Pokud chcete povolit protokolování trasování pro úlohy generující AI, MLflow podporuje automatické protokolování OpenAI.

Pro knihovny ML, které lze nainstalovat s pip install PACKAGE_NAME==VERSION, ale nemají integrované varianty modelu MLflow, můžete tyto balíčky protokolovat pomocí metody mlflow.pyfunc.log_model . Nezapomeňte protokolovat požadavky s přesnou verzí knihovny, f"nltk=={nltk.__version__}" například místo pouhého nltk.

mlflow.pyfunc.log_model podporuje protokolování pro:

  • Veřejné a vlastní knihovny zabalené jako Python egg nebo Wheel soubory Pythonu.
  • Veřejné balíčky na PyPI a privátní hostované balíčky na vašem vlastním serveru PyPI.

S mlflow.pyfunc.log_model se MLflow pokusí odvodit závislosti automaticky. MLflow odvodí závislosti pomocí mlflow.models.infer_pip_requirements a zaloguje je jako artefakt modelu do souboru requirements.txt.

Ve starších verzích MLflow někdy neidentifikuje všechny požadavky Pythonu automaticky, zejména pokud knihovna není integrovanou variantou modelu. V těchto případech můžete zadat další závislosti s parametrem extra_pip_requirements v příkazu log_model. Podívejte se na příklad použití parametru extra_pip_requirements.

Důležité

Můžete také přepsat celou sadu požadavků pomocí parametrů conda_env a pip_requirements, ale obecně se to nedoporučuje, protože to přepíše závislosti, které MLflow automaticky převezme. Podívejte se na příklad použití parametru pip_requirements k přepsání požadavků.

Vlastní protokolování modelu

V situacích, kdy je potřeba přizpůsobitější protokolování modelu, můžete:

  • Napište vlastní model Pythonu. Díky tomu můžete podtřídu mlflow.pyfunc.PythonModel přizpůsobit inicializaci a predikci. Tento přístup funguje dobře pro přizpůsobení modelů jen pro Python.
    • Jednoduchý příklad najdete v příkladu přidání N modelu.
    • Složitější příklad najdete v příkladu vlastního modelu XGBoost.
  • Napište vlastní příchuť. V tomto scénáři můžete protokolování přizpůsobit více než ve výchozí verzi pyfunc, ale k implementaci toho vyžaduje více úsilí.

Vlastní kód Pythonu

Můžete mít závislosti kódu Pythonu, které se nedají nainstalovat pomocí %pip install příkazu, například jeden nebo více .py souborů.

Při protokolování modelu můžete MLflow říct, že model může tyto závislosti najít v zadané cestě pomocí parametru code_paths (nebo code_path v MLflow 2.x) v mlflow.pyfunc.log_model. MLflow ukládá všechny soubory nebo adresáře předané pomocí tagů code_paths nebo code_path jako artefakty spolu s modelem v adresáři kódu. Při načítání modelu přidá MLflow tyto soubory nebo adresáře do cesty Pythonu. Tento postup také funguje s vlastními Python Wheel soubory, které mohou být součástí modelu pomocí code_paths nebo code_path, podobně jako soubory .py.

MLflow 3

mlflow.pyfunc.log_model(
   name=name,
   code_paths=[filename.py],
   data_path=data_path,
   conda_env=conda_env,
)

MLflow 2.x

mlflow.pyfunc.log_model(
   artifact_path=artifact_path,
   code_path=[filename.py],
   data_path=data_path,
   conda_env=conda_env,
)

Zaznamenejte přímé a tranzitivní závislosti

S MLflow 3 si můžete zvolit zaznamenávat přímé a tranzitivní závislosti nastavením této proměnné prostředí MLFLOW_LOCK_MODEL_DEPENDENCIES.

import os
os.environ["MLFLOW_LOCK_MODEL_DEPENDENCIES"] = "true"

# Now when you log your model, MLflow captures
# both direct and transitive dependencies

mlflow.sklearn.log_model(
    model,
    "my_model",
)

Zaznamenávání závislostí modelu nepythonových balíčků

MLflow automaticky nevybírá závislosti mimo Python, jako jsou balíčky Java, balíčky R a nativní balíčky (například balíčky Linuxu). U těchto balíčků je potřeba protokolovat další data.

  • Seznam závislostí: Databricks doporučuje protokolování artefaktu pomocí modelu určujícího tyto závislosti mimo Python. Může to být jednoduchý .txt soubor nebo .json soubor. mlflow.pyfunc.log_model umožňuje zadat tento další artefakt pomocí argumentu artifacts .
  • Vlastní balíčky: Stejně jako u vlastních závislostí Pythonu výše musíte zajistit, aby byly balíčky dostupné ve vašem prostředí nasazení. V případě packageů, které se nacházejí v centrálním umístění, jako je Maven Central nebo vaše vlastní úložiště, ujistěte se, že toto umístění je dostupné během doby hodnocení nebo poskytování. U privátních balíčků, které nejsou hostované jinde, můžete protokolovat balíčky společně s modelem jako artefakty.

Nasazení modelů se závislostmi

Při nasazování modelu z MLflow Tracking Serveru nebo registru modelů je potřeba zajistit, aby prostředí nasazení mělo nainstalované správné závislosti. Nejjednodušší cesta může záviset na vašem režimu nasazení: dávkovém nebo streamování nebo online poskytování a na typech závislostí.

Pro všechny režimy nasazení doporučuje Databricks spustit odvozování na stejné verzi modulu runtime, kterou jste použili během trénování, protože modul Runtime Databricks, ve kterém jste vytvořili model, už má nainstalované různé knihovny. MLflow v Databricks automaticky uloží tuto verzi runtime do MLmodel souboru metadat v poli databricks_runtime, například databricks_runtime: 10.2.x-cpu-ml-scala2.12.

Online obsluha: Obsluha modelu

Databricks nabízí Model Serving, což umožňuje vystavení vašich modelů strojového učení MLflow jako škálovatelné koncové body rozhraní REST API.

Pro závislosti v Pythonu v souboru requirements.txt se Databricks a MLflow postarají o všechno, co se týká veřejných závislostí z PyPI. Podobně pokud jste zadali .py soubory nebo soubory kol Pythonu při protokolování modelu pomocí code_paths (nebo code_path v MLflow 2.x), MLflow tyto závislosti načte automaticky.

Důležité

Běhová prostředí Databricks Runtime ML standardně obsahují mlflow-skinny namísto úplného balíčku mlflow. Když v jednom z těchto runtime prostředí zalogujete model pyfunc bez zadání pip_requirements, MLflow zachytí mlflow-skinny v poli conda.yaml modelu a Model Serving nemůže sestavit image kontejneru, protože vyžaduje mlflow. Zadejte mlflow==<version> při zalogování modelu v pip_requirements. Podrobnosti najdete v tématu Nasazení Python kódu pomocí obsluhy modelu.

Pro tyto scénáře obsluhy modelu si projděte následující:

Online obsluha: systémy třetích stran nebo kontejnery Dockeru

Pokud váš scénář vyžaduje obsluhu řešení třetích stran nebo vlastní řešení založené na Dockeru, můžete model exportovat jako kontejner Dockeru.

Databricks doporučuje následující kroky pro službu třetích stran, která automaticky řeší závislosti Pythonu. U závislostí mimo Python je ale potřeba kontejner upravit tak, aby je zahrnoval.

Dávkové úlohy a úlohy streamování

Dávkové a streamingové vyhodnocování by se mělo spouštět jako úlohy Lakeflow. Úloha v poznámkovém bloku často postačuje a nejjednodušší způsob, jak připravit kód, je použít Databricks Model Registry k vygenerování hodnotícího poznámkového bloku.

Následující popis popisuje proces a postup, který se má provést, aby se zajistilo, že jsou závislosti nainstalovány a použity odpovídajícím způsobem:

  1. Spusťte cluster bodování se stejnou verzí Databricks Runtime, jakou jste použili během trénování. Přečtěte si pole databricks_runtime ze souboru metadat MLmodel a spusťte cluster s tou verzí modulu runtime.

    • Můžete to provést ručně v konfiguraci clusteru nebo automatizovat pomocí vlastní logiky. Pro automatizaci formát verze runtime, který načítáte ze souboru metadat v Jobs API a Clusters API.
  2. Dále nainstalujte všechny závislosti mimo Python. Pokud chcete zajistit, aby vaše závislosti mimo Python byly přístupné pro vaše prostředí nasazení, můžete:

    • Před spuštěním odvozování ručně nainstalujte závislosti modelu mimo Python do clusteru Databricks jako součást konfigurace clusteru.
    • Alternativně můžete do nasazení bodovací úlohy napsat vlastní logiku, která automatizuje instalaci závislostí do clusteru. Za předpokladu, že jste uložili závislosti mimo Python jako artefakty, jak je popsáno v Protokolování závislostí modelu balíčků mimo Python, tato automatizace může instalovat knihovny pomocí Libraries API. Nebo můžete napsat konkrétní kód, který vygeneruje inicializační skript s oborem clusteru pro instalaci závislostí.
  3. Úloha hodnocení nainstaluje pythonové závislosti do prostředí provádění úlohy. Registr modelů v Databricks umožňuje vygenerovat poznámkový blok pro odvozování, který to udělá za vás.

    • Pokud k vygenerování hodnoticího poznámkového bloku použijete registr modelů Databricks, obsahuje poznámkový blok kód pro instalaci závislostí Pythonu do souboru modelu requirements.txt . Pro úlohu poznámkového bloku pro dávkové nebo streamování bodování inicializuje tento kód prostředí poznámkového bloku, aby se nainstalovaly a připravily závislosti modelu pro váš model.
  4. MLflow zpracovává jakýkoli vlastní kód Pythonu zahrnutý v code_paths (nebo v code_path v MLflow 2.x) v log_model. Tento kód se přidá do cesty Pythonu při zavolání metody modelu predict() . Můžete to provést také ručně:

    Poznámka:

    Pokud jste zadali .py soubory nebo soubory kol Pythonu při protokolování modelu pomocí code_paths nebo code_path, MLflow tyto závislosti načte automaticky.