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)

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:

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.

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_IDrendelkező 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

  1. 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
    
  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.

    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 és environment csak a pyfunc 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.

  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 --with-package:

    az ml online-deployment create --with-package --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-traffic
    
  5. 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 parancsot az 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.

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

  1. 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.

    Képernyőkép a modellösszetevők elhelyezésére szolgáló mappáról.

  2. Hozzon létre egy pontozó szkriptet. Figyelje meg, hogy a korábban azonosított mappanév model hogyan szerepel a init() 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.

  3. 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-httpis 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.

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