Nasazení kanálu pro dávkové vyhodnocování pomocí předběžného zpracování
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 nasadit kanál odvozování (nebo bodování) v rámci dávkového koncového bodu. Kanál provádí bodování nad registrovaným modelem a zároveň opakovaně používá komponentu předběžného zpracování z trénovaného modelu. Opětovné použití stejné součásti předběžného zpracování zajišťuje, že se během vyhodnocování použije stejné předběžné zpracování.
Naučíte se:
- Vytvoření kanálu, který znovu použije existující komponenty z pracovního prostoru
- Nasazení kanálu do koncového bodu
- Využívání předpovědí vygenerovaných kanálem
O tomto příkladu
Tento příklad ukazuje, jak znovu použít předzpracování kódu a parametry získané během předběžného zpracování, než použijete model k odvozování. Opětovným použitím kódu předzpracování a naučených parametrů můžeme zajistit, aby se během odvozování použily stejné transformace (například normalizace a kódování funkcí), které byly použity na vstupní data během trénování. Model použitý k odvozování provede předpovědi na tabulkových datech ze sady dat UCI Heart Disease.
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/batch-scoring-with-preprocessing
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í kanálu odvozování
V této části vytvoříme všechny prostředky potřebné pro náš kanál odvozování. Začneme vytvořením prostředí, které zahrnuje potřebné knihovny pro komponenty kanálu. V dalším kroku vytvoříme výpočetní cluster, na kterém se bude dávkové nasazení spouštět. Potom zaregistrujeme komponenty, modely a transformace, které potřebujeme k vytvoření kanálu odvozování. Nakonec kanál sestavíme a otestujeme.
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
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 komponent a modelů
Zaregistrujeme komponenty, modely a transformace, které potřebujeme k vytvoření kanálu odvozování. Některé z těchto prostředků můžeme znovu použít pro tréninkové rutiny.
Tip
V tomto kurzu znovu použijeme model a komponentu předběžného zpracování z dřívějšího trénovacího kanálu. Podle příkladu jak nasadit trénovací kanál s koncovými body batch můžete zjistit, jak byly vytvořeny.
Zaregistrujte model, který se má použít k predikci:
Registrovaný model nebyl vytrénován přímo na vstupní data. Místo toho se vstupní data před trénováním před trénováním předzpracovala (nebo transformovala). Tuto komponentu budeme také muset zaregistrovat. Zaregistrujte součást přípravy:
Tip
Po registraci komponenty přípravy na ni teď můžete odkazovat z pracovního prostoru. Například
azureml:uci_heart_prepare@latest
získáte poslední verzi součásti přípravy.V rámci transformací dat v přípravě komponenty byla vstupní data normalizována tak, aby se zacentrovala prediktory a omezila jejich hodnoty v rozsahu [-1, 1]. Parametry transformace byly zachyceny v transformaci scikit-learn, kterou můžeme zaregistrovat i později, když máme nová data. Následujícím způsobem zaregistrujte transformaci:
Pro zaregistrovaný model provedeme odvozování pomocí jiné komponenty s názvem
score
, která vypočítá predikce pro daný model. Na komponentu budeme odkazovat přímo z její definice.Tip
Osvědčeným postupem je zaregistrovat komponentu a odkazovat na ni z kanálu. V tomto příkladu ale budeme odkazovat přímo na komponentu z její definice, abychom zjistili, které komponenty se znovu používají z trénovacího kanálu a které z nich jsou nové.
Sestavení kanálu
Teď je čas svázat všechny prvky dohromady. Kanál odvozování, který nasadíme, má dvě komponenty (kroky):
preprocess_job
: Tento krok přečte vstupní data a vrátí připravená data a použité transformace. Krok přijímá dva vstupy:data
: složka obsahující vstupní data pro určení skóretransformations
: (volitelné) Cesta k transformacím, které budou použity, pokud jsou k dispozici. Pokud je k dispozici, transformace se čtou z modelu, který je uveden v cestě. Pokud ale cesta není zadaná, transformace se z vstupních dat naučí. Pro odvozování ale nemůžete zjistit parametry transformace (v tomto příkladu normalizační koeficienty) ze vstupních dat, protože potřebujete použít stejné hodnoty parametrů, které jste se naučili během trénování. Vzhledem k tomu, že tento vstup je volitelný, lze komponentupreprocess_job
použít během trénování a vyhodnocování.
score_job
: Tento krok provede odvozování transformovaných dat pomocí vstupního modelu. Všimněte si, že komponenta používá k odvozování model MLflow. Nakonec se skóre zapisují ve stejném formátu jako přečtené.
Konfigurace kanálu je definována pipeline.yml
v souboru:
pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline
name: batch_scoring_uci_heart
display_name: Batch Scoring for UCI heart
description: This pipeline demonstrates how to make batch inference using a model from the Heart Disease Data Set problem, where pre and post processing is required as steps. The pre and post processing steps can be components reusable from the training pipeline.
inputs:
input_data:
type: uri_folder
score_mode:
type: string
default: append
outputs:
scores:
type: uri_folder
mode: upload
jobs:
preprocess_job:
type: command
component: azureml:uci_heart_prepare@latest
inputs:
data: ${{parent.inputs.input_data}}
transformations:
path: azureml:heart-classifier-transforms@latest
type: custom_model
outputs:
prepared_data:
score_job:
type: command
component: components/score/score.yml
inputs:
data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
model:
path: azureml:heart-classifier@latest
type: mlflow_model
score_mode: ${{parent.inputs.score_mode}}
outputs:
scores:
mode: upload
path: ${{parent.outputs.scores}}
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:
pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: uci-classifier-score-job
description: |-
This pipeline demonstrate how to make batch inference using a model from the Heart \
Disease Data Set problem, where pre and post processing is required as steps. The \
pre and post processing steps can be components reused from the training pipeline.
compute: batch-cluster
component: pipeline.yml
inputs:
input_data:
type: uri_folder
score_mode: append
outputs:
scores:
mode: upload
Vytvořte testovací úlohu:
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:
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.yml
obsahuje konfiguraci nasazení. Můžete zkontrolovat, jestli schéma YAML celého dávkového koncového bodu obsahuje další vlastnosti.deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-prepros-xgb endpoint_name: uci-classifier-batch type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Vytvoření 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.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 a jeden literálový vstup.
Soubor
inputs.yml
obsahuje definici vstupního datového prostředku:inputs.yml
inputs: input_data: type: uri_folder path: data/unlabeled score_mode: type: string default: append outputs: scores: type: uri_folder mode: upload
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í:
Výstup úlohy accessu
Po dokončení úlohy můžeme získat přístup k jeho výstupu. Tato úloha obsahuje pouze jeden výstup s názvem scores
:
Přidružené výsledky si můžete stáhnout pomocí az ml job download
.
az ml job download --name $JOB_NAME --output-name scores
Přečtěte si data s skóre:
import pandas as pd
import glob
output_files = glob.glob("named-outputs/scores/*.csv")
score = pd.concat((pd.read_csv(f) for f in output_files))
score
Výstup vypadá takto:
stáří | Sex | ... | thal | předpověď |
---|---|---|---|---|
0.9338 | 0 | ... | 2 | 0 |
1.3782 | 0 | ... | 3 | 0 |
1.3782 | 0 | ... | 4 | 0 |
-1.954 | 0 | ... | 3 | 0 |
Výstup obsahuje předpovědi a data poskytnutá komponentě skóre , která byla předem zpracována. Například sloupec age
byl normalizován a sloupec thal
obsahuje původní kódovací hodnoty. V praxi pravděpodobně chcete predikci vyvést pouze a pak ji zřetězení s původními hodnotami. Tato práce byla ponechána čtenáři.
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.