Så här distribuerar du en pipeline för att utföra batchbedömning med förbearbetning
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
I den här artikeln får du lära dig hur du distribuerar en slutsatsdragningspipeline (eller bedömning) under en batchslutpunkt. Pipelinen utför bedömning över en registrerad modell samtidigt som en förbearbetningskomponent återanvänds från när modellen tränades. Om du återanvänder samma förbearbetningskomponent ser du till att samma förbearbetning tillämpas under bedömning.
Du lär dig att:
- Skapa en pipeline som återanvänder befintliga komponenter från arbetsytan
- Distribuera pipelinen till en slutpunkt
- Använda förutsägelser som genereras av pipelinen
Om det här exemplet
Det här exemplet visar hur du återanvänder förbearbetningskod och de parametrar som du lärde dig under förbearbetningen innan du använder din modell för slutsatsdragning. Genom att återanvända förbearbetningskoden och inlärda parametrar kan vi se till att samma transformeringar (till exempel normalisering och funktionskodning) som tillämpades på indata under träningen också tillämpas under inferensen. Modellen som används för slutsatsdragning utför förutsägelser på tabelldata från datauppsättningen för UCI-hjärtsjukdomar.
En visualisering av pipelinen är följande:
Exemplet i den här artikeln baseras på kodexempel som finns på lagringsplatsen azureml-examples . Om du vill köra kommandona lokalt utan att behöva kopiera/klistra in YAML och andra filer klonar du först lagringsplatsen och ändrar sedan kataloger till mappen:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Filerna för det här exemplet finns i:
cd endpoints/batch/deploy-pipelines/batch-scoring-with-preprocessing
Följ med i Jupyter Notebooks
Du kan följa med i Python SDK-versionen av det här exemplet genom att öppna notebook-filen sdk-deploy-and-test.ipynb på den klonade lagringsplatsen.
Förutsättningar
En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Mašinsko učenje.
En Azure Machine Learning-arbetsyta. Information om hur du skapar en arbetsyta finns i Hantera Azure Mašinsko učenje-arbetsytor.
Kontrollera att du har följande behörigheter på Mašinsko učenje-arbetsytan:
- Skapa eller hantera batchslutpunkter och distributioner: Använd en ägare, deltagare eller anpassad roll som tillåter
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
. - Skapa Azure Resource Manager-distributioner i arbetsytans resursgrupp: Använd en roll som ägare, deltagare eller anpassad som tillåter
Microsoft.Resources/deployments/write
i den resursgrupp där arbetsytan distribueras.
- Skapa eller hantera batchslutpunkter och distributioner: Använd en ägare, deltagare eller anpassad roll som tillåter
Installera följande programvara för att arbeta med Mašinsko učenje:
Kör följande kommando för att installera Azure CLI och
ml
tillägget för Azure Mašinsko učenje:az extension add -n ml
Distributioner av pipelinekomponenter för Batch-slutpunkter introduceras i version 2.7 av
ml
tillägget för Azure CLI.az extension update --name ml
Använd kommandot för att hämta den senaste versionen.
Anslut till din arbetsyta
Arbetsytan är resursen på den översta nivån för Mašinsko učenje. Den ger en central plats där du kan arbeta med alla artefakter som du skapar när du använder Mašinsko učenje. I det här avsnittet ansluter du till arbetsytan där du utför dina distributionsuppgifter.
I följande kommando anger du värdena för ditt prenumerations-ID, arbetsyta, plats och resursgrupp:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Skapa slutsatsdragningspipelinen
I det här avsnittet skapar vi alla tillgångar som krävs för vår slutsatsdragningspipeline. Vi börjar med att skapa en miljö som innehåller nödvändiga bibliotek för pipelinens komponenter. Nu ska vi skapa ett beräkningskluster där batchdistributionen ska köras. Efteråt registrerar vi de komponenter, modeller och transformeringar som vi behöver för att skapa vår slutsatsdragningspipeline. Slutligen ska vi skapa och testa pipelinen.
Skapa miljön
Komponenterna i det här exemplet använder en miljö med biblioteken XGBoost
och scikit-learn
. Filen environment/conda.yml
innehåller miljöns konfiguration:
miljö/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
Skapa miljön på följande sätt:
Definiera miljön:
miljö/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.
Skapa miljön:
Skapa ett beräkningskluster
Batchslutpunkter och distributioner körs på beräkningskluster. De kan köras på valfritt Azure-Mašinsko učenje beräkningskluster som redan finns på arbetsytan. Därför kan flera batchdistributioner dela samma beräkningsinfrastruktur. I det här exemplet ska vi arbeta med ett Azure Mašinsko učenje beräkningskluster med namnet batch-cluster
. Nu ska vi kontrollera att beräkningen finns på arbetsytan eller skapa den på annat sätt.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Registrera komponenter och modeller
Vi ska registrera komponenter, modeller och transformeringar som vi behöver för att bygga vår slutsatsdragningspipeline. Vi kan återanvända några av dessa tillgångar för träningsrutiner.
Dricks
I den här självstudien återanvänder vi modellen och förbearbetningskomponenten från en tidigare träningspipeline. Du kan se hur de skapades genom att följa exemplet Så här distribuerar du en träningspipeline med batchslutpunkter.
Registrera modellen som ska användas för förutsägelse:
Den registrerade modellen tränades inte direkt på indata. I stället förbearbetades indata (eller transformerades) före träningen med hjälp av en förberedelsekomponent. Vi måste också registrera den här komponenten. Registrera förberedelsekomponenten:
Dricks
När du har registrerat förberedelsekomponenten kan du nu referera till den från arbetsytan. Till exempel
azureml:uci_heart_prepare@latest
hämtar den sista versionen av förberedelsekomponenten.Som en del av datatransformeringarna i förberedelsekomponenten normaliserades indata för att centrera prediktorerna och begränsa deras värden i intervallet [-1, 1]. Transformeringsparametrarna hämtades i en scikit-learn-transformering som vi också kan registrera för att tillämpas senare när vi har nya data. Registrera omvandlingen på följande sätt:
Vi ska utföra slutsatsdragning för den registrerade modellen med hjälp av en annan komponent med namnet
score
som beräknar förutsägelserna för en viss modell. Vi refererar till komponenten direkt från dess definition.Dricks
Bästa praxis är att registrera komponenten och referera till den från pipelinen. I det här exemplet ska vi dock referera till komponenten direkt från dess definition för att hjälpa dig att se vilka komponenter som återanvänds från träningspipelinen och vilka som är nya.
Skapa pipelinen
Nu är det dags att binda samman alla element. Den slutsatsdragningspipeline som vi distribuerar har två komponenter (steg):
preprocess_job
: Det här steget läser indata och returnerar förberedda data och tillämpade transformeringar. Steget tar emot två indata:data
: en mapp som innehåller de indata som ska poängsättastransformations
: (valfritt) Sökväg till de transformeringar som ska tillämpas, om det är tillgängligt. När de tillhandahålls läss transformeringarna från modellen som anges på sökvägen. Men om sökvägen inte tillhandahålls kommer transformeringarna att läras från indata. För slutsatsdragning kan du dock inte lära dig transformeringsparametrarna (i det här exemplet normaliseringskoefficienterna) från indata eftersom du behöver använda samma parametervärden som lärdes under träningen. Eftersom den här indatan är valfri kan komponentenpreprocess_job
användas under träning och bedömning.
score_job
: Det här steget kommer att utföra slutsatsdragning på transformerade data med hjälp av indatamodellen. Observera att komponenten använder en MLflow-modell för att utföra slutsatsdragning. Slutligen skrivs poängen tillbaka i samma format som de lästes.
Pipelinekonfigurationen definieras i pipeline.yml
filen:
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}}
En visualisering av pipelinen är följande:
Testa pipelinen
Nu ska vi testa pipelinen med några exempeldata. För att göra det skapar vi ett jobb med hjälp av pipelinen och batch-cluster
beräkningsklustret som skapades tidigare.
Följande pipeline-job.yml
fil innehåller konfigurationen för pipelinejobbet:
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
Skapa testjobbet:
Skapa en batchslutpunkt
Ange ett namn för slutpunkten. Namnet på en batchslutpunkt måste vara unikt i varje region eftersom namnet används för att konstruera anrops-URI:n. För att säkerställa unikhet lägger du till eventuella avslutande tecken i det namn som anges i följande kod.
Konfigurera slutpunkten:
Skapa slutpunkten:
Fråga slutpunkts-URI:n:
Distribuera pipelinekomponenten
För att distribuera pipelinekomponenten måste vi skapa en batchdistribution. En distribution är en uppsättning resurser som krävs för att vara värd för den tillgång som utför det faktiska arbetet.
Konfigurera distributionen
Filen
deployment.yml
innehåller distributionens konfiguration. Du kan kontrollera YAML-schemat för den fullständiga batchslutpunkten för extra egenskaper.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
Skapa distributionen
Kör följande kod för att skapa en batchdistribution under batchslutpunkten och ange den som standarddistribution.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
Dricks
Observera att flaggan används
--set-default
för att ange att den nya distributionen nu är standard.Distributionen är klar för användning.
Testa distributionen
När distributionen har skapats är den redo att ta emot jobb. Följ dessa steg för att testa det:
Distributionen kräver att vi anger en datainmatning och en literalinmatning.
Filen
inputs.yml
innehåller definitionen för indatatillgången:inputs.yml
inputs: input_data: type: uri_folder path: data/unlabeled score_mode: type: string default: append outputs: scores: type: uri_folder mode: upload
Dricks
Mer information om hur du anger indata finns i Skapa jobb och indata för batchslutpunkter.
Du kan anropa standarddistributionen på följande sätt:
Du kan övervaka förloppet för showen och strömma loggarna med hjälp av:
Få åtkomst till jobbutdata
När jobbet har slutförts kan vi komma åt dess utdata. Det här jobbet innehåller bara ett utdata med namnet scores
:
Du kan ladda ned de associerade resultaten med hjälp av az ml job download
.
az ml job download --name $JOB_NAME --output-name scores
Läs poängsatta 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
Utdata ser ut så här:
ålder | Sex | ... | thal | prognos |
---|---|---|---|---|
0.9338 | 1 | ... | 2 | 0 |
1.3782 | 1 | ... | 3 | 1 |
1.3782 | 1 | ... | 4 | 0 |
-1.954 | 1 | ... | 3 | 0 |
Utdata innehåller förutsägelserna plus de data som angavs för poängkomponenten , som var förbearbetad. Kolumnen age
har till exempel normaliserats och kolumnen thal
innehåller ursprungliga kodningsvärden. I praktiken vill du förmodligen bara mata ut förutsägelsen och sedan sammanfoga den med de ursprungliga värdena. Det här arbetet har lämnats till läsaren.
Rensa resurser
När du är klar tar du bort de associerade resurserna från arbetsytan:
Kör följande kod för att ta bort batchslutpunkten och dess underliggande distribution. --yes
används för att bekräfta borttagningen.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Valfritt) Ta bort beräkning, såvida du inte planerar att återanvända beräkningsklustret med senare distributioner.