Sdílet prostřednictvím


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í.

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 predictMLflow . 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_dataslovní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ů:

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.