Artefakty a modely v MLflow
Tento článek vysvětluje artefakty MLflow a modely MLflow a to, jak se modely MLflow liší od jiných artefaktů. Tento článek také vysvětluje, jak Azure Machine Learning využívá charakteristiky modelu MLflow k umožnění zjednodušených pracovních postupů nasazení.
Artefakty a modely
V MLflow existují některé základní rozdíly mezi protokolováním jednoduchých artefaktů souborů a protokolováním modelů MLflow.
Artefakt
Artefakt je jakýkoliv soubor vygenerovaný a zachycený ze spuštění nebo úlohy experimentu. Artefaktem může být model serializovaný jako soubor pickle, váhy modelu PyTorch nebo TensorFlow nebo textový soubor obsahující koeficienty lineární regrese. Některé artefakty nemají nic společného se samotným modelem, ale obsahují konfigurace spuštění, předběžné zpracování informací nebo ukázková data. Artefakty můžou mít různé formáty.
Následující příklad zaznamená artefakt souboru.
filename = 'model.pkl'
with open(filename, 'wb') as f:
pickle.dump(model, f)
mlflow.log_artifact(filename)
Model
Model MLflow je artefakt, pro který uděláte silnější předpoklady, které poskytují jasný kontrakt mezi uloženými soubory a tím, co znamenají. Pokud ale soubory modelu zapíšete jednoduše jako artefakty, potřebujete vědět, co jednotlivé soubory znamenají a jak je načíst pro odvozování.
Modely MLflow můžete protokolovat pomocí sady SDK MLflow, například:
import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")
Protokolování modelů MLflow ve službě Azure Machine Learning má následující výhody:
- Modely MLflow můžete nasadit do koncových bodů v reálném čase nebo dávkových koncových bodech bez zadání hodnoticího skriptu nebo prostředí.
- Když nasadíte modely MLflow, nasazení automaticky vygenerují soubor swaggeru, abyste mohli použít funkci Test v studio Azure Machine Learning.
- Modely MLflow můžete použít přímo jako vstupy kanálu.
- Řídicí panel Zodpovědné AI můžete použít s modely MLflow.
Formát MLmodel
U modelů protokolovaných jako jednoduché soubory artefaktů musíte vědět, co tvůrce modelů určený pro každý soubor před načtením modelu pro odvozování. U modelů MLflow ale model načtete pomocí formátu MLmodel a určíte kontrakt mezi artefakty a tím, co představují.
Formát MLmodel ukládá prostředky do složky, která nemá žádný konkrétní požadavek na pojmenování. Mezi prostředky patří soubor s názvem MLmodel , který je jediným zdrojem pravdy pro načtení a použití modelu.
Následující obrázek ukazuje složku modelu MLflow s názvem credit_defaults_model v studio Azure Machine Learning. Složka obsahuje soubor MLmodel a další artefakty modelu.
Následující příklad ukazuje soubor MLmodel pro model počítačového zpracování obrazu natrénovaný fastai
pomocí:
artifact_path: classifier
flavors:
fastai:
data: model.fastai
fastai_version: 2.4.1
python_function:
data: model.fastai
env: conda.yaml
loader_module: mlflow.fastai
python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, 300, 300, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
Varianty modelů
Vzhledem k velkému počtu dostupných architektur strojového učení představil MLflow koncept příchutě jako způsob, jak poskytnout jedinečný kontrakt pro všechny architektury strojového učení. Příchuť označuje, co očekávat pro daný model vytvořený s konkrétní architekturou. TensorFlow má například vlastní příchuť, která určuje, jak zachovat a načíst model TensorFlow.
Vzhledem k tomu, že každá varianta modelu označuje, jak zachovat a načíst model pro danou architekturu, formát MLmodel nevynucuje jediný mechanismus serializace, který musí podporovat všechny modely. Každá příchuť proto může používat metody, které poskytují nejlepší výkon nebo nejlepší podporu podle jejich osvědčených postupů, aniž by došlo k ohrožení kompatibility se standardem MLmodel.
Následující příklad ukazuje flavors
část modelu fastai
.
flavors:
fastai:
data: model.fastai
fastai_version: 2.4.1
python_function:
data: model.fastai
env: conda.yaml
loader_module: mlflow.fastai
python_version: 3.8.12
Podpis modelu
Podpis modelu MLflow je důležitou součástí specifikace modelu, protože slouží jako datový kontrakt mezi modelem a serverem, na kterém je model spuštěný. Podpis modelu je také důležitý pro analýzu a vynucování vstupních typů modelu v době nasazení. Pokud je podpis k dispozici, MLflow vynutí vstupní typy při odeslání dat do modelu. Další informace najdete v tématu Vynucení podpisu MLflow.
Podpisy se označují v době, kdy se modely protokolují, a jsou trvalé v signature
části souboru MLmodel . Funkce autologu v MLflow automaticky provádí maximální úsilí při odvozování podpisů. Modely ale můžete protokolovat ručně, pokud odvozené podpisy nejsou ty, které potřebujete. Další informace naleznete v tématu Jak protokolovat modely s podpisy.
Existují dva typy podpisů:
- Podpisy založené na sloupcích pracují s tabulkovou daty. Pro modely s tímto typem podpisu poskytuje
pandas.DataFrame
MLflow objekty jako vstupy. - Podpisy založené na Tensoru pracují s ndimenzionálními poli nebo tensory. Pro modely s tímto podpisem MLflow poskytuje
numpy.ndarray
vstupy nebo slovník pojmenovanýchnumpy.ndarray
tensorů.
Následující příklad ukazuje signature
část pro model počítačového zpracování obrazu natrénovaný pomocí fastai
. Tento model obdrží dávku obrázků reprezentovaných jako tensory obrazce (300, 300, 3)
s jejich reprezentací RGB jako celá čísla bez znaménka. Model vypíše dávky předpovědí jako pravděpodobnosti pro dvě třídy.
signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, 300, 300, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
Tip
Azure Machine Learning vygeneruje soubor swaggeru pro nasazení modelu MLflow s dostupným podpisem. Tento soubor usnadňuje testování nasazení pomocí studio Azure Machine Learning.
Modelové prostředí
V souboru conda.yaml se zadají požadavky na spuštění modelu. MLflow dokáže automaticky rozpoznat závislosti nebo je můžete ručně označit voláním mlflow.<flavor>.log_model()
metody. Volání metody může být užitečné, pokud knihovny MLflow zahrnuté ve vašem prostředí nejsou knihovny, které jste chtěli použít.
Následující příklad conda.yaml ukazuje prostředí pro model vytvořený pomocí fastai
architektury:
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- astunparse==1.6.3
- cffi==1.15.0
- configparser==3.7.4
- defusedxml==0.7.1
- fastai==2.4.1
- google-api-core==2.7.1
- ipython==8.2.0
- psutil==5.9.0
name: mlflow-env
Poznámka:
Prostředí MLflow funguje na úrovni modelu, ale prostředí Azure Machine Learning funguje na úrovni pracovního prostoru pro registrovaná prostředí nebo úlohy/nasazení pro anonymní prostředí. Když nasadíte modely MLflow, Azure Machine Learning sestaví modelové prostředí a použije ho k nasazení. Pomocí rozhraní příkazového řádku služby Azure Machine Learning můžete toto chování přepsat a nasadit modely MLflow do konkrétního prostředí Azure Machine Learning.
Predikce funkce
Všechny modely MLflow obsahují predict
funkci, která se volá, když je model nasazen pomocí nasazení bez kódu. predict
To, co funkce vrátí, například třídy, pravděpodobnosti nebo prognózu, závisí na rozhraní nebo příchuti použité pro trénování. Dokumentace jednotlivých příchutí popisuje, co vrací.
Funkci můžete přizpůsobit predict
tak, aby se změnil způsob, jakým se odvozuje. Můžete buď protokolovat modely s jiným chováním, nebo protokolovat vlastní variantu modelu.
Pracovní postupy pro načítání modelů MLflow
Modely MLflow můžete načíst z následujících umístění:
- Přímo ze spuštění, ve kterém byly modely zaznamenány
- Ze systému souborů, ve kterém jsou modely uloženy
- Z registru modelů, ve kterém jsou modely zaregistrované
MLflow poskytuje konzistentní způsob, jak tyto modely načíst bez ohledu na umístění.
Pro načítání modelů existují dva pracovní postupy:
Načtěte zpět stejný objekt a typy, které byly zaprotokolovány. Modely můžete načíst pomocí sady MLflow SDK a získat instanci modelu s typy patřícími do trénovací knihovny. Například model Open Neural Network Exchange (ONNX) vrací
ModelProto
, zatímco model rozhodovacího stromu natrénovaný s vrácenímscikit-learn
objektuDecisionTreeClassifier
. Sloužímlflow.<flavor>.load_model()
k načtení stejného objektu modelu a typů, které byly zaznamenány.Načtěte zpět model pro spuštění odvozování. Modely můžete načíst pomocí sady MLflow SDK a získat obálku, která má zaručenou
predict
funkci. Nezáleží na tom, jakou příchuť používáte, protože každý model MLflow mápredict
funkci.MLflow zaručuje, že tuto funkci můžete volat pomocí argumentů typu
pandas.DataFrame
,numpy.ndarray
nebodict[string, numpyndarray]
, v závislosti na podpisu modelu. MLflow zpracovává převod typu na vstupní typ, který model očekává. Sloužímlflow.pyfunc.load_model()
k načtení modelu pro spuštění odvozování.