Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.PythonModelpř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ý
.txtsoubor nebo.jsonsoubor. 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ě 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í:
- Použití vlastních knihoven Pythonu při nasazení modelů
- Zabalení vlastních artefaktů a souborů pro obsluhu modelu
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.
- 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 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:
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_runtimeze souboru metadatMLmodela 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.
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í.
Ú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.
- 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 zahrnutý v
code_paths(nebo vcode_pathv MLflow 2.x) vlog_model. 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 daným 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 zadali
.pysoubory nebo soubory kol Pythonu při protokolování modelu pomocícode_pathsnebocode_path, MLflow tyto závislosti načte automaticky.- Volání mlflow.pyfunc.spark_udf s daným argumentem