Megosztás a következőn keresztül:


Útmutató az MLflow-modellek üzembe helyezéséhez

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

Ebben a cikkben megismerheti az MLflow-modellek Azure Machine Learningben való üzembe helyezését valós idejű és kötegelt következtetés céljából, valamint az üzemelő példányok kezeléséhez használható különböző eszközöket.

Kód nélküli üzembe helyezés

Ha MLflow-modelleket helyez üzembe az Azure Machine Learningben, az egyéni modell üzembe helyezésével ellentétben nem kell pontozószkriptet vagy környezetet megadnia. Az Azure Machine Learning automatikusan létrehozza a pontozási szkriptet és a környezetet. Ezt a funkciót kód nélküli üzembe helyezésnek nevezzük.

Kód nélküli üzembe helyezés esetén az Azure Machine Learning:

  • Biztosítja, hogy az MLflow modellben jelzett összes csomagfüggőség teljesüljön.
  • Egy MLflow alaprendszerképet vagy válogatott környezetet biztosít, amely a következő elemeket tartalmazza:
    • Az Azure Machine Learning következtetés végrehajtásához szükséges csomagok, beleértve a mlflow-skinny.
    • A következtetés végrehajtásához használandó pontozó szkript.

Csomagok és függőségek

Az Azure Machine Learning automatikusan létrehoz környezeteket, hogy következtetést futtasson az MLflow-modelleken. A környezetek létrehozásához az Azure Machine Learning beolvassa az MLflow-modellben megadott Conda-függőségeket, és hozzáadja a következtetési kiszolgáló futtatásához szükséges csomagokat. Ezek az extra csomagok az üzembe helyezés típusától függően változnak.

Az alábbi conda.yaml fájl egy MLflow-modellben megadott Conda-függőségeket mutatja be.

channels:
- conda-forge
dependencies:
- python=3.12.3
- pip<=23.1.2
- pip:
  - mlflow
  - scikit-learn==1.6.1
  - psutil==5.9.4
name: mlflow-env

Important

Az MLflow automatikusan észleli a csomagokat, amikor naplóz egy modellt, és rögzíti a csomagverziókat a modell Conda-függőségeiben. Előfordulhat, hogy ez az automatikus csomagészlelés nem felel meg a szándékainak vagy követelményeinek. Másik lehetőségként naplózhatja azokat a modelleket, amelyek egyéni aláírást, környezetet vagy mintákat használnak.

Aláírásokat tartalmazó modellek

Az MLflow-modellek tartalmazhatnak olyan aláírást, amely a várt bemeneteket és azok típusait jelzi. Az ilyen modellek online vagy kötegelt végpontokon való üzembe helyezésekor az Azure Machine Learning biztosítja, hogy az adatbemenetek száma és típusai megfeleljenek az aláírásnak. Ha a bemeneti adatok nem elemezhetők a várt módon, a modell meghívása meghiúsul.

Az MLflow-modell aláírását az MLmodel-fájl megnyitásával vizsgálhatja meg. Az aláírások MLflow-ban való működéséről további információt az Aláírások az MLflow-ban című témakörben talál.

Az alábbi példa MLmodel-fájl kiemeli a 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.12.3
  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

Az MLflow-modellek aláírásai azért ajánlottak, mert kényelmes módot biztosítanak az adatkompatibilitási problémák észlelésére. Az aláírásokkal rendelkező modellek naplózásáról további információt az egyéni aláírást, környezetet vagy mintákat használó naplómodellek című témakörben talál.

Üzembe helyezés a beépített MLflow-kiszolgálón és az Azure Machine Learning-következtetési kiszolgálón történő üzembe helyezéssel szemben

A modellfejlesztők az MLflow beépített üzembehelyezési eszközeit használhatják a modellek helyi teszteléséhez. Futtathat például egy olyan modell helyi példányát, amely az MLflow-kiszolgáló beállításjegyzékében van regisztrálva az mlflow models serve vagy az MLflow parancssori felület használatával. Az MLflow beépített üzembehelyezési eszközeiről további információt az MLflow dokumentációjának beépített üzembehelyezési eszközeiben talál.

Az Azure Machine Learning emellett támogatja a modellek online és kötegelt végpontokon való üzembe helyezését is. Ezek a végpontok különböző következtetési technológiákat futtatnak, amelyek különböző funkciókkal rendelkezhetnek.

  • Az Azure Machine Learning online végpontjai, hasonlóan az MLflow beépített kiszolgálójához, skálázható, szinkron és egyszerűsített módot biztosítanak a modellek következtetéshez való futtatásához.

  • Az Azure Machine Learning kötegvégpontjai aszinkron következtetést futtathatnak a hosszú ideig futó következtetési folyamatokon, amelyek nagy mennyiségű adatra méretezhetők. Az MLflow-kiszolgáló nem rendelkezik ezzel a képességgel, bár hasonló képességet a Spark-feladatok használatával érhet el. A kötegvégpontokról és az MLflow-modellekről további információt az MLflow-modellek használata kötegelt üzembe helyezésekben című témakörben talál.

Bemeneti formátumok

Az alábbi táblázat a beépített MLflow-kiszolgáló és az Azure Machine Learning online végpontjai által támogatott bemeneti típusokat mutatja be.

Bemeneti típus Beépített MLflow-kiszolgáló Azure Machine Learning online végpont
JSON-szerializált pandas DataFrames osztott tájolásban
JSON-szerializált pandas DataFrame-ek rekord tájolású formában Deprecated
CSV-formátumba szerializált pandas adatkeretek Használjon kötegelt inferenciát. További információ: MLflow-modellek üzembe helyezése kötegelt végpontokon.
TensorFlow bemenet JSON-szerializált listákként (tensorok) és listák szótáraként (tensorok néven)
TensorFlow-bemenet a TensorFlow-kiszolgáló API használatával

A következő szakaszok az Azure Machine Learning online végpontjaiban üzembe helyezett MLflow-modellekre összpontosítanak.

Bemeneti struktúra

Bármi legyen is a bemeneti típus, az Azure Machine Learning megköveteli, hogy a bemeneteket JSON-ként, a szótári kulcsban input_data adja meg. Ez a kulcs nem szükséges, ha a mlflow models serve parancsot modellek kiszolgálására használja, ezért a terhelések nem használhatók fel átjárhatóan az Azure Machine Learning online végpontjaihoz és az MLflow beépített kiszolgálójával.

Important

A payload szerkezet megváltozott az MLflow 2.0-ban.

Az alábbi terhelési példák szemléltetik a különbségeket az MLflow beépített kiszolgálójára telepített modell és az Azure Machine Learning inferenciai kiszolgáló között.

JSON-szerializált pandas DataFrame osztott tájolásban

{
    "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]
        ]
    }
}

Tensor bemenet

{
    "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]
    ]
}

Elnevezett-tenzor bemenet

{
    "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]
        ]
    }
}

Előrejelzés testreszabása MLflow-modellekhez

A pontozási szkriptek testre szabják az egyéni modellek következtetésének futtatását. Az MLflow-modell üzembe helyezése esetén azonban a következtetés futtatásáról a modellkészítő dönt, nem pedig az üzembe helyezési mérnök. Minden modell-keretrendszer automatikusan alkalmazhat bizonyos következtetési rutinokat.

Ha módosítania kell az MLflow-modellek következtetési módját, hajtsa végre az alábbi műveletek egyikét:

  • A modell betanítási rutinba való naplózásának módosítása.
  • A következtetés testreszabása pontozószkript használatával az üzembe helyezéskor.

A modell naplózási módjának módosítása a betanítás során

Ha egy modellt a mlflow.autolog vagy mlflow.<flavor>.log_model használatával naplóz, a modellhez használt verzió határozza meg, hogyan történik a következtetés futtatása és milyen eredmények kerülnek visszaadásra. Az MLflow nem kényszerít semmilyen konkrét viselkedést a predict() függvény eredményeinek létrehozásához.

Bizonyos esetekben érdemes lehet előfeldolgozást vagy utófeldolgozást végezni a modell futtatása előtt és után. Vagy módosíthatja a visszaadott értékeket, például a valószínűségeket az osztályok helyett. Az egyik megoldás olyan gépi tanulási folyamatok implementálása, amelyek közvetlenül a bemenetekről a kimenetekre kerülnek át.

Például a sklearn.pipeline.Pipelinepyspark.ml.Pipeline folyamatok implementálásának népszerű módjai, és néha a teljesítmény javítása érdekében ajánlottak. Az egyéni modellek naplózásával testre szabhatja, hogyan következtet a modell.

Következtetés testreszabása pontozószkript használatával

Bár az MLflow-modellekhez nincs szükség pontozószkriptre, szükség esetén továbbra is megadhat egyet az MLflow-modellek következtetési végrehajtásának testreszabásához. A következtetés testreszabásával kapcsolatos további információkért tekintse meg az MLflow-modell online végpontokhoz való üzembe helyezésének testreszabását vagy a modell üzembe helyezésének testreszabását a kötegelt végpontok pontozási szkriptjével .

Important

Ha pontozószkriptet ad meg egy MLflow-modell üzembe helyezéséhez, akkor egy környezetet is meg kell adnia az üzembe helyezéshez.

Üzembehelyezési eszközök

Az Azure Machine Learning az alábbi eszközöket biztosítja az MLflow-modellek online és kötegelt végpontokon való üzembe helyezéséhez:

Minden eszköz különböző képességekkel rendelkezik, különösen arra, hogy milyen típusú számításokat célozhat meg. Az alábbi táblázat a különböző MLflow-telepítési forgatókönyvek támogatását mutatja be.

Scenario MLflow SDK Azure Machine Learning CLI/SDK vagy studio
Üzembe helyezés felügyelt online végpontokon. 1 Supported. Lásd : Az MLflow-modellek fokozatos bevezetése online végpontokra. Supported. Lásd: MLflow-modellek üzembe helyezése online végpontokon.
Üzembe helyezés felügyelt online végpontoknál értékelő szkripttel. Nem támogatott. 3 Supported. Lásd az MLflow-modell üzembe helyezésének testreszabását.
Üzembe helyezés kötegelt végpontokon. Nem támogatott. 3 Supported. Lásd: MLflow-modellek használata kötegtelepítésekben.
Üzembe helyezés kötegelt végpontokon pontozószkripttel. Nem támogatott. 3 Supported. Lásd: Modelltelepítés testreszabása pontozószkripttel.
Üzembe helyezés olyan webszolgáltatásokban, mint az Azure Container Instances vagy az Azure Kubernetes Service (AKS). Régi rendszer támogatás. 2 Nem támogatott. 2
Üzembe helyezés olyan webszolgáltatásokban, mint a Container Instances vagy az AKS pontozószkripttel. Nem támogatott. 3 Régi rendszer támogatás. 2

1 Váltás felügyelt online végpontokra , ha lehetséges.

2 A nyílt forráskódú MLflow nem támogatja az értékelő szkripteket vagy a tételenkénti végrehajtást.

Üzembehelyezési eszköz kiválasztása

Használja az MLflow SDK-t, ha az alábbiak mindegyike igaz:

  • Ismeri az MLflow-t, és továbbra is ugyanazokat a metódusokat szeretné használni.
  • Olyan platformot használ, mint az Azure Databricks, amely natív módon támogatja az MLflow-t.

Ha az alábbiak bármelyike igaz, használja az Azure Machine Learning CLI v2-t vagy a Pythonhoz készült SDK-t:

  • Ismeri az eszközt.
  • Az üzembe helyezést pipeline-okkal szeretné automatizálni.
  • Az üzembehelyezési konfigurációt egy Git-adattárban szeretné tárolni.

Használja az Azure Machine Learning Studio felhasználói felületét, ha az MLflow-ban betanított modelleket szeretne gyorsan üzembe helyezni és tesztelni.