Zprovoznění trénovacího kanálu pomocí dávkových koncových bodů
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)
V tomto článku se dozvíte, jak zprovoznit trénovací kanál v rámci dávkového koncového bodu. Kanál používá více komponent (nebo kroků), které zahrnují trénování modelu, předběžné zpracování dat a vyhodnocení modelu.
Naučíte se:
- Vytvoření a otestování trénovacího kanálu
- Nasazení kanálu do dávkového koncového bodu
- Úprava kanálu a vytvoření nového nasazení ve stejném koncovém bodu
- Otestujte nové nasazení a nastavte ho jako výchozí nasazení.
O tomto příkladu
Tento příklad nasadí trénovací kanál, který přijímá vstupní trénovací data (označená) a vytvoří prediktivní model spolu s výsledky vyhodnocení a transformacemi použitými během předběžného zpracování. Kanál použije tabulková data ze sady dat UCI Heart Disease Data Set k trénování modelu XGBoost. Komponentu předběžného zpracování dat používáme k předběžnému zpracování dat před odesláním do trénovací komponenty, aby se přizpůsobila a vyhodnotila model.
Vizualizace kanálu je následující:
Příklad v tomto článku vychází z ukázek kódu obsažených v úložišti azureml-examples . Pokud chcete příkazy spustit místně, aniž byste museli kopírovat nebo vkládat YAML a další soubory, naklonujte úložiště pomocí následujících příkazů a přejděte do složky pro váš kódovací jazyk:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Soubory pro tento příklad jsou v:
cd endpoints/batch/deploy-pipelines/training-with-components
Sledování v poznámkových blocích Jupyter
Verzi sady Python SDK tohoto příkladu můžete sledovat otevřením poznámkového bloku sdk-deploy-and-test.ipynb v naklonovaném úložišti.
Požadavky
Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Pracovní prostor služby Azure Machine Learning. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Správa pracovních prostorů Služby Azure Machine Learning.
Následující oprávnění v pracovním prostoru Azure Machine Learning:
- Pro vytváření nebo správu dávkových koncových bodů a nasazení: Použijte roli Vlastník, Přispěvatel nebo Vlastní role, která má přiřazená
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
oprávnění. - Vytváření nasazení Azure Resource Manageru ve skupině prostředků pracovního prostoru: Použijte roli Vlastník, Přispěvatel nebo Vlastní role, která má přiřazená
Microsoft.Resources/deployments/write
oprávnění ve skupině prostředků, ve které je pracovní prostor nasazený.
- Pro vytváření nebo správu dávkových koncových bodů a nasazení: Použijte roli Vlastník, Přispěvatel nebo Vlastní role, která má přiřazená
Azure Machine Learning CLI nebo sada Azure Machine Learning SDK pro Python:
Spuštěním následujícího příkazu nainstalujte Azure CLI a
ml
rozšíření pro Azure Machine Learning:az extension add -n ml
Nasazení součástí kanálu pro dávkové koncové body jsou zavedena ve verzi 2.7
ml
rozšíření pro Azure CLI.az extension update --name ml
Pomocí příkazu získejte nejnovější verzi.
Připojení k pracovnímu prostoru
Pracovní prostor je prostředek nejvyšší úrovně pro Azure Machine Learning. Poskytuje centralizované místo pro práci se všemi artefakty, které vytvoříte při použití služby Azure Machine Learning. V této části se připojíte k pracovnímu prostoru, ve kterém provádíte úlohy nasazení.
V následujícím příkazu zadejte ID předplatného, název pracovního prostoru, název skupiny prostředků a umístění:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Vytvoření komponenty trénovacího kanálu
V této části vytvoříme všechny prostředky potřebné pro náš trénovací kanál. Začneme vytvořením prostředí, které zahrnuje potřebné knihovny pro trénování modelu. Pak vytvoříme výpočetní cluster, na kterém se bude dávkové nasazení spouštět, a nakonec zaregistrujeme vstupní data jako datový prostředek.
Vytvoření prostředí
Komponenty v tomto příkladu budou používat prostředí s knihovnamiXGBoost
.scikit-learn
Soubor environment/conda.yml
obsahuje konfiguraci prostředí:
prostředí/conda.yml
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- azureml-mlflow
- datasets
- jobtools
- cloudpickle==1.6.0
- dask==2023.2.0
- scikit-learn==1.1.2
- xgboost==1.3.3
- pandas==1.4
name: mlflow-env
Vytvořte prostředí následujícím způsobem:
Definujte prostředí:
prostředí/xgboost-sklearn-py38.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json name: xgboost-sklearn-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: conda.yml description: An environment for models built with XGBoost and Scikit-learn.
Vytvořte prostředí:
Vytvoření výpočetního clusteru
Koncové body a nasazení služby Batch běží na výpočetních clusterech. Můžou běžet na libovolném výpočetním clusteru Azure Machine Learning, který už v pracovním prostoru existuje. Proto může několik dávkových nasazení sdílet stejnou výpočetní infrastrukturu. V tomto příkladu budeme pracovat na výpočetním clusteru Azure Machine Learning s názvem batch-cluster
. Pojďme ověřit, jestli výpočetní prostředky v pracovním prostoru existují, nebo je vytvořit jinak.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Registrace trénovacích dat jako datového prostředku
Naše trénovací data jsou reprezentována v souborech CSV. Abychom napodobovali více úloh na produkční úrovni, zaregistrujeme trénovací data v heart.csv
souboru jako datový prostředek v pracovním prostoru. Tento datový asset se později označí jako vstup do koncového bodu.
az ml data create --name heart-classifier-train --type uri_folder --path data/train
Vytvoření kanálu
Kanál, který chceme zprovoznit, přijímá jeden vstup, trénovací data a vytváří tři výstupy: trénovaný model, výsledky vyhodnocení a transformace dat použité jako předběžné zpracování. Kanál se skládá ze dvou komponent:
preprocess_job
: Tento krok přečte vstupní data a vrátí připravená data a použité transformace. Krok přijímá tři vstupy:data
: složka obsahující vstupní data pro transformaci a skóretransformations
: (volitelné) Cesta k transformacím, které budou použity, pokud jsou k dispozici. Pokud cesta není zadaná, transformace se z vstupních dat naučí. Vzhledem k tomu, žetransformations
vstup je volitelný, lze komponentupreprocess_job
použít během trénování a vyhodnocování.categorical_encoding
: strategie kódování pro kategorické funkce (ordinal
neboonehot
).
train_job
: Tento krok vytrénuje model XGBoost na základě připravených dat a vrátí výsledky vyhodnocení a natrénovaný model. Krok přijímá tři vstupy:data
: předzpracovaná data.target_column
: sloupec, který chceme předpovědět.eval_size
: určuje podíl vstupních dat použitých k vyhodnocení.
Konfigurace kanálu je definována deployment-ordinal/pipeline.yml
v souboru:
řadový/pipeline.yml nasazení
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline
name: uci-heart-train-pipeline
display_name: uci-heart-train
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
type: uri_folder
mode: upload
jobs:
preprocess_job:
type: command
component: ../components/prepare/prepare.yml
inputs:
data: ${{parent.inputs.input_data}}
categorical_encoding: ordinal
outputs:
prepared_data:
transformations_output: ${{parent.outputs.prepare_transformations}}
train_job:
type: command
component: ../components/train_xgb/train_xgb.yml
inputs:
data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
target_column: target
register_best_model: false
eval_size: 0.3
outputs:
model:
mode: upload
type: mlflow_model
path: ${{parent.outputs.model}}
evaluation_results:
mode: upload
type: uri_folder
path: ${{parent.outputs.evaluation_results}}
Poznámka:
pipeline.yml
V souboru transformations
chybí preprocess_job
vstup , a proto skript naučí transformační parametry ze vstupních dat.
Vizualizace kanálu je následující:
Otestování kanálu
Pojďme kanál otestovat pomocí ukázkových dat. K tomu vytvoříme úlohu pomocí kanálu a výpočetního clusteru vytvořeného batch-cluster
dříve.
Následující pipeline-job.yml
soubor obsahuje konfiguraci pro úlohu kanálu:
pořadí nasazení/pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
experiment_name: uci-heart-train-pipeline
display_name: uci-heart-train-job
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
compute: batch-cluster
component: pipeline.yml
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
mode: upload
Vytvořte testovací úlohu:
az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest
Vytvoření dávkového koncového bodu
Zadejte název koncového bodu. Název dávkového koncového bodu musí být v každé oblasti jedinečný, protože se tento název používá k vytvoření identifikátoru URI vyvolání. Pokud chcete zajistit jedinečnost, připojte k názvu zadanému v následujícím kódu všechny koncové znaky.
Konfigurace koncového bodu:
Soubor
endpoint.yml
obsahuje konfiguraci koncového bodu.endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: uci-classifier-train description: An endpoint to perform training of the Heart Disease Data Set prediction task. auth_mode: aad_token
Vytvořte koncový bod:
Zadejte dotaz na identifikátor URI koncového bodu:
Nasazení komponenty kanálu
Abychom mohli nasadit komponentu kanálu, musíme vytvořit dávkové nasazení. Nasazení je sada prostředků potřebných k hostování prostředku, který provádí skutečnou práci.
Konfigurace nasazení:
Soubor
deployment-ordinal/deployment.yml
obsahuje konfiguraci nasazení. Můžete zkontrolovat, jestli schéma YAML celého dávkového koncového bodu obsahuje další vlastnosti.řadový/deployment.yml nasazení
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-xgb description: A sample deployment that trains an XGBoost model for the UCI dataset. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Vytvořte nasazení:
Spuštěním následujícího kódu vytvořte dávkové nasazení v rámci koncového bodu dávky a nastavte ho jako výchozí nasazení.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-ordinal/deployment.yml --set-default
Tip
Všimněte si použití příznaku
--set-default
k označení, že toto nové nasazení je teď výchozí.Vaše nasazení je připravené k použití.
Otestování nasazení
Jakmile se nasazení vytvoří, je připravené přijímat úlohy. K otestování postupujte takto:
Naše nasazení vyžaduje, abychom označili jeden vstup dat.
Soubor
inputs.yml
obsahuje definici vstupního datového prostředku:inputs.yml
inputs: input_data: type: uri_folder path: azureml:heart-classifier-train@latest
Tip
Další informace o tom, jak označit vstupy, najdete v tématu Vytváření úloh a vstupních dat pro dávkové koncové body.
Výchozí nasazení můžete vyvolat následujícím způsobem:
Průběh zobrazení a streamování protokolů můžete sledovat pomocí:
Stojí za zmínku, že se v koncovém bodu dávky publikují jenom vstupy kanálu jako vstupy. Je to například categorical_encoding
vstup kroku kanálu, ale ne vstup v samotném kanálu. Pomocí této skutečnosti můžete řídit, které vstupy chcete zpřístupnit klientům a které z nich chcete skrýt.
Přístup k výstupům úlohy
Po dokončení úlohy můžeme získat přístup k některým jeho výstupům. Tento kanál vytvoří pro své komponenty následující výstupy:
preprocess job
: výstup jetransformations_output
train job
: výstupy jsoumodel
aevaluation_results
Přidružené výsledky si můžete stáhnout pomocí:
az ml job download --name $JOB_NAME --output-name transformations
az ml job download --name $JOB_NAME --output-name model
az ml job download --name $JOB_NAME --output-name evaluation_results
Vytvoření nového nasazení v koncovém bodu
Koncové body můžou hostovat více nasazení najednou a současně ponechat jako výchozí jenom jedno nasazení. Proto můžete iterovat různé modely, nasadit různé modely do koncového bodu a otestovat je a nakonec přepnout výchozí nasazení na nasazení modelu, které je pro vás nejvhodnější.
Pojďme změnit způsob provádění předběžného zpracování v kanálu, abychom zjistili, jestli získáme model, který funguje lépe.
Změna parametru v komponentě předběžného zpracování kanálu
Komponenta předběžného zpracování má vstupní název categorical_encoding
, který může mít hodnoty ordinal
nebo onehot
. Tyto hodnoty odpovídají dvěma různým způsobům kódování kategorických funkcí.
ordinal
: Zakóduje hodnoty funkcí pomocí číselných hodnot (řadových) z[1:n]
, kden
je počet kategorií ve funkci. Pořadové kódování znamená, že mezi kategoriemi funkcí je přirozené pořadí.onehot
: Neznamená přirozený vztah seřazený podle pořadí, ale představuje problém s dimenzionalitou, pokud je počet kategorií velký.
Ve výchozím nastavení jsme použili ordinal
dříve. Teď změníme kategorické kódování tak, aby se používalo onehot
, a podívejme se, jak model funguje.
Tip
Případně bychom mohli zpřístupnit categorial_encoding
vstup klientům jako vstup pro samotnou úlohu kanálu. Rozhodli jsme se ale změnit hodnotu parametru v kroku předběžného zpracování, abychom mohli skrýt a řídit parametr uvnitř nasazení a využít možnost mít více nasazení ve stejném koncovém bodu.
Upravte kanál. Vypadá takto:
Konfigurace kanálu je definována
deployment-onehot/pipeline.yml
v souboru:deployment-onehot/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json type: pipeline name: uci-heart-train-pipeline display_name: uci-heart-train description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset. inputs: input_data: type: uri_folder outputs: model: type: mlflow_model mode: upload evaluation_results: type: uri_folder mode: upload prepare_transformations: type: uri_folder mode: upload jobs: preprocess_job: type: command component: ../components/prepare/prepare.yml inputs: data: ${{parent.inputs.input_data}} categorical_encoding: onehot outputs: prepared_data: transformations_output: ${{parent.outputs.prepare_transformations}} train_job: type: command component: ../components/train_xgb/train_xgb.yml inputs: data: ${{parent.jobs.preprocess_job.outputs.prepared_data}} target_column: target eval_size: 0.3 outputs: model: type: mlflow_model path: ${{parent.outputs.model}} evaluation_results: type: uri_folder path: ${{parent.outputs.evaluation_results}}
Konfigurace nasazení:
Soubor
deployment-onehot/deployment.yml
obsahuje konfiguraci nasazení. Můžete zkontrolovat, jestli schéma YAML celého dávkového koncového bodu obsahuje další vlastnosti.deployment-onehot/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-onehot description: A sample deployment that trains an XGBoost model for the UCI dataset using onehot encoding for variables. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Vytvořte nasazení:
Vaše nasazení je připravené k použití.
Testování nedefaultních nasazení
Jakmile se nasazení vytvoří, je připravené přijímat úlohy. Můžeme ho otestovat stejným způsobem jako předtím, ale teď vyvoláme konkrétní nasazení:
Následujícím způsobem spusťte nasazení zadáním parametru nasazení, který aktivuje konkrétní nasazení
uci-classifier-train-onehot
:Průběh zobrazení a streamování protokolů můžete sledovat pomocí:
Nakonfigurujte nové nasazení jako výchozí.
Jakmile budeme spokojeni s výkonem nového nasazení, můžeme tuto novou nastavit jako výchozí:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Odstranění starého nasazení
Jakmile budete hotovi, můžete staré nasazení odstranit, pokud už ho nepotřebujete:
az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes
Vyčištění prostředků
Jakmile budete hotovi, odstraňte přidružené prostředky z pracovního prostoru:
Spuštěním následujícího kódu odstraňte koncový bod dávky a jeho základní nasazení. --yes
slouží k potvrzení odstranění.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Volitelné) Odstraňte výpočetní prostředky, pokud neplánujete znovu použít výpočetní cluster s pozdějším nasazením.