Sdílet prostřednictvím


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_pathstejně 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í 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ě 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í:

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.

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:

  1. 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 ze MLmodel 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ů.
  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 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í.
  3. 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.

  4. MLflow zpracovává jakýkoli vlastní kód Pythonu, který je součástí parametru code_path v log_modelsouboru . 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 při protokolování modelu pomocí argumentu zadali .py soubory nebo soubory kol Pythonu code_path , MLflow tyto závislosti automaticky načte.