Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 inference (nebo scoring) pipeline v rámci dávkového koncového bodu. Kanál provádí vyhodnocení nad registrovaným modelem a zároveň opakovaně používá komponentu předběžného zpracování použitou během trénování 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řte pipeline, 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 datovým tokem
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.
Zobrazení pipeline 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 prohlížet otevřením notebooku 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 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 vytvoření nebo správu dávkových koncových bodů a nasazení použijte roli vlastníka, přispěvatele nebo vlastní roli, která má oprávnění
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*. - Pro vytváření nasazení v Azure Resource Manageru ve skupině prostředků pracovního prostoru použijte roli Vlastník, Přispěvatel nebo Vlastní role, která má
Microsoft.Resources/deployments/writeoprávnění ve skupině prostředků, kde je pracovní prostor nasazený.
- Pro vytvoření nebo správu dávkových koncových bodů a nasazení použijte roli vlastníka, přispěvatele nebo vlastní roli, která má oprávnění
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
mlrozšíření pro Azure Machine Learning:az extension add -n mlNasazení komponent kanálu pro dávkové koncové body vyžadují rozšíření
mlpro Azure CLI ve verzi 2.7 nebo novější (aktuální verze: 2.37.0).az extension update --name mlPomocí 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, kde provádíte úkony související s nasazením.
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 knihovnami XGBoost a scikit-learn. Soubor environment/conda.yml obsahuje konfiguraci prostředí:
environment/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. Ověřme, zda výpočetní zdroje existují v pracovním prostoru, nebo je jinak vytvoříme.
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.
Návod
V tomto tutoriálu znovu použijeme model a komponentu předzpracování z dřívějšího trénovacího procesu. Podle příkladu Jak nasadit tréninkovou pipeline s batch endpointy 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 byla vstupní data předzpracována (nebo transformována) před trénováním pomocí komponenty pro přípravu. Tuto komponentu budeme také muset zaregistrovat. Zaregistrujte součást přípravy:
Návod
Po registraci komponenty přípravy na ni teď můžete odkazovat z pracovního prostoru. Například
azureml:uci_heart_prepare@latestzíská poslední verzi přípravné komponenty.V rámci datových transformací v komponentě pro přípravu byla vstupní data normalizována, aby se prediktory zacentrovaly a jejich hodnoty byly omezeny na rozsah [-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.Návod
Osvědčeným postupem je zaregistrovat komponentu a odkazovat na ni z pipeline. 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óre -
transformations: (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 není zadána cesta, transformace se naučí ze vstupních dat. 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_jobpouží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 v souboru pipeline.yml:
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}}
Zobrazení pipeline je následující:
Otestování kanálu
Otestujme potrubí pomocí ukázkových dat. K tomu vytvoříme úlohu pomocí pipeline a výpočetního clusteru, které byly vytvořeny dříve batch-cluster.
Následující pipeline-job.yml soubor obsahuje konfiguraci pro pipeline úlohu:
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řte dávkový koncový bod
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í URI volá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 pipeline, 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.ymlobsahuje 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-clusterVytvoř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.yml --set-defaultNávod
Všimněte si použití příznaku
--set-defaultk označení, že toto nové nasazení je teď výchozí.Vaše implementace je připraveno k použití.
Testujte nasazení
Jakmile se nasazení vytvoří, je připravené přijímat pracovní úlohy. K otestování postupujte takto:
Naše nasazení vyžaduje, abychom označili jeden vstup dat a jeden textový vstup.
Soubor
inputs.ymlobsahuje 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: uploadNávod
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:
Sledovat můžete průběh aplikace a streamovat protokoly pomocí:
Přístup k výstupu úlohy
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 ohodnocená data.
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 | predikce |
|---|---|---|---|---|
| 0.9338 | 1 | ... | 2 | 0 |
| 1.3782 | 1 | ... | 3 | 1 |
| 1.3782 | 1 | ... | 4 | 0 |
| -1.954 | 1 | ... | 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 pouze vyvést predikci a pak ji zřetězit s původními hodnotami. Tato práce byla ponechána čtenáři.
Uvolně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.