Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 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 a flavors szakaszt mutatja be egy fastai modell esetében.
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.
A modellek naplózásakor aláírásokat jelöl, és az MLflow megőrzi őket az signatureMLmodel-fájl szakaszában. 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.DataFrameaz 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.ndarrayszolgá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
Adja meg a conda.yaml fájlban futtatandó modell követelményeit. 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 feladatainak és üzembe helyezésének 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 . Amikor kód nélküli üzembe helyezéssel telepíti a modellt, az üzembe helyezés meghívja a függvényt predict . 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 modelleket naplózta
- Abból a fájlrendszerből, ahol a modelleket mentette
- A modellregisztrációs adatbázisból, ahol regisztrálta a modelleket
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 lekérheti 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-learndöntési famodell egyDecisionTreeClassifierobjektumot ad vissza. Használja amlflow.<flavor>.load_model()elemet, hogy betöltse ugyanazt a modellobjektumot és -típusokat, amelyeket naplózott.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 szert tehet egy garantált függvényt tartalmazó burkolóra
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.DataFramenumpy.ndarrayargumentumokkal 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.