Megosztás a következőn keresztül:


MLflow-modellek üzembe helyezése online végpontokon

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:

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ául mlflow.sklearn.log_model(my_model, "classifier") használja a modell naplózására, akkor classifier 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_NAMEregisztrá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

  1. 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
    
  2. Hozza létre a végpontot:

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yaml
    
  3. 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 és environment automatikus generálása csak a PyFunc 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.

  4. 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
    
  5. 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 a az 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.

  6. 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 a az 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:

  1. Nyissa meg az Azure Machine Learning Studiót.

  2. Lépjen a Modellek szakaszra.

  3. Válassza ki az üzembe helyezni kívánt modellt, és lépjen az Összetevők lapra.

  4. Jegyezze fel a megjelenő mappát. Modell regisztrálásakor ezt a mappát kell megadnia.

    Képernyőkép a modellösszetevőket tartalmazó mappáról.

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 modelmappané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