Vysvětlení formátu modelu MLflow

Dokončeno

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.