Ö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.
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 fastai
mutatja 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ítottscikit-learn
döntési famodell egyDecisionTreeClassifier
objektumot ad vissza. Ugyanazzalmlflow.<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ényepredict
.Az MLflow garantálja, hogy ezt a függvényt a modell aláírásától függően típus
pandas.DataFrame
numpy.ndarray
argumentumokkal hívhatjadict[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.