Share via


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

ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

Ebben a cikkben megismerheti az MLflow-modellek Azure Machine-Tanulás való üzembe helyezését valós idejű és kötegelt következtetés céljából. Megismerkedhet az üzembe helyezés kezeléséhez használható különböző eszközökkel is.

MLflow-modellek és egyéni modellek üzembe helyezése

Az Azure Machine Tanulás egyéni modelltelepítésével ellentétben az MLflow-modellek Azure Machine-Tanulás való üzembe helyezésekor nem kell pontozó szkriptet vagy környezetet megadnia az üzembe helyezéshez. Ehelyett az Azure Machine Tanulás automatikusan létrehozza a pontozó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 Tanulás:

  • 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 Tanulás a 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.

Tipp.

Nyilvános hálózati hozzáféréssel nem rendelkező munkaterületek: Ahhoz, hogy MLflow-modelleket helyezhessen üzembe az online végpontokon kimenő kapcsolat nélkül, be kell csomagolnia a modelleket (előzetes verzió). A modellcsomagolás használatával elkerülheti az internetkapcsolat szükségességét, amelyhez az Azure Machine Tanulás egyébként szükség lenne az MLflow-modellekhez szükséges Python-csomagok dinamikus telepítésére.

Python-csomagok és függőségek

Az Azure Machine Tanulás automatikusan létrehoz környezeteket, hogy következtetést futtasson az MLflow-modelleken. A környezetek létrehozásához az Azure Machine Tanulás 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 eltérőek lehetnek.

Az alábbi conda.yaml fájl egy MLflow-modellben megadott conda-függőségek példáját mutatja be.

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

Figyelmeztetés

Az MLflow automatikusan észleli a csomagokat egy modell naplózásakor, és rögzíti a csomagverziókat a modell conda függőségeiben. Előfordulhat azonban, hogy ez az automatikus csomagészlelés nem mindig tükrözi az Ön szándékait vagy követelményeit. Ilyen esetekben fontolja meg az egyéni conda függőségek definíciójával rendelkező modellek naplózását.

A modellek aláírásokkal való használatának következményei

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 Tanulás kényszeríti, 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 sikertelen lesz.

Az MLflow-modell aláírását a modellhez társított 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 fájl az MLflow-modellhez társított MLmodel-fájlt jeleníti meg.

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

Tipp.

Az MLflow-modellek aláírásai nem kötelezőek, de erősen ajánlottak, mivel kényelmes módot biztosítanak az adatkompatibilitási problémák korai észlelésére. Az aláírásokkal rendelkező modellek naplózásáról további információt az egyéni aláírással, környezettel vagy mintákkal rendelkező naplózási modellek című témakörben talál.

Az Azure Machine-Tanulás és a beépített MLflow-kiszolgálón üzembe helyezett modellek

Az MLflow beépített üzembehelyezési eszközöket tartalmaz, amelyekkel a modellfejlesztők helyileg tesztelhetik a modelleket. 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 parancssori felület mlflow models predicthasználatával mlflow models serve -m my_model vagy használatával.

Következtetés kötegelt és online végpontokkal

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

Az online végpontok hasonlóak a beépített MLflow-kiszolgálóhoz , mivel skálázható, szinkron és egyszerűsített módot biztosítanak a modellek következtetésre való futtatásához.

Másrészt a kötegvégpontok képesek aszinkron következtetést futtatni a hosszú ideig futó következtetési folyamatokon, amelyek nagy mennyiségű adatra méretezhetők. Az MLflow-kiszolgáló jelenleg nem rendelkezik ezzel a képességgel, bár hasonló képesség 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.

Az alábbi szakaszok az Azure Machine-Tanulás online végpontokon üzembe helyezett MLflow-modellekre összpontosítanak.

Bemeneti formátumok

Bemenet típusa Beépített MLflow-kiszolgáló Azure Machine Tanulás Online végpontok
JSON-szerializált pandas DataFrames osztott tájolásban
JSON-szerializált pandas DataFrames a rekordok tájolásában Elavult
CSV-szerializált pandas DataFrames Az 1. köteghasználata
A tenzor bemeneti formátuma JSON-szerializált listákként (tenzorok) és listák szótáraként (tenzorok néven)
A TF-kiszolgáló API-jában formázott tenzoros bemenet

1 Fontolja meg a kötegelt következtetés használatát a fájlok feldolgozásához. További információ: MLflow-modellek üzembe helyezése kötegelt végpontokon.

Bemeneti struktúra

A használt bemeneti típustól függetlenül az Azure Machine Tanulás megköveteli, hogy jSON hasznos adatban adja meg a bemeneteket a szótárkulcson input_databelül. Mivel ez a kulcs nem szükséges a modellek kiszolgálására szolgáló parancs mlflow models serve használatakor, a hasznos adatok nem használhatók fel felcserélhetően az Azure Machine Tanulás online végpontjaihoz és a beépített MLflow-kiszolgálóhoz.

Fontos

MLflow 2.0-s tanácsadás: Figyelje meg, hogy a hasznos adat struktúrája megváltozott az MLflow 2.0-ban.

Ez a szakasz különböző hasznos adatokkal kapcsolatos példákat és a beépített MLflow-kiszolgálón üzembe helyezett modell és az Azure Machine Tanulás következtetési kiszolgáló közötti különbségeket mutatja be.

Hasznos adat példa egy JSON-szerializált pandas DataFrame-hez 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]
        ]
    }
}

Hasznos adat példa egy tenzoros bemenethez

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

Payload example for a named-tensor input

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

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.

Következtetés testreszabása MLflow-modellek telepítésekor

Előfordulhat, hogy pontozószkriptekkel szabja testre az egyéni modellek következtetésének végrehajtását. Az MLflow-modellek Azure Machine-Tanulás való üzembe helyezésekor azonban a következtetés végrehajtásának módjáról a modellkészítő (a modellt létrehozó személy) dönt, nem pedig a DevOps mérnöke (az üzembe helyezést kérő személy). Előfordulhat, hogy minden modell-keretrendszer automatikusan alkalmaz bizonyos következtetési rutinokat.

Ha módosítania kell egy MLflow-modell következtetésének végrehajtását, két dolgot tehet:

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

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

Amikor naplóz egy modellt, vagy mlflow.<flavor>.log_modelazt használjamlflow.autolog, a modellhez használt íz határozza meg a következtetés végrehajtását, és hogy a modell milyen eredményeket ad vissza. Az MLflow nem kényszerít semmilyen konkrét viselkedést a predict() függvény eredményeinek létrehozásához.

Bizonyos esetekben azonban érdemes lehet némi előfeldolgozást vagy utófeldolgozást végezni a modell végrehajtása előtt és után. Máskor érdemes lehet módosítani a visszaadott adatokat (például valószínűségeket és osztályokat). 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. Ilyenek például a sklearn.pipeline.Pipelinepyspark.ml.Pipeline folyamatok implementálásának népszerű módjai, és néha teljesítménybeli szempontokat is javasolnak. Egy másik lehetőség, hogy testre szabja a modell következtetési módját egy egyéni modell-íz használatával.

Következtetés testreszabása pontozó szkripttel

Bár az MLflow-modellekhez nincs szükség pontozószkriptre, szükség esetén továbbra is megadhat egyet. A pontozószkripttel testre szabhatja az MLflow-modellek következtetésének végrehajtását. A következtetés testreszabásáról további információt az MLflow-modellek (online végpontok) és az MLflow-modellek üzembe helyezésének testreszabása (kötegelt végpontok) című témakörben talál.

Fontos

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 Tanulás számos módot kínál az MLflow-modellek online és kötegelt végpontokon való üzembe helyezésére. Modelleket az alábbi eszközökkel helyezhet üzembe:

  • MLflow SDK
  • Azure Machine Learning CLI
  • Pythonhoz készült Azure Machine Learning SDK
  • Azure Machine Learning Studio

Minden munkafolyamat különböző képességekkel rendelkezik, különösen a megcélzott számítási típus körül. Az alábbi táblázat a különböző képességeket mutatja be.

Eset MLflow SDK Azure Machine Tanulás CLI/SDK Azure Machine Learning Studio
Üzembe helyezés felügyelt online végpontokon Lásd az 1. példát Lásd az 1. példát Lásd az 1. példát
Üzembe helyezés felügyelt online végpontokon (pontozószkripttel) Nem támogatott3 Lásd a példát Lásd a példát
Üzembe helyezés kötegelt végpontokon Nem támogatott3 Lásd a példát Lásd a példát
Üzembe helyezés kötegelt végpontokon (pontozó szkripttel) Nem támogatott3 Lásd a példát Lásd a példát
Üzembe helyezés webszolgáltatásokban (ACI/AKS) Örökölt támogatás2 Nem támogatott2 Nem támogatott2
Üzembe helyezés webszolgáltatásokban (ACI/AKS – pontozó szkripttel) Nem támogatott3 Örökölt támogatás2 Örökölt támogatás2

1 A privát kapcsolattal rendelkező munkaterületeken lévő online végpontokra való üzembe helyezéshez a modelleket az üzembe helyezés (előzetes verzió) előtt kell csomagolnia.

2 Javasoljuk, hogy inkább váltson felügyelt online végpontokra .

A 3 MLflow (OSS) nem rendelkezik pontozó szkript fogalmával, és jelenleg nem támogatja a kötegelt végrehajtást.

Melyik üzembehelyezési eszközt használja?

  • Használja az MLflow SDK-t, ha mindkét feltétel teljesül:

    • Ismeri az MLflow-t, vagy olyan platformot használ, amely natív módon támogatja az MLflow-t (például az Azure Databrickset).
    • Továbbra is ugyanazt a metóduskészletet szeretné használni az MLflow-ból.
  • Ha az alábbi feltételek bármelyike fennáll, használja az Azure Machine Tanulás CLI 2-t:

    • Jobban ismeri az Azure Machine Tanulás CLI v2-t.
    • Automatizálási folyamatokkal szeretné automatizálni az üzembe helyezéseket.
    • Az üzembehelyezési konfigurációt git-adattárban szeretné tartani.
  • Az Azure Machine Tanulás studio felhasználói felületének üzembe helyezését akkor használja, ha gyorsan üzembe szeretné helyezni és tesztelni szeretné az MLflow-ban betanított modelleket.