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 automatickélogování s těmito knihovnami ML. 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 soubory kolečka Pythonu nebo 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 zaprokoluje je do requirements.txt
souboru jako artefakt modelu.
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
log_model
v příkazu. Podívejte se na příklad použití parametru extra_pip_requirements.
Důležité
Můžete také přepsat celou sadu požadavků conda_env
pomocí parametrů, 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ž obecnou
pyfunc
příchuť, ale k implementaci toho potřebujete více práce.
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 dokáže tyto závislosti najít v zadané cestě pomocí parametru code_path
v modelu mlflow.pyfunc.log_model. MLflow ukládá všechny soubory nebo adresáře předané jako code_path
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. Tato trasa také funguje s vlastními soubory kol Pythonu, které můžou být součástí modelu pomocí , code_path
stejně jako .py
soubory.
mlflow.pyfunc.log_model( artifact_path=artifact_path,
code_path=[filename.py],
data_path=data_path,
conda_env=conda_env,
)
Protokolování závislostí modelu balíčků mimo Python
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í argumentuartifacts
. - 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ě balíčků v centrálním umístění, jako je Maven Central nebo vlastní úložiště, se ujistěte, že je umístění dostupné při vyhodnocování nebo obsluhě. 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 modulu runtime do MLmodel
souboru metadat do databricks_runtime
pole, například databricks_runtime: 10.2.x-cpu-ml-scala2.12
.
Online obsluha: Puzzle AI Model Obsluha
Databricks nabízí obsluhu modelů, kde jsou modely strojového učení MLflow vystavené jako škálovatelné koncové body rozhraní REST API.
Pro závislosti Pythonu requirements.txt
v souboru zpracovává Databricks a MLflow všechno pro veřejné závislosti PyPI. Podobně pokud jste zadali .py
soubory nebo soubory kol Pythonu při protokolování modelu pomocí argumentu code_path
, MLflow tyto závislosti načte automaticky.
Pro tyto scénáře obsluhy modelu si projděte následující:
- Použití vlastních knihoven Pythonu s obsluhou modelů
- Zabalení vlastních artefaktů a souborů pro obsluhu modelu
Pro závislosti Pythonu requirements.txt
v souboru zpracovává Databricks a MLflow všechno pro veřejné závislosti PyPI. Podobně pokud jste zadali .py
soubory nebo soubory kol Pythonu při protokolování modelu pomocí argumentu code_path
, MLflow tyto závislosti načte automaticky.
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í informace pro obsluhu třetích stran, která automaticky zpracovává závislosti Pythonu. U závislostí mimo Python je ale potřeba kontejner upravit tak, aby je zahrnoval.
Integrace Dockeru od MLflow pro řešení obsluhy založené na Dockeru: Modely MLflow build-docker
Integrace MLflow ve službě Azure Machine Learning:
Dávkové úlohy a úlohy streamování
Dávkové a streamované bodování by se měly spouštět jako úlohy Databricks. Úloha poznámkového bloku často stačí a nejjednodušší způsob přípravy kódu spočívá v použití registru modelů Databricks k vygenerování bodují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:
Spusťte cluster bodování se stejnou verzí Databricks Runtime, jakou jste použili během trénování.
databricks_runtime
Přečtěte si pole zeMLmodel
souboru metadat a spusťte cluster s danou verzí modulu runtime.- Můžete to provést ručně v konfiguraci clusteru nebo automatizovat pomocí vlastní logiky. Pro automatizaci formát verze modulu runtime, který načítáte ze souboru metadat v rozhraní API úloh a rozhraní API clusterů.
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 závislostech modelu balíčků protokolů mimo Python, může tato automatizace instalovat knihovny pomocí rozhraní API knihoven. Nebo můžete napsat konkrétní kód pro vygenerování inicializačního skriptu s oborem clusteru pro instalaci závislostí.
Vaše bodovací úloha nainstaluje závislosti Pythonu do spouštěcího prostředí ú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.
- 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
MLflow zpracovává jakýkoli vlastní kód Pythonu, který je součástí parametru
code_path
vlog_model
souboru . Tento kód se přidá do cesty Pythonu při zavolání metody modelupredict()
. Můžete to provést také ručně:- Volání mlflow.pyfunc.spark_udf s argumentem
env_manager=['virtualenv'/'conda']
- Extrahování požadavků pomocí mlflow.pyfunc.get_model_dependencies a jejich instalace pomocí %pip install.
Poznámka:
Pokud jste při protokolování modelu pomocí argumentu zadali
.py
soubory nebo soubory kol Pythonucode_path
, MLflow tyto závislosti automaticky načte.- Volání mlflow.pyfunc.spark_udf s argumentem