MLflow-modellek üzembe helyezése online végpontokon
A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)
Ebből a cikkből megtudhatja, hogyan helyezheti üzembe az MLflow-modellt egy online végponton valós idejű következtetés céljából. Az MLflow-modell online végponton való üzembe helyezésekor nem kell pontozószkriptet vagy környezetet megadnia – 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 Learning:
- Dinamikusan telepíti a fájlban megadott Python-csomagokat
conda.yaml
. Ezért a függőségek a tároló futásideje alatt települnek. - Egy MLflow alaprendszerképet/válogatott környezetet biztosít, amely a következő elemeket tartalmazza:
azureml-inference-server-http
mlflow-skinny
- Pontozási szkript a következtetéshez.
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ó használatával elkerülheti az internetkapcsolat szükségességét, amelyhez egyébként az Azure Machine Learningnek dinamikusan telepítenie kell az MLflow-modellekhez szükséges Python-csomagokat.
Tudnivalók a példáról
A példa bemutatja, hogyan helyezhet üzembe MLflow-modellt egy online végponton az előrejelzések végrehajtásához. A példa egy Diabetes-adatkészleten alapuló MLflow-modellt használ. Ez az adatkészlet 10 alapváltozót tartalmaz: életkor, nem, testtömegindex, átlagos vérnyomás és hat vérszérummérés 442 diabéteszes betegtől. Emellett az érdeklődésre adott választ is tartalmazza, amely a betegség progressziójának mennyiségi mértéke az alapkonfiguráció után egy évvel.
A modell betanítása regresszor használatával scikit-learn
történt, és az összes szükséges előfeldolgozás folyamatként lett csomagolva, így ez a modell egy teljes körű folyamat, amely a nyers adatoktól az előrejelzésekig tart.
A cikkben szereplő információk az azureml-examples adattárban található kódmintákon alapulnak . Ha helyileg szeretné futtatni a parancsokat a YAML és más fájlok másolása/beillesztése nélkül, klónozza az adattárat, majd módosítsa a könyvtárakat a következőre cli
, ha az Azure CLI-t használja. Ha a Pythonhoz készült Azure Machine Learning SDK-t használja, módosítsa a címtárakat a következőre sdk/python/endpoints/online/mlflow
: .
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Követés a Jupyter Notebookban
Az Azure Machine Learning Python SDK használatának lépéseit az MLflow-modell online végpontok jegyzetfüzetében való megnyitásával követheti a klónozott adattárban.
Előfeltételek
A cikkben ismertetett lépések végrehajtása előtt győződjön meg arról, hogy rendelkezik a következő előfeltételekkel:
Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot. Próbálja ki az Azure Machine Learning ingyenes vagy fizetős verzióját.
Az Azure-beli szerepköralapú hozzáférés-vezérlések (Azure RBAC) az Azure gépi tanulás műveleteihez való hozzáférést biztosítják. A cikkben ismertetett lépések végrehajtásához a felhasználói fiókhoz hozzá kell rendelni az Azure Machine Learning-munkaterület tulajdonosi vagy közreműködői szerepkörét, vagy egy egyéni szerepkört, amely lehetővé teszi
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. A szerepkörökről további információt az Azure Machine Learning-munkaterülethez való hozzáférés kezelése című témakörben talál.A munkaterületen MLflow-modellnek kell lennie. Ez a cikk egy, a Diabetes-adatkészlethez betanított modellt regisztrál a munkaterületen.
Emellett a következőket kell elvégeznie:
- Telepítse az Azure CLI-t és az
ml
Azure CLI-bővítményt. A parancssori felület telepítéséről további információt a PARANCSSOR telepítése és beállítása (v2) című témakörben talál.
- Telepítse az Azure CLI-t és az
Csatlakozás a munkaterülethez
Először csatlakozzon az Azure Machine Learning-munkaterülethez, ahol dolgozni fog.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Regisztrálja a modellt
Csak regisztrált modelleket helyezhet üzembe online végpontokon. Ebben az esetben már rendelkezik a modell helyi másolatával az adattárban, ezért csak a munkaterületen lévő beállításjegyzékben kell közzétennie a modellt. Ezt a lépést kihagyhatja, ha az üzembe helyezni kívánt modell már regisztrálva van.
MODEL_NAME='sklearn-diabetes'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "endpoints/online/ncd/sklearn-diabetes/model"
Mi történik, ha a modellt futtatás közben naplózták?
Ha a modellt futtatás közben naplózták, közvetlenül regisztrálhatja.
A modell regisztrálásához ismernie kell a tárolási helyet. Ha az MLflow szolgáltatását autolog
használja, a modell elérési útja a modell típusától és keretrendszerétől függ. A modell mappájának nevének azonosításához ellenőrizze a feladatok kimenetét. Ez a mappa egy .MLModel
Ha a log_model
módszerrel manuálisan naplózza a modelleket, akkor adja át a modell elérési útját argumentumként a metódusnak. Ha például naplózza a modellt, mlflow.sklearn.log_model(my_model, "classifier")
akkor a rendszer meghívja a modell tárolási classifier
útvonalát.
Az Azure Machine Learning CLI v2 használatával hozzon létre egy modellt egy betanítási feladat kimenetéből. Az alábbi példában egy névvel ellátott $MODEL_NAME
modell regisztrálva van egy azonosítóval $RUN_ID
rendelkező feladat összetevőivel. A modell tárolási útvonala $MODEL_PATH
.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
Feljegyzés
Az elérési út $MODEL_PATH
az a hely, ahol a modellt futtatáskor tárolták.
MLflow-modell üzembe helyezése online végponton
Konfigurálja a végpontot, ahol a modell üzembe lesz helyezve. Az alábbi példa a végpont nevét és hitelesítési módját konfigurálja:
Állítson be egy végpontnevet a következő parancs futtatásával (cserélje le
YOUR_ENDPOINT_NAME
egy egyedi névre):export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
A végpont konfigurálása:
create-endpoint.yaml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: key
Hozza létre a végpontot:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yaml
Konfigurálja az üzembe helyezést. Az üzembe helyezés a tényleges következtetést okozó modell üzemeltetéséhez szükséges erőforrások készlete.
sklearn-deployment.yaml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-deployment endpoint_name: my-endpoint model: name: mir-sample-sklearn-ncd-model version: 2 path: sklearn-diabetes/model type: mlflow_model instance_type: Standard_DS3_v2 instance_count: 1
Feljegyzés
A modell automatikus generálása
scoring_script
ésenvironment
csak apyfunc
modell íze támogatott. Az MLflow-modell központi telepítéseinek testreszabása című témakörben talál egy másik modell-ízt.Hozza létre az üzembe helyezést:
az ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-traffic
Ha a végpont nem rendelkezik kimenő kapcsolattal, használja a modell csomagolását (előzetes verzió) a jelzővel
--with-package
:az ml online-deployment create --with-package --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-traffic
Rendelje hozzá az összes forgalmat az üzembe helyezéshez. A végpontnak egy üzemelő példánya van, de egyik forgalom sincs hozzá rendelve.
Ez a lépés nem szükséges az Azure CLI-ben, mivel a jelölőt a
--all-traffic
létrehozás során használta. Ha módosítania kell a forgalmat, használhatja a parancsotaz ml online-endpoint update --traffic
. A forgalom frissítéséről további információt a forgalom fokozatos frissítéséről szóló cikkben talál.Frissítse a végpont konfigurációját:
Ez a lépés nem szükséges az Azure CLI-ben, mivel a jelölőt a
--all-traffic
létrehozás során használta. Ha módosítania kell a forgalmat, használhatja a parancsotaz ml online-endpoint update --traffic
. A forgalom frissítéséről további információt a forgalom fokozatos frissítéséről szóló cikkben talál.
A végpont meghívása
Ha az üzembe helyezés elkészült, a kérések kiszolgálására is használhatja. Az üzembe helyezés tesztelésének egyik módja a beépített meghívási képesség használata a használt üzembehelyezési ügyfélprogramban. Az alábbi JSON egy mintakérés az üzembe helyezéshez.
sample-request-sklearn.json
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Feljegyzés
input_data
ebben a példában ahelyett, inputs
hogy az MLflow szolgáltatásban használták. Ennek az az oka, hogy az Azure Machine Learningnek más bemeneti formátumra van szüksége ahhoz, hogy automatikusan létre lehessen hozni a végpontokhoz tartozó swagger-szerződéseket. A várt bemeneti formátumokról további információt az Azure Machine Learningben és a beépített MLflow-kiszolgálón üzembe helyezett modellek közötti különbségek című témakörben talál.
Küldjön egy kérést a végpontnak az alábbiak szerint:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A válasz hasonló lesz a következő szöveghez:
[
11633.100167144921,
8522.117402884991
]
Fontos
Az MLflow kód nélküli üzembe helyezése esetén a helyi végpontokon keresztüli tesztelés jelenleg nem támogatott.
MLflow-modell üzembe helyezésének testreszabása
Az MLflow-modell üzembehelyezési definíciójában nem kell pontozószkriptet megadnia egy online végponthoz. Azonban dönthet úgy, hogy ezt megteszi, és testre szabja a következtetés végrehajtását.
Az MLflow-modell üzembe helyezését általában a következő esetekben érdemes testre szabni:
- A modellnek nincs
PyFunc
íze. - Testre kell szabnia a modell futási módját, például egy adott ízt kell használnia a modell betöltéséhez, a használatával
mlflow.<flavor>.load_model()
. - A pontozási rutinban elő- és utófeldolgozást kell végeznie, ha azt nem maga a modell végzi el.
- A modell kimenete nem jeleníthető meg szépen táblázatos adatokban. Ez például egy kép tenzora.
Fontos
Ha pontozószkriptet ad meg egy MLflow-modell üzembe helyezéséhez, azt a környezetet is meg kell adnia, ahol az üzembe helyezés futni fog.
Lépések
MLflow-modell üzembe helyezése egyéni pontozószkripttel:
Azonosítsa azt a mappát, amelyben az MLflow-modell található.
a. Nyissa meg az Azure Machine Learning Studiót.
b. Lépjen a Modellek szakaszra.
c. Válassza ki az üzembe helyezni kívánt modellt, és lépjen az Összetevők lapra.
d. Jegyezze fel a megjelenő mappát. Ezt a mappát a modell regisztrálásakor adták meg.
Hozzon létre egy pontozó szkriptet. Figyelje meg, hogy a korábban azonosított mappanév
model
hogyan szerepel ainit()
függvényben.Tipp.
Az alábbi pontozási szkript példaként szolgál arra vonatkozóan, hogyan hajthat végre következtetést egy MLflow-modellel. Ezt a szkriptet az igényeihez igazíthatja, vagy módosíthatja annak bármely részét a forgatókönyvnek megfelelően.
score.py
import logging import os import json import mlflow from io import StringIO from mlflow.pyfunc.scoring_server import infer_and_parse_json_input, predictions_to_json def init(): global model global input_schema # "model" is the path of the mlflow artifacts when the model was registered. For automl # models, this is generally "mlflow-model". model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model") model = mlflow.pyfunc.load_model(model_path) input_schema = model.metadata.get_input_schema() def run(raw_data): json_data = json.loads(raw_data) if "input_data" not in json_data.keys(): raise Exception("Request must contain a top level key named 'input_data'") serving_input = json.dumps(json_data["input_data"]) data = infer_and_parse_json_input(serving_input, input_schema) predictions = model.predict(data) result = StringIO() predictions_to_json(predictions, result) return result.getvalue()
Figyelmeztetés
MLflow 2.0-s tanácsadás: A megadott pontozási szkript az MLflow 1.X és az MLflow 2.X használatával is működik. Javasoljuk azonban, hogy ezen verziók várható bemeneti/kimeneti formátumai eltérőek lehetnek. Ellenőrizze a környezetdefiníciót, amellyel meggyőződhet arról, hogy a várt MLflow-verziót használja. Figyelje meg, hogy az MLflow 2.0 csak a Python 3.8+-ban támogatott.
Hozzon létre egy környezetet, ahol a pontozási szkript végrehajtható. Mivel a modell egy MLflow-modell, a conda követelményeit is meg kell adni a modellcsomagban. Az MLflow-modellben található fájlokkal kapcsolatos további részletekért lásd az MLmodel formátumot. Ezt követően a környezetet a fájlból származó conda-függőségek használatával fogja létrehozni. Azonban a csomagot
azureml-inference-server-http
is tartalmaznia kell, amely az Azure Machine Learning online üzembe helyezéséhez szükséges.A Conda definíciós fájlja a következő:
conda.yml
channels: - conda-forge dependencies: - python=3.9 - pip - pip: - mlflow - scikit-learn==1.2.2 - cloudpickle==2.2.1 - psutil==5.9.4 - pandas==2.0.0 - azureml-inference-server-http name: mlflow-env
Feljegyzés
A
azureml-inference-server-http
csomag hozzá lett adva az eredeti conda függőségi fájlhoz.Ezt a conda függőségi fájlt fogja használni a környezet létrehozásához:
A környezet az üzembe helyezési konfigurációban lesz beágyazottan létrehozva.
Hozza létre az üzembe helyezést:
Üzembehelyezési konfigurációs fájl létrehozása deployment.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-diabetes-custom endpoint_name: my-endpoint model: azureml:sklearn-diabetes@latest environment: image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04 conda_file: sklearn-diabetes/environment/conda.yml code_configuration: code: sklearn-diabetes/src scoring_script: score.py instance_type: Standard_F2s_v2 instance_count: 1
Hozza létre az üzembe helyezést:
az ml online-deployment create -f deployment.yml
Az üzembe helyezés befejezése után készen áll a kérések kiszolgálására. Az üzembe helyezés tesztelésének egyik módja egy mintakérelemfájl és a
invoke
metódus használata.sample-request-sklearn.json
{"input_data": { "columns": [ "age", "sex", "bmi", "bp", "s1", "s2", "s3", "s4", "s5", "s6" ], "data": [ [ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ], [ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0] ], "index": [0,1] }}
Küldjön egy kérést a végpontnak az alábbiak szerint:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A válasz hasonló lesz a következő szöveghez:
{ "predictions": [ 11633.100167144921, 8522.117402884991 ] }
Figyelmeztetés
MLflow 2.0-s tanácsadás: Az MLflow 1.X-ben a
predictions
kulcs hiányzik.
Az erőforrások eltávolítása
Ha végzett a végpont használatával, törölje a társított erőforrásokat:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes