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.
A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)
Ebben a cikkben 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 conda.yaml fájlban listázható Python-csomagokat. Ennek eredményeképpen a függőségek a tároló futásideje alatt települnek.
- Egy MLflow alaprendszerképet vagy válogatott környezetet biztosít, amely a következő elemeket tartalmazza:
- A
azureml-inference-server-http
csomag - A
mlflow-skinny
csomag - Pontozási szkript az inferenciához
- A
Jótanács
Nyilvános hálózati hozzáférés nélküli munkakörnyezetekben, mielőtt MLflow modelleket online végpontokra telepíthetne kimenő kapcsolati lehetőség nélkül, csomagolnia kell a modelleket. A modellcsomagolási képesség előzetes verzióban van. Amikor csomagolsz egy modellt, elkerülheted az internetkapcsolat szükségességét, amelyre az Azure Machine Learning egyébként szükséges ahhoz, hogy dinamikusan telepítse a szükséges Python-csomagokat az MLflow modellekhez.
Előfeltételek
Egy Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Olyan felhasználói fiók, amely legalább az alábbi Azure-szerepköralapú hozzáférés-vezérlési (Azure RBAC-) szerepkörök egyikével rendelkezik:
- Tulajdonosi szerepkör az Azure Machine Learning-munkaterülethez
- Közreműködői szerepkör az Azure Machine Learning-munkaterülethez
-
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
engedélyekkel rendelkező egyéni szerepkör
További információ: Az Azure Machine Learning-munkaterületekhez való hozzáférés kezelése.
Hozzáférés az Azure Machine Learninghez:
Telepítse az Azure CLI-t és az
ml
Azure CLI-bővítményt. A telepítés lépéseit a parancssori felület (v2) telepítése és beállítása című témakörben találja.
Tudnivalók a példáról
A cikkben szereplő példa bemutatja, hogyan helyezhet üzembe MLflow-modellt egy online végponton 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 6 vérszérummérés 442 diabéteszes betegtől. Emellett tartalmazza az érdeklődésre adott választ is, amely a betegség progressziójának mennyiségi mértéke az alapadatok dátuma után egy évvel.
A modell betanítása regresszor használatával scikit-learn
történt. Az összes szükséges előfeldolgozás folyamatként van 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ár kódmintáin alapulnak. Ha klónozza az adattárat, a cikkben szereplő parancsokat helyileg futtathatja anélkül, hogy YAML-fájlokat és más fájlokat kellene másolnia vagy beillesztenie. Az alábbi parancsokkal klónozhatja az adattárat, és a kódolási nyelv mappájába léphet:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Követés a Jupyter Notebookban
A cikk lépéseit követve tekintse meg az MLflow-modell online végpontokon való üzembe helyezését bemutató jegyzetfüzetet a példák adattárában.
Csatlakozás a munkaterülethez
Csatlakozás az Azure Machine Learning-munkaterülethez:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Regisztrálja a modellt
Csak regisztrált modelleket helyezhet üzembe online végpontokon. A cikk lépései a Diabetes-adatkészlethez betanított modellt használják. Ebben az esetben már rendelkezik a modell helyi másolatával a klónozott 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 lenne, ha a modell egy futtatáson belül lenne naplózva?
Ha a modell egy futtatáson belül lett naplózva, közvetlenül regisztrálhatja.
A modell regisztrálásához ismernie kell a tárolási helyét:
- Ha az MLflow
autolog
szolgáltatást használja, a modell elérési útja a modell típusától és keretrendszerétől függ. Ellenőrizze a feladat kimenetét a modellmappa nevének azonosításához. Ez a mappa egy MLModel nevű fájlt tartalmaz. - Ha a
log_model
módszerrel manuálisan naplózza a modelleket, a modell elérési útját argumentumként adja át a metódusnak. Ha példáulmlflow.sklearn.log_model(my_model, "classifier")
használja a modell naplózására, akkorclassifier
az az elérési út, ahol a modell található.
Az Azure Machine Learning CLI v2 használatával létrehozhat egy modellt a betanítási feladat kimenetéből. Az alábbi kód egy azonosítóval $RUN_ID
rendelkező feladat összetevőit használja egy modell $MODEL_NAME
regisztrálásához.
$MODEL_PATH
az az elérési út, amelyet a feladat a modell tárolására használ.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
MLflow-modell üzembe helyezése online végponton
A következő kóddal konfigurálhatja annak a végpontnak a nevét és hitelesítési módját, amelyre a modellt telepíteni szeretné:
Állítson be egy végpontnevet az alábbi parancs futtatásával. Először cserélje le
YOUR_ENDPOINT_NAME
egyedi névre.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
A végpont konfigurálásához hozzon létre egy create-endpoint.yaml nevű YAML-fájlt, amely a következő sorokat tartalmazza:
$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.
Hozzon létre egy sklearn-deployment.yaml nevű YAML-fájlt, amely a következő sorokat tartalmazza:
$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
Megjegyzés:
Az
scoring_script
ésenvironment
automatikus generálása csak aPyFunc
modell változat esetén támogatott. A különböző modellváltozatok használatához lásd: MLflow modellek telepítésének testreszabása.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
--package-model
:az ml online-deployment create --package-model --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-traffic
Rendelje hozzá az összes adatforgalmat a deploymenthez. 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, ha a
--all-traffic
jelölőt a létrehozás során használja. Ha módosítania kell a forgalmat, használhatja aaz ml online-endpoint update --traffic
parancsot. A forgalom frissítésével kapcsolatos további információkért tekintse meg a forgalom fokozatos frissítését ismertető témakört.Frissítse a végpont konfigurációját:
Ez a lépés nem szükséges az Azure CLI-ben, ha a
--all-traffic
jelölőt a létrehozás során használja. Ha módosítania kell a forgalmat, használhatja aaz ml online-endpoint update --traffic
parancsot. A forgalom frissítésével kapcsolatos további információkért tekintse meg a forgalom fokozatos frissítését ismertető témakört.
A végpont meghívása
Ha az üzembe helyezés készen áll, használhatja a kérések kiszolgálására. Az üzembe helyezés tesztelésének egyik módja az üzembehelyezési ügyfél beépített meghívási képessége. A példák adattárában a sample-request-sklearn.json fájl a következő JSON-kódot tartalmazza. Használhatja mintakérésfájlként az üzembe helyezéshez.
{"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]
}}
Megjegyzés:
Ez a fájl a input_data
kulcsot használja ahelyett, hogy a inputs
-t, amelyet az MLflow kiszolgálás használ. Az Azure Machine Learning más bemeneti formátumot igényel 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 a beépített MLflow-kiszolgálón való üzembe helyezés és az Azure Machine Learning-következtetési kiszolgáló üzembe helyezése című témakörben talál.
Kérés elküldése a végpontnak:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A válasznak a következő szöveghez hasonlónak kell lennie:
[
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. Ha azonban testre szeretné szabni a következtetési folyamatot, megadhat egy pontozószkriptet.
Az MLflow-modell üzembe helyezését általában a következő esetekben szeretné testre szabni:
- A modellnek nincs
PyFunc
íze. - Testre kell szabnia a modell futtatásának módját. Például egy adott ízt kell használnia
mlflow.<flavor>.load_model()
a modell betöltéséhez. - A pontozási rutinban előfeldolgozást vagy utófeldolgozást kell végeznie, mert a modell nem hajtja végre ezt a feldolgozást.
- A modell kimenete nem jeleníthető meg szépen táblázatos adatokban. A kimenet például egy képnek megfelelő tenzor.
Fontos
Ha pontozószkriptet ad meg egy MLflow-modell üzembe helyezéséhez, meg kell adnia azt a környezetet is, amelyben az üzembe helyezés fut.
Egyéni pontozási szkript üzembe helyezése
Egyéni pontozószkriptet használó MLflow-modell üzembe helyezéséhez hajtsa végre a következő szakaszok lépéseit.
A modellmappa azonosítása
Az alábbi lépések végrehajtásával azonosítsa az MLflow-modellt tartalmazó mappát:
Nyissa meg az Azure Machine Learning Studiót.
Lépjen a Modellek szakaszra.
Válassza ki az üzembe helyezni kívánt modellt, és lépjen az Összetevők lapra.
Jegyezze fel a megjelenő mappát. Modell regisztrálásakor ezt a mappát kell megadnia.
Pontozószkript létrehozása
Az alábbi pontozási szkript ( score.py) egy MLflow-modellel végzett következtetést mutatja be. Ezt a szkriptet az igényeihez igazíthatja, vagy módosíthatja annak bármely részét a forgatókönyvnek megfelelően. Figyelje meg, hogy a korábban azonosított model
mappanév szerepel a init()
függvényben.
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 példa pontozási szkript az MLflow 1.X és az MLflow 2.X használatával működik. A várható bemeneti és kimeneti formátumok azonban eltérőek lehetnek ezeken a verziókon. Ellenőrizze a környezetdefinícióban, hogy melyik MLflow-verziót használja. Az MLflow 2.0 csak a Python 3.8 és újabb verzióiban támogatott.
Környezet létrehozása
A következő lépés egy olyan környezet létrehozása, amelyben futtathatja a pontozószkriptet. Mivel a modell MLflow-modell, a conda-követelmények is meg vannak adva a modellcsomagban. Az MLflow-modellben található fájlokról további információt az MLmodel formátumában talál. A környezetet a fájlból származó conda függőségek használatával hozhatja létre. Azonban tartalmaznia kell a azureml-inference-server-http
csomagot, amely az Azure Machine Learning online üzembe helyezéséhez szükséges.
Létrehozhat egy conda.yaml nevű conda definíciós fájlt, amely a következő sorokat tartalmazza:
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
- mlflow
- scikit-learn==1.7.0
- cloudpickle==3.1.1
- psutil==7.0.0
- pandas==2.3.0
- azureml-inference-server-http
name: mlflow-env
Megjegyzés:
A dependencies
conda fájl szakasza tartalmazza a azureml-inference-server-http
csomagot.
Ezzel a conda függőségi fájllal hozza létre a környezetet:
A környezet beágyazottan jön létre az üzembe helyezési konfigurációban.
Hozza létre az üzembe helyezést
A végpontok/online/ncd mappában hozzon létre egy üzembehelyezési konfigurációs fájlt deployment.yml, amely a következő sorokat tartalmazza:
$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.yaml
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 endpoints/online/ncd/deployment.yml
Kérelmek kiszolgálása
Ha az üzembe helyezés befejeződött, készen áll a kérések kiszolgálására. Az üzembe helyezés tesztelésének egyik módja, ha a invoke
metódust egy mintakérelemfájllal( például a következő fájllal) használja, 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érés elküldése a végpontnak:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A válasznak a következő szöveghez hasonlónak kell lennie:
{
"predictions": [
1095.2797413413252,
1134.585328803727
]
}
Figyelmeztetés
MLflow 2.0-s tanácsadás: Az MLflow 1.X-ben a válasz nem tartalmazza a predictions
kulcsot.
Erőforrások tisztítása
Ha már nincs szüksége a végpontra, törölje a társított erőforrásokat:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes