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 služby Azure Machine Learning pro odvozování v reálném čase i dávkovém odvozování a o různých nástrojích, které můžete použít ke správě nasazení.
Nasazení bez kódu
Když nasadíte modely MLflow do služby Azure Machine Learning, na rozdíl od nasazení vlastního modelu, nemusíte poskytovat bodovací skript ani prostředí. Azure Machine Learning 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 Learning:
- 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 potřebné k tomu, aby služba Azure Machine Learning prováděla odvozování, včetně
mlflow-skinny
. - Bodovací skript pro odvozování.
- Balíčky potřebné k tomu, aby služba Azure Machine Learning prováděla 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 služba Azure Machine Learning vyžadovala dynamicky instalovat nezbytné balíčky Pythonu pro modely MLflow.
Balíčky a závislosti
Azure Machine Learning automaticky generuje prostředí pro spouštění odvozování na modelech MLflow. K sestavení prostředí azure Machine Learning 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í příklad souboru conda.yaml ukazuje závislosti conda zadané v modelu MLflow.
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
Důležité
MLflow automaticky rozpozná balíčky, když protokoluje model, a připne verze balíčků do závislostí modelu conda. Tato automatická detekce balíčků nemusí odrážet vaše záměry ani požadavky. Modely můžete také protokolovat pomocí vlastního podpisu, prostředí nebo ukázek.
Modely 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 Learning zajistí, 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. Další informace o tom, jak podpisy fungují v MLflow, najdete v tématu Podpisy v MLflow.
Následující příklad MLmodel soubor zvýrazní signature
.
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 se doporučují, protože poskytují pohodlný způsob, jak 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.
Nasazení v integrovaném serveru MLflow vs. nasazení na serveru odvozování ve službě Azure Machine Learning
Vývojáři modelů můžou k místnímu testování modelů používat integrované nástroje pro nasazení MLflow. Můžete například spustit místní instanci modelu zaregistrovaného v registru serveru MLflow pomocí mlflow models serve
rozhraní příkazového řádku MLflow nebo rozhraní příkazového řádku mlflow models predict
MLflow . Další informace o integrovaných nástrojích pro nasazení MLflow najdete v dokumentaci k MLflow integrované nástroje pro nasazení.
Azure Machine Learning také 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 služby Azure Machine Learning, podobně jako integrovaný server MLflow, poskytují škálovatelný, synchronní a jednoduchý způsob spouštění modelů pro odvozování.
Dávkové koncové body služby Azure Machine Learning můžou 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 tuto funkci nemá, i když můžete dosáhnout podobné schopnosti 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.
Formáty vstupu
Následující tabulka ukazuje vstupní typy podporované integrovaným serverem MLflow a online koncovými body služby Azure Machine Learning.
Input type | Integrovaný server MLflow | Online koncový bod služby Azure Machine Learning |
---|---|---|
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žijte dávkové odvozování. Další informace najdete v tématu Nasazení modelů MLflow do dávkových koncových bodů. |
Vstup TensorFlow jako serializované seznamy JSON (tensory) a slovník seznamů (pojmenované tensory) | ✓ | ✓ |
Vstup TensorFlow pomocí rozhraní API pro obsluhu TensorFlow | ✓ |
Následující části se zaměřují na modely MLflow nasazené do online koncových bodů služby Azure Machine Learning.
Vstupní struktura
Bez ohledu na typ vstupu vyžaduje Služba Azure Machine Learning zadání vstupů v datové části JSON v klíči input_data
slovníku . Tento klíč se nevyžaduje, když použijete příkaz mlflow models serve
pro obsluhu modelů, takže datové části se nedají zaměnitelně pro online koncové body služby Azure Machine Learning a integrovaný server MLflow.
Důležité
Struktura datové části se změnila v MLflow 2.0.
Následující příklady datových částí ukazují rozdíly mezi modelem nasazeným na integrovaném serveru MLflow a serverem odvozování azure Machine Learning.
Datový rámec pandas serializovaný 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]
]
}
}
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]
]
}
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]
]
}
}
Přizpůsobení odvozování pro modely MLflow
Bodovací skripty přizpůsobují provádění odvozování pro vlastní modely. V případě nasazení modelu MLflow se ale rozhodnutí o tom, jak provést odvozování, provádí tvůrce modelů, nikoli technik nasazení. Každá architektura modelu může automaticky používat konkrétní rutiny odvozování.
Pokud potřebujete změnit způsob provádění odvozování pro model MLflow, můžete udělat jednu z následujících 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 určuje, jak provést odvozování a jaké výsledky se mají vrátit. MLflow nevynucuje žádné konkrétní chování pro způsob, jakým predict()
funkce generuje výsledky.
V některých případech můžete chtít provést předběžné zpracování nebo následné zpracování před a po spuštění modelu. Nebo můžete chtít změnit to, co se vrátí; Například pravděpodobnosti místo tříd. 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í z důvodů výkonu. Způsob odvozování modelu můžete také přizpůsobit protokolováním vlastních modelů.
Přizpůsobení odvozování pomocí hodnoticího skriptu
I když modely MLflow nevyžadují bodovací skript, můžete ho přesto poskytnout k přizpůsobení provádění odvozování pro modely MLflow v případě potřeby. Další informace o přizpůsobení odvozování najdete v tématu Přizpůsobení nasazení modelu MLflow pro online koncové body nebo Přizpůsobení nasazení modelu pomocí skriptu bodování pro 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 Learning nabízí následující nástroje pro nasazení modelů MLflow do online a dávkových koncových bodů:
- MLflow SDK
- Azure Machine Learning CLI v2
- Azure Machine Learning SDK pro Python
- Azure Machine Learning Studio
Každý nástroj má různé možnosti, zejména pro který typ výpočetních prostředků může cílit. Následující tabulka ukazuje podporu pro různé scénáře nasazení MLflow.
Scénář | MLflow SDK | Azure Machine Learning CLI/ SADA SDK nebo studio |
---|---|---|
Nasazení do spravovanýchonline koncových bodů 1 | Podporovan. Zobrazení postupného zavedení modelů MLflow do online koncových bodů | Podporovan. Viz Nasazení modelů MLflow do online koncových bodů |
Nasazení do spravovaných online koncových bodů pomocí hodnoticího skriptu | Nepodporováno3 | Podporovan. Viz Přizpůsobení nasazení modelů MLflow |
Nasazení do dávkových koncových bodů | Nepodporováno3 | Podporovan. Viz Použití modelů MLflow v dávkových nasazeních |
Nasazení do dávkových koncových bodů pomocí hodnoticího skriptu | Nepodporováno3 | Podporovan. Viz Přizpůsobení nasazení modelu pomocí hodnoticího skriptu |
Nasazení do webových služeb, jako jsou Azure Container Instances nebo Azure Kubernetes Service (AKS) | Starší verze podpory2 | Nepodporováno2 |
Nasazení do webových služeb, jako jsou Container Instances nebo AKS, pomocí hodnoticího skriptu | Nepodporováno3 | 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 Pokud je to možné, přepněte na spravované online koncové body .
3 Open source MLflow nemá koncept bodovacího skriptu a nepodporuje dávkové spouštění.
Volba nástroje pro nasazení
Sadu MLflow SDK použijte v následujících případech:
- Znáte MLflow a chcete pokračovat v používání stejných metod a
- Používáte platformu, jako je Azure Databricks, která nativně podporuje MLflow.
Pokud používáte Azure Machine Learning CLI v2 nebo SDK pro Python, použijte:
- Znáte je, nebo
- Chcete automatizovat nasazení pomocí kanálů nebo
- Chcete zachovat konfiguraci nasazení v úložišti Git.
Pokud chcete rychle nasazovat a testovat modely natrénované pomocí MLflow, použijte uživatelské rozhraní studio Azure Machine Learning.