Pokyny pro nasazení modelů MLflow
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
V tomto článku se dozvíte o nasazení modelů MLflow do azure Machine Učení pro odvozování v reálném čase i dávkové odvozování. Seznamte se také s různými nástroji, které můžete použít ke správě nasazení.
Nasazení modelů MLflow vs. vlastních modelů
Na rozdíl od nasazení vlastního modelu ve službě Azure Machine Učení nemusíte při nasazování modelů MLflow do služby Azure Machine Učení poskytovat bodovací skript ani prostředí pro nasazení. Místo toho azure Machine Učení automaticky vygeneruje bodovací skript a prostředí za vás. Tato funkce se nazývá nasazení bez kódu.
Pro nasazení bez kódu azure machine Učení:
- Zajišťuje, aby byly splněny všechny závislosti balíčku uvedené v modelu MLflow.
- Poskytuje základní image nebo kurátorované prostředí MLflow, které obsahuje následující položky:
- Balíčky vyžadované pro azure machine Učení k odvozování, včetně
mlflow-skinny
. - Bodovací skript pro odvozování.
- Balíčky vyžadované pro azure machine Učení k odvozování, včetně
Tip
Pracovní prostory bez přístupu k veřejné síti: Než budete moct modely MLflow nasadit do online koncových bodů bez výchozího připojení, musíte modely zabalit (Preview). Pomocí balení modelů se můžete vyhnout nutnosti připojení k internetu, které by jinak azure machine Učení vyžadovaly dynamicky instalovat nezbytné balíčky Pythonu pro modely MLflow.
Balíčky a závislosti Pythonu
Azure Machine Učení automaticky generuje prostředí pro spouštění odvozování na modelech MLflow. Azure Machine Učení pro sestavení prostředí přečte závislosti conda zadané v modelu MLflow a přidá všechny balíčky potřebné ke spuštění serveru odvozování. Tyto další balíčky se liší v závislosti na typu nasazení.
Následující soubor conda.yaml ukazuje příklad závislostí conda zadaných v modelu MLflow.
conda.yaml
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Upozorňující
MLflow automaticky rozpozná balíčky při protokolování modelu a připne verze balíčků do závislostí modelu conda. Tato automatická detekce balíčků ale nemusí vždy odrážet vaše záměry nebo požadavky. V takových případech zvažte protokolování modelů s vlastní definicí závislostí conda.
Důsledky používání modelů s podpisy
Modely MLflow můžou obsahovat podpis, který označuje očekávané vstupy a jejich typy. Když se tyto modely nasadí do online nebo dávkových koncových bodů, Azure Machine Učení vynutí, aby počet a typy datových vstupů odpovídaly podpisu. Pokud vstupní data nelze analyzovat podle očekávání, vyvolání modelu selže.
Podpis modelu MLflow můžete zkontrolovat otevřením souboru MLmodel přidruženého k modelu. Další informace o tom, jak podpisy fungují v MLflow, najdete v tématu Podpisy v MLflow.
Následující soubor ukazuje soubor MLmodel přidružený k modelu MLflow.
MLmodel
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Tip
Podpisy v modelech MLflow jsou volitelné, ale důrazně se doporučují, protože poskytují pohodlný způsob, jak včas detekovat problémy s kompatibilitou dat. Další informace o protokolování modelů pomocí podpisů najdete v tématu Protokolování modelů s vlastním podpisem, prostředím nebo ukázkami.
Modely nasazené ve službě Azure Machine Učení vs. modely nasazené na integrovaném serveru MLflow
MLflow obsahuje integrované nástroje pro nasazení, které můžou vývojáři modelů použít k místnímu testování modelů. Můžete například spustit místní instanci modelu zaregistrovaného v registru serveru MLflow pomocí mlflow models serve -m my_model
nebo pomocí rozhraní příkazového řádku mlflow models predict
MLflow .
Odvozování pomocí dávkových a online koncových bodů
Azure Machine Učení podporuje nasazování modelů do online i dávkových koncových bodů. Tyto koncové body spouští různé technologie odvozování, které můžou mít různé funkce.
Online koncové body jsou podobné integrovanému serveru MLflow, ve kterých poskytují škálovatelný, synchronní a jednoduchý způsob spouštění modelů pro odvozování.
Na druhou stranu jsou dávkové koncové body schopné spouštět asynchronní odvozování prostřednictvím dlouhotrvajících procesů odvozování, které se můžou škálovat na velké objemy dat. Server MLflow v současné době tuto funkci nemá, i když podobnou schopnost lze dosáhnout pomocí úloh Sparku. Další informace o dávkových koncových bodech a modelech MLflow najdete v tématu Použití modelů MLflow v dávkových nasazeních.
Oddíly, které se zaměřují na modely MLflow nasazené do azure Machine Učení online koncových bodů.
Formáty vstupu
Input type | Integrovaný server MLflow | Online koncové body služby Azure Machine Učení |
---|---|---|
Datové rámce pandas serializované json v orientaci rozdělení | ✓ | ✓ |
Datové rámce pandas serializované json v orientaci záznamů | Zastaralé | |
Datové rámce pandas serializované pomocí csv | ✓ | Použití dávky1 |
Vstupní formát Tensoru jako serializované seznamy JSON (tensory) a slovník seznamů (pojmenované tensory) | ✓ | ✓ |
Vstup Tensoru formátovaný jako v rozhraní API služby TF Serving | ✓ |
1 Zvažte použití dávkového odvozování ke zpracování souborů. Další informace najdete v tématu Nasazení modelů MLflow do dávkových koncových bodů.
Vstupní struktura
Azure Machine Učení bez ohledu na použitý typ vstupu vyžaduje, abyste v klíči input_data
slovníku zadali vstupy do datové části JSON. Vzhledem k tomu, že tento klíč není při použití příkazu mlflow models serve
pro obsluhu modelů nutný, není možné datové části zaměnitelně pro koncové body Azure Machine Učení online a integrovaný server MLflow.
Důležité
Poradce pro MLflow 2.0: Všimněte si, že struktura datové části se změnila v MLflow 2.0.
Tato část ukazuje různé příklady datové části a rozdíly pro model nasazený na integrovaném serveru MLflow oproti serveru azure Machine Učení odvozování.
Příklad datové části serializovaného datového rámce pandas JSON v orientaci rozdělení
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Příklad datové části pro vstup tensoru
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Příklad datové části pro vstup pojmenovaného tensoru
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Další informace o integrovaných nástrojích pro nasazení MLflow najdete v dokumentaci k MLflow integrované nástroje pro nasazení.
Přizpůsobení odvozování při nasazování modelů MLflow
Možná jste použili k vytváření hodnoticích skriptů, abyste přizpůsobili způsob provádění odvozování pro vaše vlastní modely. Při nasazování modelů MLflow do azure Machine Učení se ale rozhodnutí o tom, jak se má odvozování provést, provádí tvůrce modelů (osoba, která model sestavila), a ne technik DevOps (osoba, která se ho pokouší nasadit). Každá architektura modelu může automaticky používat konkrétní rutiny odvozování.
Pokud v každém okamžiku potřebujete změnit způsob odvozování modelu MLflow, můžete udělat jednu ze dvou věcí:
- Změňte způsob protokolování modelu v rutině trénování.
- Přizpůsobte odvozování pomocí hodnoticího skriptu v době nasazení.
Změna způsobu protokolování modelu během trénování
Při protokolování modelu pomocí nebo mlflow.autolog
mlflow.<flavor>.log_model
, příchuť použitá pro model rozhoduje, jak se má odvozování provést a jaké výsledky model vrátí. MLflow nevynucuje žádné konkrétní chování pro způsob, jakým predict()
funkce generuje výsledky.
V některýchpřípadechch Jindy můžete chtít změnit vrácené hodnoty (například pravděpodobnosti a třídy). Jedním zřešeních Nebo pyspark.ml.Pipeline
jsou například sklearn.pipeline.Pipeline
oblíbené způsoby implementace kanálů a někdy se doporučují pro důležité informace o výkonu. Další alternativou je přizpůsobení způsobu odvozování modelu pomocí vlastní varianty modelu.
Přizpůsobení odvozování pomocí hodnoticího skriptu
I když modely MLflow nevyžadují bodovací skript, můžete ho v případě potřeby poskytnout. Skript bodování můžete použít k přizpůsobení způsobu provádění odvozování pro modely MLflow. Další informace o přizpůsobení odvozování najdete v tématu Přizpůsobení nasazení modelu MLflow (online koncové body) a Přizpůsobení nasazení modelů MLflow (dávkové koncové body).
Důležité
Pokud se rozhodnete zadat bodovací skript pro nasazení modelu MLflow, musíte také poskytnout prostředí pro nasazení.
Nástroje pro nasazení
Azure Machine Učení nabízí mnoho způsobů nasazení modelů MLflow do online a dávkových koncových bodů. Modely můžete nasadit pomocí následujících nástrojů:
- MLflow SDK
- Rozhraní CLI služby Azure Machine Learning
- Sada Azure Machine Learning SDK pro Python
- Studio Azure Machine Learning
Každý pracovní postup má různé možnosti, zejména jaký typ výpočetních prostředků může cílit. V následující tabulce jsou uvedeny různé možnosti.
Scénář | MLflow SDK | Azure Machine Učení CLI/SDK | Studio Azure Machine Learning |
---|---|---|---|
Nasazení do spravovaných online koncových bodů | Viz příklad1 | Viz příklad1 | Viz příklad1 |
Nasazení do spravovaných online koncových bodů (s bodovacím skriptem) | Nepodporováno3 | Viz příklad | Viz příklad |
Nasazení do dávkových koncových bodů | Nepodporováno3 | Viz příklad | Viz příklad |
Nasazení do dávkových koncových bodů (s bodovacím skriptem) | Nepodporováno3 | Viz příklad | Viz příklad |
Nasazení do webových služeb (ACI/AKS) | Starší verze podpory2 | Nepodporováno2 | Nepodporováno2 |
Nasazení do webových služeb (ACI/AKS – se skriptem vyhodnocování) | Nepodporováno3 | Starší verze podpory2 | Starší verze podpory2 |
1 Nasazení do online koncových bodů, které jsou v pracovních prostorech s povoleným privátním propojením, vyžaduje, abyste modely před nasazením (Preview) zabalili.
2 Místo toho doporučujeme přepnout na spravované online koncové body .
3 MLflow (OSS) nemá koncept hodnoticího skriptu a v současné době nepodporuje dávkové spouštění.
Který nástroj pro nasazení použít?
Pokud platí obě tyto podmínky, použijte sadu MLflow SDK:
- Znáte MLflow nebo používáte platformu, která nativně podporuje MLflow (například Azure Databricks).
- Chcete dál používat stejnou sadu metod z MLflow.
Pokud platí některá z těchto podmínek, použijte Azure Machine Učení CLI v2:
- Znáte Azure Machine Učení CLI v2.
- Chcete automatizovat nasazení pomocí kanálů automatizace.
- Chcete zachovat konfiguraci nasazení v úložišti Git.
Pokud chcete rychle nasazovat a testovat modely natrénované pomocí MLflow, použijte nasazení studio Azure Machine Learning uživatelského rozhraní.