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


Összetevők és modellek az MLflow-ban

Ez a cikk bemutatja az MLflow-összetevőket és az MLflow-modelleket, valamint azt, hogy az MLflow-modellek miben különböznek a többi összetevőtől. A cikk azt is ismerteti, hogyan használja az Azure Machine Learning az MLflow-modell jellemzőit az egyszerűsített üzembehelyezési munkafolyamatok engedélyezéséhez.

Összetevők és modellek

Az MLflow-ban alapvető különbségek vannak az egyszerű fájlösszetevők naplózása és az MLflow-modellek naplózása között.

Műtermék

Az összetevő minden olyan fájl, amelyet egy kísérlet futtatása vagy feladata hozott létre és rögzített. Az összetevők lehetnek pácfájlként szerializált modellek, a PyTorch- vagy TensorFlow-modellek súlyozása, vagy egy lineáris regresszió együtthatóit tartalmazó szövegfájl. Egyes összetevőknek nincs köze magához a modellhez, de futtatási konfigurációkat, előfeldolgozási információkat vagy mintaadatokat tartalmaznak. Az összetevők különböző formátumokkal rendelkezhetnek.

Az alábbi példa egy fájlösszetevőt naplóz.

filename = 'model.pkl'
with open(filename, 'wb') as f:
  pickle.dump(model, f)

mlflow.log_artifact(filename)

Modell

Az MLflow-modell olyan összetevő, amelynek erősebb feltételezései egyértelmű szerződést biztosítanak a mentett fájlok és azok jelentése között. Ha azonban egyszerűen összetevőként naplózza a modell fájljait, tudnia kell, hogy mit jelentenek az egyes fájlok, és hogyan töltheti be őket következtetésként.

Az MLflow-modelleket az MLflow SDK használatával naplózhatja, például:

import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")

Az MLflow-modellek naplózása az Azure Machine Learningben a következő előnyökkel jár:

  • MLflow-modellek valós idejű vagy kötegelt végpontokon is üzembe helyezhetők pontozószkript vagy környezet megadása nélkül.
  • MLflow-modellek üzembe helyezésekor az üzembe helyezések automatikusan létrehoznak egy swagger-fájlt, így az Azure Machine Learning Studióban használhatja a Tesztelés funkciót.
  • Az MLflow-modelleket közvetlenül folyamatbemenetként használhatja.
  • A Felelős AI-irányítópult MLflow-modellekkel is használható.

Az MLmodel formátum

Az egyszerű összetevőfájlokként naplózott modellek esetében tudnia kell, hogy a modellkészítő mire szánta az egyes fájlokat, mielőtt betöltené a modellt következtetés céljából. Az MLflow-modellek esetében azonban az MLmodel formátummal töltheti be a modellt az összetevők és az általuk képviselt elemek közötti szerződés meghatározásához.

Az MLmodel formátum olyan mappában tárolja az objektumokat, amelynek nincs konkrét elnevezési követelménye. Az eszközök között van egy MLmodel nevű fájl, amely az igazság egyetlen forrása a modell betöltéséhez és használatához.

Az alábbi képen egy credit_defaults_model nevű MLflow-modellmappa látható az Azure Machine Learning Studióban. A mappa tartalmazza az MLmodel-fájlt és más modellösszetevőket.

Képernyőkép egy minta MLflow-modell eszközeiről, beleértve az MLmodel-fájlt is.

Az alábbi példa egy MLmodel-fájlt mutat be egy számítógépes látásmodellhez, amely be van tanítva a következőkkel fastai:

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

Modellízek

Figyelembe véve a rendelkezésre álló gépi tanulási keretrendszerek nagy számát, az MLflow bevezette az íz fogalmát, hogy egyedi szerződést biztosítson az összes gépi tanulási keretrendszerhez. Az ízek azt jelzik, hogy mit várhatunk egy adott keretrendszerrel létrehozott modelltől. A TensorFlow például saját ízvilágú, amely meghatározza a TensorFlow-modellek megőrzésének és betöltésének módját.

Mivel minden modell-íz azt jelzi, hogyan őrizhető meg és tölthető be a modell egy adott keretrendszerhez, az MLmodel formátum nem kényszerít egyetlen szerializálási mechanizmust, amelyet minden modellnek támogatnia kell. Ezért minden íz használhatja azokat a módszereket, amelyek a legjobb teljesítményt vagy legjobb támogatást nyújtják az ajánlott eljárásoknak megfelelően, anélkül, hogy veszélyeztetnék az MLmodel szabványsal való kompatibilitást.

Az alábbi példa egy modell szakaszát flavors fastai mutatja be.

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

Modell aláírása

Az MLflow-modell aláírása fontos része a modell specifikációjának, mivel adatszerződésként szolgál a modell és a modellt futtató kiszolgáló között. A modellajánlással elemezhető és kényszeríthető a modell bemeneti típusai az üzembe helyezéskor. Ha rendelkezésre áll aláírás, az MLflow kikényszeríti a bemeneti típusokat, amikor adatokat küld a modellnek. További információ: MLflow-aláírás kényszerítése.

Az aláírások a modellek naplózásának időpontjában jelennek meg, és az MLmodel-fájl szakaszában signature maradnak meg. Az MLflow autolog funkciója automatikusan törekszik az aláírások következtetésére. A modelleket azonban manuálisan is naplózhatja, ha a kikövetkeztetett aláírások nem a szükségesek. További információ: Modellek naplózása aláírásokkal.

Kétféle aláírás létezik:

  • Az oszlopalapú aláírások táblázatos adatokon működnek. Az ilyen típusú aláírással rendelkező modellek esetében az MLflow bemenetként látja el pandas.DataFrame az objektumokat.
  • A tenzoralapú aláírások n dimenziós tömbökkel vagy tenzorokkal működnek. Az ilyen aláírással rendelkező modellek esetében az MLflow bemenetként, vagy a nevesített tenzorok szótáraként numpy.ndarray szolgálnumpy.ndarray.

Az alábbi példa egy signature számítógépes látásmodell betanított szakaszát fastaimutatja be. Ez a modell kap egy kötegnyi képet, amely alakzat (300, 300, 3) tenzoraként jelenik meg, RGB-ábrázolásuk pedig aláíratlan egész számként jelenik meg. A modell előrejelzési kötegeket ad ki valószínűségként két osztály számára.

signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Tipp.

Az Azure Machine Learning létrehoz egy Swagger-fájlt egy elérhető aláírással rendelkező MLflow-modell üzembe helyezéséhez. Ez a fájl megkönnyíti az üzemelő példányok tesztelését az Azure Machine Learning Studióval.

Modellkörnyezet

A futtatandó modell követelményei a conda.yaml fájlban vannak megadva. Az MLflow képes automatikusan észlelni a függőségeket, vagy manuálisan is jelezheti őket a mlflow.<flavor>.log_model() metódus meghívásával. A metódus meghívása akkor lehet hasznos, ha a környezetében található MLflow-kódtárak nem azok, amelyeket használni szeretne.

Az alábbi conda.yaml-példa egy keretrendszerrel létrehozott modell környezetét fastai mutatja be:

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - astunparse==1.6.3
  - cffi==1.15.0
  - configparser==3.7.4
  - defusedxml==0.7.1
  - fastai==2.4.1
  - google-api-core==2.7.1
  - ipython==8.2.0
  - psutil==5.9.0
name: mlflow-env

Feljegyzés

Az MLflow-környezetek a modell szintjén működnek, de az Azure Machine Learning-környezetek a regisztrált környezetek munkaterületi szintjén, illetve a névtelen környezetek feladat-/üzembe helyezési szintjén működnek. MLflow-modellek üzembe helyezésekor az Azure Machine Learning létrehozza a modellkörnyezetet, és üzembe helyezésre használja. Az Azure Machine Learning CLI használatával felülbírálhatja ezt a viselkedést, és MLflow-modelleket helyezhet üzembe egy adott Azure Machine Learning-környezetben.

Függvény előrejelzése

Minden MLflow-modell tartalmaz egy függvényt predict , amelyet a rendszer kód nélküli üzembe helyezéssel hív meg a modell üzembe helyezésekor. Az, hogy a predict függvény mit ad vissza, például osztályok, valószínűségek vagy előrejelzés, a betanításhoz használt keretrendszertől vagy íztől függ. Az egyes ízek dokumentációja leírja, hogy mit ad vissza.

A függvény testreszabásával predict módosíthatja a következtetés végrehajtásának módját. Naplózhatja a különböző viselkedésű modelleket, vagy naplózhatja az egyéni modell ízét.

Munkafolyamatok MLflow-modellek betöltéséhez

Az MLflow-modelleket a következő helyekről töltheti be:

  • Közvetlenül abból a futtatásból, ahol a modellek naplózása megtörtént
  • Abból a fájlrendszerből, ahol a modellek mentésre kerülnek
  • A modellregisztrációs adatbázisból, ahol a modellek regisztrálva vannak

Az MLflow konzisztens módon tölti be ezeket a modelleket helytől függetlenül.

A modellek betöltéséhez két munkafolyamat használható:

  • Töltse vissza ugyanazt az objektumot és típust, amelyet naplózott. A modelleket az MLflow SDK használatával töltheti be, és beszerezheti a modell egy példányát a betanítási kódtárhoz tartozó típusokkal. Az Open Neural Network Exchange (ONNX) modell például egy ModelProto, míg egy betanított scikit-learn döntési famodell egy DecisionTreeClassifier objektumot ad vissza. Ugyanazzal mlflow.<flavor>.load_model() a modellobjektummal és a naplózott típusokkal tölthető be.

  • Töltsön vissza egy modellt a következtetés futtatásához. A modelleket az MLflow SDK használatával töltheti be, és beszerezhet egy garantált függvényt tartalmazó burkolót predict . Nem számít, hogy milyen ízt használ, mert minden MLflow-modellnek van függvénye predict .

    Az MLflow garantálja, hogy ezt a függvényt a modell aláírásától függően típus pandas.DataFramenumpy.ndarrayargumentumokkal hívhatja dict[string, numpyndarray]meg. Az MLflow kezeli a modell által várt bemeneti típusra való típusátalakítást. A modell terhelésének visszatöltésére használható mlflow.pyfunc.load_model() a következtetés futtatásához.