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é odvozování. Seznamte se také s různými nástroji, které můžete použít ke správě nasazení.

Nasazení modelů MLflow vs. vlastních modelů

Na rozdíl od nasazení vlastního modelu ve službě Azure Machine Learning nemusíte při nasazování modelů MLflow do služby Azure Machine Learning poskytovat bodovací skript ani prostředí pro nasazení. Místo toho 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 Pythonu

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í soubor conda.yaml ukazuje příklad závislostí conda zadaných v modelu MLflow.

conda.yaml

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

Upozorňující

MLflow automaticky rozpozná balíčky při protokolování modelu a připne verze balíčků do závislostí modelu conda. Tato automatická detekce balíčků ale nemusí vždy odrážet vaše záměry nebo požadavky. V takových případech zvažte protokolování modelů s vlastní definicí závislostí conda.

Důsledky používání modelů 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 vynutí, 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 přidruženého k modelu. Další informace o tom, jak podpisy fungují v MLflow, najdete v tématu Podpisy v MLflow.

Následující soubor ukazuje soubor MLmodel přidružený k modelu MLflow.

MLmodel

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 jsou volitelné, ale důrazně se doporučují, protože poskytují pohodlný způsob, jak včas 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.

Modely nasazené ve službě Azure Machine Learning vs. modely nasazené na integrovaném serveru MLflow

MLflow obsahuje integrované nástroje pro nasazení, které můžou vývojáři modelů použít k místnímu testování modelů. Můžete například spustit místní instanci modelu zaregistrovaného v registru serveru MLflow pomocí mlflow models serve -m my_model nebo pomocí rozhraní příkazového řádku mlflow models predictMLflow .

Odvozování pomocí dávkových a online koncových bodů

Azure Machine Learning 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 jsou podobné integrovanému serveru MLflow, ve kterých poskytují škálovatelný, synchronní a jednoduchý způsob spouštění modelů pro odvozování.

Na druhou stranu jsou dávkové koncové body schopné 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 v současné době tuto funkci nemá, i když podobnou schopnost lze dosáhnout 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.

Oddíly, které se zaměřují více na modely MLflow nasazené do online koncových bodů služby Azure Machine Learning.

Formáty vstupu

Input type Integrovaný server MLflow Online koncové body 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žití dávky1
Vstupní formát Tensoru jako serializované seznamy JSON (tensory) a slovník seznamů (pojmenované tensory)
Vstup Tensoru formátovaný jako v rozhraní API služby TF Serving

1 Zvažte použití dávkového odvozování ke zpracování souborů. Další informace najdete v tématu Nasazení modelů MLflow do dávkových koncových bodů.

Vstupní struktura

Azure Machine Learning bez ohledu na použitý typ vstupu vyžaduje, abyste v klíči input_dataslovníku zadali vstupy do datové části JSON. Vzhledem k tomu, že tento klíč není nutný při použití příkazu mlflow models serve pro obsluhu modelů, není možné datové části používat zaměnitelně pro online koncové body služby Azure Machine Learning a integrovaný server MLflow.

Důležité

Poradce pro MLflow 2.0: Všimněte si, že struktura datové části se změnila v MLflow 2.0.

Tato část ukazuje různé příklady datové části a rozdíly pro model nasazený na integrovaném serveru MLflow a na serveru odvozování azure Machine Learning.

Příklad datové části serializovaného datového rámce pandas 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]
        ]
    }
}

Příklad datové části pro 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]
    ]
}

Příklad datové části pro 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]
        ]
    }
}

Další informace o integrovaných nástrojích pro nasazení MLflow najdete v dokumentaci k MLflow integrované nástroje pro nasazení.

Přizpůsobení odvozování při nasazování modelů MLflow

Možná jste použili k vytváření hodnoticích skriptů, abyste přizpůsobili způsob provádění odvozování pro vaše vlastní modely. Při nasazování modelů MLflow do Azure Machine Learning se ale rozhoduje o tom, jak se má odvozování provést tvůrcem modelů (osoba, která model sestavila), a ne inženýrem DevOps (osoba, která se ho pokouší nasadit). Každá architektura modelu může automaticky používat konkrétní rutiny odvozování.

Pokud v každém okamžiku potřebujete změnit způsob odvozování modelu MLflow, můžete udělat jednu ze dvou 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 rozhoduje, jak se má odvozování provést a jaké výsledky model vrátí. MLflow nevynucuje žádné konkrétní chování pro způsob, jakým predict() funkce generuje výsledky.

V některýchpřípadechch Jindy můžete chtít změnit vrácené hodnoty (například pravděpodobnosti a třídy). 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í pro důležité informace o výkonu. Další alternativou je přizpůsobení způsobu odvozování modelu pomocí vlastní varianty modelu.

Přizpůsobení odvozování pomocí hodnoticího skriptu

I když modely MLflow nevyžadují bodovací skript, můžete ho v případě potřeby poskytnout. Skript bodování můžete použít k přizpůsobení způsobu provádění odvozování pro modely MLflow. Další informace o přizpůsobení odvozování najdete v tématu Přizpůsobení nasazení modelu MLflow (online koncové body) a Přizpůsobení nasazení modelů MLflow (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í mnoho způsobů nasazení modelů MLflow do online a dávkových koncových bodů. Modely můžete nasadit pomocí následujících nástrojů:

  • MLflow SDK
  • Rozhraní CLI služby Azure Machine Learning
  • Sada Azure Machine Learning SDK pro Python
  • Studio Azure Machine Learning

Každý pracovní postup má různé možnosti, zejména jaký typ výpočetních prostředků může cílit. V následující tabulce jsou uvedeny různé možnosti.

Scénář MLflow SDK Azure Machine Learning CLI/SDK Studio Azure Machine Learning
Nasazení do spravovaných online koncových bodů Viz příklad1 Viz příklad1 Viz příklad1
Nasazení do spravovaných online koncových bodů (s bodovacím skriptem) Nepodporováno3 Viz příklad Viz příklad
Nasazení do dávkových koncových bodů Nepodporováno3 Viz příklad Viz příklad
Nasazení do dávkových koncových bodů (s bodovacím skriptem) Nepodporováno3 Viz příklad Viz příklad
Nasazení do webových služeb (ACI/AKS) Starší verze podpory2 Nepodporováno2 Nepodporováno2
Nasazení do webových služeb (ACI/AKS – se skriptem vyhodnocování) Nepodporováno3 Starší verze podpory2 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 Místo toho doporučujeme přepnout na spravované online koncové body .

3 MLflow (OSS) nemá koncept hodnoticího skriptu a v současné době nepodporuje dávkové spouštění.

Který nástroj pro nasazení použít?