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


Kimenetek testreszabása kötegtelepítésekben

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Ez az útmutató bemutatja, hogyan hozhat létre egyéni kimeneteket és fájlokat létrehozó központi telepítéseket. Néha több vezérlésre van szükség a kötegelt következtetési feladatok kimeneteként írt adatok felett. Ezek az esetek a következő helyzeteket foglalják magukban:

  • Szabályoznia kell, hogy az előrejelzések hogyan legyenek megírva a kimenetben. Például hozzá szeretné fűzni az előrejelzést az eredeti adatokhoz, ha az adatok táblázatosak.
  • Az előrejelzéseket más fájlformátumban kell megírnia, mint amit a kötegelt üzembe helyezés támogatott.
  • A modell egy generatív modell, amely nem tudja táblázatos formátumban írni a kimenetet. Például a képeket kimenetként előállító modellek.
  • A modell egyetlen helyett több táblázatos fájlt hoz létre. Például olyan modellek, amelyek több forgatókönyv figyelembe vételével végeznek előrejelzést.

A Batch üzembe helyezései lehetővé teszik a feladatok kimenetének irányítását azáltal, hogy lehetővé teszi, hogy közvetlenül a batch üzembehelyezési feladat kimenetére írjon. Ebben az oktatóanyagban megtudhatja, hogyan helyezhet üzembe egy modellt kötegelt következtetés végrehajtásához és a kimenetek parquet formátumban történő megírásához az előrejelzések eredeti bemeneti adatokhoz való hozzáfűzésével.

A minta ismertetése

Ez a példa bemutatja, hogyan helyezhet üzembe egy modellt a kötegelt következtetés végrehajtásához és az előrejelzések kimenetben való megírásának testreszabásához. A modell az UCI Heart Disease adatkészletén alapul. Az adatbázis 76 attribútumot tartalmaz, de ez a példa 14 részhalmazt használ. A modell megpróbálja megjósolni a szívbetegség jelenlétét egy betegben. Az egész szám értéke 0 (nincs jelenlét) és 1 (jelenlét).

A modell betanítása egy XGBBoost osztályozóval történt, és az összes szükséges előfeldolgozás folyamatként scikit-learn lett csomagolva, így ez a modell egy teljes körű folyamat, amely a nyers adatoktól az előrejelzésekig tart.

A cikkben szereplő példa az azureml-examples adattárban található kódmintákon alapul. Ha helyileg szeretné futtatni a parancsokat a YAML és más fájlok másolása/beillesztése nélkül, először klónozza az adattárat, majd módosítsa a könyvtárakat a mappára:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

A példában szereplő fájlok a következők:

cd endpoints/batch/deploy-models/custom-outputs-parquet

Követés egy Jupyter-jegyzetfüzetben

Van egy Jupyter-jegyzetfüzet, amellyel követheti ezt a példát. A klónozott adattárban nyissa meg a custom-output-batch.ipynb nevű jegyzetfüzetet.

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 Tanulás ingyenes vagy fizetős verzióját.

  • Egy Azure Machine Learning-munkaterület. Ha nincs ilyenje, az Azure Machine Tanulás-munkaterületek kezelése című cikk lépéseit követve hozzon létre egyet.

  • Győződjön meg arról, hogy rendelkezik a következő engedélyekkel a munkaterületen:

    • Batch-végpontok és -üzemelő példányok létrehozása vagy kezelése: Használjon tulajdonosi, közreműködői vagy egyéni szerepkört, amely lehetővé teszi Microsoft.MachineLearningServices/workspaces/batchEndpoints/*.

    • ARM-üzemelő példányok létrehozása a munkaterület erőforráscsoportjában: Használjon tulajdonosi, közreműködői vagy egyéni szerepkört, amely lehetővé teszi Microsoft.Resources/deployments/write abban az erőforráscsoportban, amelyben a munkaterület telepítve van.

  • Az Azure Machine Tanulás használatához telepítenie kell a következő szoftvert:

    Az Azure CLI és az mlAzure Machine Tanulás bővítménye.

    az extension add -n ml
    

    Feljegyzés

    A Batch-végpontok folyamatösszetevő-üzembe helyezését az ml Azure CLI bővítményének 2.7-es verziójában vezettük be. Az utolsó verzió lekérésére használható az extension update --name ml .

Csatlakozás a munkaterülethez

A munkaterület az Azure Machine Learning legfelső szintű erőforrása, amely egy központi helyet biztosít az Azure Machine Learning használata során létrehozott összetevőkkel való munkához. Ebben a szakaszban ahhoz a munkaterülethez csatlakozunk, amelyben üzembe helyezési feladatokat fog végrehajtani.

Adja meg az előfizetés azonosítójának, munkaterületének, helyének és erőforráscsoportjának értékeit a következő kódban:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Kötegelt üzembe helyezés létrehozása egyéni kimenettel

Ebben a példában egy olyan üzembe helyezést hoz létre, amely közvetlenül a kötegelt üzembe helyezési feladat kimeneti mappájába tud írni. Az üzembe helyezés ezzel a funkcióval egyéni parquet-fájlokat ír.

Regisztrálja a modellt

Regisztrált modelleket csak kötegvégpont használatával helyezhet üzembe. 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='heart-classifier-sklpipe'
az ml model create --name $MODEL_NAME --type "custom_model" --path "model"

Pontozószkript létrehozása

Létre kell hoznia egy pontozószkriptet, amely beolvassa a kötegelt üzembe helyezés által biztosított bemeneti adatokat, és visszaadja a modell pontszámait. Közvetlenül a feladat kimeneti mappájába is írni fog. Összefoglalva, a javasolt pontozási szkript a következőképpen működik:

  1. A bemeneti adatokat CSV-fájlokként olvassa be.
  2. MLflow modellfüggvényt predict futtat a bemeneti adatokon keresztül.
  3. Hozzáfűzi az előrejelzéseket a pandas.DataFrame bemeneti adatokhoz.
  4. Az adatokat egy bemeneti fájlként elnevezett fájlba írja, de formátumában parquet .

kód/batch_driver.py

import os
import pickle
import glob
import pandas as pd
from pathlib import Path
from typing import List


def init():
    global model
    global output_path

    # AZUREML_MODEL_DIR is an environment variable created during deployment
    # It is the path to the model folder
    # Please provide your model's folder name if there's one:
    output_path = os.environ["AZUREML_BI_OUTPUT_PATH"]
    model_path = os.environ["AZUREML_MODEL_DIR"]
    model_file = glob.glob(f"{model_path}/*/*.pkl")[-1]

    with open(model_file, "rb") as file:
        model = pickle.load(file)


def run(mini_batch: List[str]):
    for file_path in mini_batch:
        data = pd.read_csv(file_path)
        pred = model.predict(data)

        data["prediction"] = pred

        output_file_name = Path(file_path).stem
        output_file_path = os.path.join(output_path, output_file_name + ".parquet")
        data.to_parquet(output_file_path)

    return mini_batch

Megjegyzések:

  • Figyelje meg, hogyan használja a környezeti változót AZUREML_BI_OUTPUT_PATH az üzembehelyezési feladat kimeneti útvonalához való hozzáféréshez.
  • A init() függvény feltölt egy globális változót output_path , amely később használható annak megismerésére, hogy hol kell írni.
  • A run metódus a feldolgozott fájlok listáját adja vissza. A függvénynek run vissza kell adnia egy list vagy egy objektumot pandas.DataFrame .

Figyelmeztetés

Vegye figyelembe, hogy az összes batch-végrehajtó egyidejűleg rendelkezik írási hozzáféréssel ehhez az elérési úthoz. Ez azt jelenti, hogy figyelembe kell vennie az egyidejűséget. Ebben az esetben győződjön meg arról, hogy minden végrehajtó a kimeneti mappa neveként a bemeneti fájlnév használatával írja a saját fájlját.

A végpont létrehozása

Most létrehoz egy kötegvégpontot, amely a modell üzembe helyezésének helyét adja heart-classifier-batch meg.

  1. Döntse el a végpont nevét. A végpont neve megjelenik a végponthoz társított URI-ban, ezért a kötegvégpontok nevének egyedinek kell lennie egy Azure-régióban. Például csak egy kötegvégpont lehet, amelyben a név mybatchendpoint szerepel westus2.

    Ebben az esetben helyezze a végpont nevét egy változóba, hogy később könnyen hivatkozhass rá.

    ENDPOINT_NAME="heart-classifier-custom"
    
  2. Konfigurálja a kötegvégpontot.

    A következő YAML-fájl egy kötegvégpontot határoz meg:

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: heart-classifier-batch
    description: A heart condition classifier for batch inference
    auth_mode: aad_token
    
  3. Hozza létre a végpontot:

    az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    

Az üzembe helyezés létrehozása

A következő lépéseket követve hozzon létre üzembe helyezést az előző pontozószkripttel:

  1. Először hozzon létre egy környezetet, ahol a pontozási szkript végrehajtható:

    Nincs szükség további lépésre az Azure Machine Tanulás parancssori felületéhez. A környezetdefiníció szerepel az üzembehelyezési fájlban.

    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  2. Hozza létre az üzembe helyezést. Figyelje meg, hogy output_action most már be van állítva.SUMMARY_ONLY

    Feljegyzés

    Ez a példa feltételezi, hogy rendelkezik egy számítási fürt nevével batch-cluster. Ennek megfelelően módosítsa ezt a nevet.

    Ha új üzembe helyezést szeretne létrehozni a létrehozott végpont alatt, hozzon létre egy YAML-konfigurációt az alábbihoz hasonlóan. További tulajdonságokat a teljes kötegelt végpont YAML-sémája is ellenőrizhet.

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-custom
    description: A heart condition classifier based on XGBoost and Scikit-Learn pipelines that append predictions on parquet files.
    type: model
    model: azureml:heart-classifier-sklpipe@latest
    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: summary_only
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    

    Ezután hozza létre az üzembe helyezést a következő paranccsal:

    az ml batch-deployment create --file deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    
  3. Ezen a ponton a kötegvégpont készen áll a használatra.

Az üzemelő példány tesztelése

A végpont teszteléséhez használja az adattárban található címkézetlen adatok mintáját, amely a modellel együtt használható. A Batch-végpontok csak a felhőben található és az Azure Machine Tanulás-munkaterületről elérhető adatokat képesek feldolgozni. Ebben a példában feltölti egy Azure Machine Tanulás adattárba. Létrehoz egy adategységet, amellyel meghívhatja a végpontot a pontozáshoz. Figyelje meg azonban, hogy a kötegelt végpontok olyan adatokat fogadnak el, amelyek több helyen is elhelyezhetők.

  1. A végpont meghívása tárfiókból származó adatokkal:

    JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data --query name -o tsv)
    

    Feljegyzés

    Előfordulhat, hogy a segédprogram jq nem minden telepítésre van telepítve. Útmutatást kaphat a GitHubon.

  2. A parancs visszatérése után azonnal elindul egy kötegelt feladat. A feladat állapotát a befejezésig figyelheti:

    az ml job show -n $JOB_NAME --web
    

A kimenetek elemzése

A feladat létrehoz egy elnevezett kimenetet, amely score az összes létrehozott fájl helyét tartalmazza. Mivel közvetlenül írt a könyvtárba, minden bemeneti fájlhoz egy-egy fájl tartozik, így várhatóan ugyanannyi fájl fog rendelkezni. Ebben a példában a kimeneti fájlokat ugyanúgy nevezze el, mint a bemeneteket, de parquet kiterjesztéssel rendelkeznek.

Feljegyzés

Figyelje meg, hogy egy fájl predictions.csv is szerepel a kimeneti mappában. Ez a fájl a feldolgozott fájlok összegzését tartalmazza.

A feladat eredményeit a feladat nevével töltheti le:

Az előrejelzések letöltéséhez használja a következő parancsot:

az ml job download --name $JOB_NAME --output-name score --download-path ./

Miután letöltötte a fájlt, megnyithatja a kedvenc eszközével. Az alábbi példa adatkeret használatával Pandas tölti be az előrejelzéseket.

import pandas as pd
import glob

output_files = glob.glob("named-outputs/score/*.parquet")
score = pd.concat((pd.read_parquet(f) for f in output_files))
score

A kimenet a következőképpen néz ki:

életkor szex ... Thal Jóslás
63 0 ... Rögzített 0
67 0 ... Normál 0
67 0 ... Visszafordítható 0
37 0 ... Normál 0

Az erőforrások eltávolítása

Futtassa a következő kódot a kötegvégpont és az összes mögöttes üzembe helyezés törléséhez. A kötegelt pontozási feladatok nem törlődnek.

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes