Ú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.
- Az Azure Machine Tanulás a következtetés végrehajtásához szükséges csomagok, beleértve a
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 predict
haszná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_data
belü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_model
azt 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.Pipeline
pyspark.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.