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
ml
Azure 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:
- A bemeneti adatokat CSV-fájlokként olvassa be.
- MLflow modellfüggvényt
predict
futtat a bemeneti adatokon keresztül. - Hozzáfűzi az előrejelzéseket a
pandas.DataFrame
bemeneti adatokhoz. - 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ótoutput_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énynekrun
vissza kell adnia egylist
vagy egy objektumotpandas.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.
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
szerepelwestus2
.Konfigurálja a kötegvégpontot.
Hozza létre a végpontot:
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:
Először hozzon létre egy környezetet, ahol a pontozási szkript végrehajtható:
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
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.
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.A parancs visszatérése után azonnal elindul egy kötegelt feladat. A feladat állapotát a befejezésig figyelheti:
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