Vysvětlení formátu modelu MLflow
MLflow používá formát MLModel k uložení všech relevantních prostředků modelu do složky nebo adresáře. Jedním ze základních souborů v adresáři je MLmodel
soubor. Soubor MLmodel
je jediným zdrojem pravdy o tom, jak se má model načíst a použít.
Prozkoumání formátu souboru MLmodel
Soubor MLmodel
může zahrnovat:
-
artifact_path
: Během tréninkové úlohy se model uloží na tuto cestu. -
flavor
: Knihovna strojového učení, pomocí které byl model vytvořen. -
model_uuid
: Jedinečný identifikátor registrovaného modelu. -
run_id
: Jedinečný identifikátor spuštění úlohy, při kterém byl model vytvořen. -
signature
: Určuje schéma vstupů a výstupů modelu:-
inputs
: Platný vstup do modelu. Například podmnožina trénovací datové sady. -
outputs
: Platný výstup modelu Například předpovědi modelu pro vstupní datovou sadu.
-
Příklad souboru MLmodel vytvořeného pro model počítačového zpracování obrazu natrénovaný pomocí fastai
může vypadat takto:
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]}
}]'
Nejdůležitějšími věcmi, které je potřeba nastavit, jsou příchuť a podpis.
Zvolte příchuť.
varianta je knihovna strojového učení, pomocí které byl model vytvořen.
Chcete-li například vytvořit model klasifikace obrázků pro detekci rakoviny prsu, používáte fastai
. Fastai je modul v MLflow, který vám říká, jak se má model uložit a načíst. Vzhledem k tomu, že každá varianta modelu určuje, jak mají být modely uchovány a načteny, formát MLModel nevynucuje jednotný mechanismus serializace, který všechny modely musí podporovat. Takové rozhodnutí umožňuje každé variantě používat metody, které poskytují nejlepší výkon nebo nejlepší podporu podle jejich osvědčených postupů – bez ohrožení kompatibility se standardem MLModel.
Python function
varianta je výchozí rozhraní modelu pro modely vytvořené ze spuštění MLflow. Jakýkoli model Pythonu MLflow je možné načíst jako model python_function
, který umožňuje pracovním postupům, jako je nasazení, pracovat s libovolným modelem Pythonu bez ohledu na to, která architektura byla použita k vytvoření modelu. Tato interoperabilita je nesmírně výkonná, protože zkracuje dobu provozuschopnosti v několika prostředích.
Příklad funkce v jazyce Python může vypadat takto:
artifact_path: pipeline
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.8.5
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.2.0
mlflow_version: 2.1.0
model_uuid: b8f9fe56972e48f2b8c958a3afb9c85d
run_id: 596d2e7a-c7ed-4596-a4d2-a30755c0bfa5
signature:
inputs: '[{"name": "age", "type": "long"}, {"name": "sex", "type": "long"}, {"name":
"cp", "type": "long"}, {"name": "trestbps", "type": "long"}, {"name": "chol",
"type": "long"}, {"name": "fbs", "type": "long"}, {"name": "restecg", "type":
"long"}, {"name": "thalach", "type": "long"}, {"name": "exang", "type": "long"},
{"name": "oldpeak", "type": "double"}, {"name": "slope", "type": "long"}, {"name":
"ca", "type": "long"}, {"name": "thal", "type": "string"}]'
outputs: '[{"name": "target", "type": "long"}]'
Konfigurace podpisu
Kromě příchutí obsahuje soubor MLmodel
také podpisy, které slouží jako datové kontrakty mezi modelem a serverem, na kterém běží váš model.
Existují dva typy podpisů:
-
sloupcové: používá se pro tabulková data s
pandas.Dataframe
jako vstupy. -
založené na Tensoru: používá se pro ndimenzionální pole nebo tensory (často používané pro nestrukturovaná data, jako je text nebo obrázky), s
numpy.ndarray
jako vstupy.
Při registraci modelu se vytvoří jak soubor MLmodel
, tak i podpis. Když povolíte automatickélogování MLflow, podpis se odvodí nejlepším způsobem. Pokud chcete, aby se podpis odlišil, musíte model protokolovat ručně.
Vstupy a výstupy podpisu jsou důležité při nasazování modelu. Pokud pro modely MLflow použijete nasazení bez psaní kódu služby Azure Machine Learning, dojde k vynucení vstupů a výstupů nastavených v podpisu modelu. Jinými slovy, když odesíláte data do nasazeného modelu MLflow, musí očekávané vstupy a výstupy odpovídat schématu definovanému v podpisu.
Spropitné
Přečtěte si další informace o podpisech modelu v MLflow.