Een trainingspijplijn operationeel maken met batch-eindpunten
VAN TOEPASSING OP:Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (current)
In dit artikel leert u hoe u een trainingspijplijn onder een batch-eindpunt operationeel kunt maken. De pijplijn maakt gebruik van meerdere onderdelen (of stappen) die modeltraining, gegevensvoorverwerking en modelevaluatie omvatten.
U leert het volgende:
- Een trainingspijplijn maken en testen
- De pijplijn implementeren in een batch-eindpunt
- Wijzig de pijplijn en maak een nieuwe implementatie in hetzelfde eindpunt
- De nieuwe implementatie testen en instellen als de standaardimplementatie
Over dit voorbeeld
In dit voorbeeld wordt een trainingspijplijn geïmplementeerd die invoertrainingsgegevens (gelabeld) gebruikt en een voorspellend model produceert, samen met de evaluatieresultaten en de transformaties die tijdens de voorverwerking zijn toegepast. De pijplijn gebruikt tabellaire gegevens uit de UCI-gegevensset voor heart disease om een XGBoost-model te trainen. We gebruiken een voorverwerkingsonderdeel voor gegevens om de gegevens vooraf te verwerken voordat deze naar het trainingsonderdeel worden verzonden om het model aan te passen en te evalueren.
Een visualisatie van de pijplijn is als volgt:
Het voorbeeld in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder YAML en andere bestanden te hoeven kopiëren/plakken, kloont u eerst de opslagplaats en wijzigt u vervolgens mappen in de map:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
De bestanden voor dit voorbeeld bevinden zich in:
cd endpoints/batch/deploy-pipelines/training-with-components
Volgen in Jupyter-notebooks
U kunt de Python SDK-versie van dit voorbeeld volgen door het notebook sdk-deploy-and-test.ipynb te openen in de gekloonde opslagplaats.
Vereisten
Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:
Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer de gratis of betaalde versie van Azure Machine Learning.
Een Azure Machine Learning-werkruimte. Als u nog geen werkruimte hebt, gebruikt u de stappen in het artikel Azure Machine Learning-werkruimten beheren om er een te maken.
Zorg ervoor dat u over de volgende machtigingen in de werkruimte beschikt:
Batch-eindpunten en -implementaties maken of beheren: gebruik een eigenaar, inzender of aangepaste rol die dit toestaat
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
.ARM-implementaties maken in de resourcegroep van de werkruimte: gebruik een eigenaar, inzender of aangepaste rol die het mogelijk maakt
Microsoft.Resources/deployments/write
in de resourcegroep waarin de werkruimte wordt geïmplementeerd.
U moet de volgende software installeren om te kunnen werken met Azure Machine Learning:
De Azure CLI en de
ml
extensie voor Azure Machine Learning.az extension add -n ml
Notitie
Implementaties van pijplijnonderdelen voor Batch-eindpunten zijn geïntroduceerd in versie 2.7 van de
ml
extensie voor Azure CLI. Gebruikaz extension update --name ml
deze om de laatste versie ervan op te halen.
Verbinding maken met uw werkruimte
De werkruimte is de resource op het hoogste niveau voor Azure Machine Learning en biedt een gecentraliseerde werkplek met alle artefacten die u maakt in Azure Machine Learning. In deze sectie maken we verbinding met de werkruimte waarin u implementatietaken uitvoert.
Geef de waarden voor uw abonnements-id, werkruimte, locatie en resourcegroep door in de volgende code:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Het trainingspijplijnonderdeel maken
In deze sectie maken we alle assets die nodig zijn voor onze trainingspijplijn. We beginnen met het maken van een omgeving die de benodigde bibliotheken bevat om het model te trainen. Vervolgens maken we een rekencluster waarop de batchimplementatie wordt uitgevoerd. Ten slotte registreren we de invoergegevens als een gegevensasset.
Maak de omgeving
De onderdelen in dit voorbeeld gebruiken een omgeving met de XGBoost
en scikit-learn
bibliotheken. Het environment/conda.yml
bestand bevat de configuratie van de omgeving:
omgeving/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
Maak de omgeving als volgt:
Definieer de omgeving:
omgeving/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.
Maak de omgeving:
Een rekencluster maken
Batch-eindpunten en -implementaties worden uitgevoerd op rekenclusters. Ze kunnen worden uitgevoerd op elk Azure Machine Learning-rekencluster dat al bestaat in de werkruimte. Daarom kunnen meerdere batchimplementaties dezelfde rekeninfrastructuur delen. In dit voorbeeld werken we aan een Azure Machine Learning-rekencluster met de naam batch-cluster
. We gaan controleren of de berekening bestaat in de werkruimte of anders maken.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
De trainingsgegevens registreren als een gegevensasset
Onze trainingsgegevens worden weergegeven in CSV-bestanden. Als u een workload op productieniveau wilt nabootsen, registreren we de trainingsgegevens in het heart.csv
bestand als een gegevensasset in de werkruimte. Deze gegevensasset wordt later aangegeven als invoer voor het eindpunt.
az ml data create --name heart-classifier-train --type uri_folder --path data/train
Maak de pijplijn
De pijplijn die we willen operationeel maken, heeft één invoer, de trainingsgegevens en produceert drie uitvoerwaarden: het getrainde model, de evaluatieresultaten en de gegevenstransformaties die als voorverwerking worden toegepast. De pijplijn bestaat uit twee onderdelen:
preprocess_job
: Deze stap leest de invoergegevens en retourneert de voorbereide gegevens en de toegepaste transformaties. De stap ontvangt drie invoergegevens:data
: een map met de invoergegevens die moeten worden getransformeerd en beoordeeldtransformations
: (optioneel) Pad naar de transformaties die worden toegepast, indien beschikbaar. Als het pad niet is opgegeven, worden de transformaties geleerd op basis van de invoergegevens. Omdat detransformations
invoer optioneel is, kan het onderdeel worden gebruikt tijdens hetpreprocess_job
trainen en scoren.categorical_encoding
: de coderingsstrategie voor de categorische kenmerken (ordinal
ofonehot
).
train_job
: Deze stap traint een XGBoost-model op basis van de voorbereide gegevens en retourneert de evaluatieresultaten en het getrainde model. De stap ontvangt drie invoergegevens:data
: de vooraf verwerkte gegevens.target_column
: de kolom die we willen voorspellen.eval_size
: geeft het aandeel aan van de invoergegevens die worden gebruikt voor evaluatie.
De pijplijnconfiguratie is gedefinieerd in het deployment-ordinal/pipeline.yml
bestand:
implementatie-ordinaal/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: 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}}
Notitie
In het pipeline.yml
bestand ontbreekt de transformations
invoer in het preprocess_job
bestand; daarom leert het script de transformatieparameters van de invoergegevens.
Een visualisatie van de pijplijn is als volgt:
De pijplijn testen
We gaan de pijplijn testen met enkele voorbeeldgegevens. Hiervoor maken we een taak met behulp van de pijplijn en het batch-cluster
rekencluster dat eerder is gemaakt.
Het volgende pipeline-job.yml
bestand bevat de configuratie voor de pijplijntaak:
implementatie-ordinaal/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
Maak de testtaak:
az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest
Een batch-eindpunt maken
Geef een naam op voor het eindpunt. De naam van een batch-eindpunt moet uniek zijn in elke regio, omdat de naam wordt gebruikt om de aanroep-URI samen te stellen. Voeg eventuele volgtekens toe aan de naam die in de volgende code is opgegeven om de uniekheid te garanderen.
Configureer het eindpunt:
Het
endpoint.yml
bestand bevat de configuratie van het eindpunt.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
Maak het eindpunt:
Voer een query uit op de eindpunt-URI:
Het pijplijnonderdeel implementeren
Om het pijplijnonderdeel te implementeren, moeten we een batchimplementatie maken. Een implementatie is een set resources die vereist is voor het hosten van de asset die het werkelijke werk uitvoert.
De implementatie configureren:
Het
deployment-ordinal/deployment.yml
bestand bevat de configuratie van de implementatie. U kunt het YAML-schema voor het volledige batcheindpunt controleren op extra eigenschappen.implementatie-ordinaal/deployment.yml
$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
De implementatie maken:
Voer de volgende code uit om een batch-implementatie te maken onder het batch-eindpunt en deze in te stellen als de standaardimplementatie.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-ordinal/deployment.yml --set-default
Tip
Let op het gebruik van de
--set-default
vlag om aan te geven dat deze nieuwe implementatie nu de standaardwaarde is.Uw implementatie is klaar voor gebruik.
De implementatie testen
Zodra de implementatie is gemaakt, kunt u taken ontvangen. Volg deze stappen om deze te testen:
Voor onze implementatie moeten we één gegevensinvoer aangeven.
Het
inputs.yml
bestand bevat de definitie voor de invoergegevensasset:inputs.yml
inputs: input_data: type: uri_folder path: azureml:heart-classifier-train@latest
Tip
Zie Taken en invoergegevens maken voor batcheindpunten voor meer informatie over het aangeven van invoer.
U kunt de standaardimplementatie als volgt aanroepen:
U kunt de voortgang van de voorstelling controleren en de logboeken streamen met behulp van:
Het is de moeite waard om te vermelden dat alleen de invoer van de pijplijn wordt gepubliceerd als invoer in het batch-eindpunt. Is bijvoorbeeld categorical_encoding
een invoer van een stap van de pijplijn, maar geen invoer in de pijplijn zelf. Gebruik dit feit om te bepalen welke invoer u beschikbaar wilt maken voor uw clients en welke u wilt verbergen.
Uitvoer van Access-taken
Zodra de taak is voltooid, hebben we toegang tot enkele van de uitvoer. Deze pijplijn produceert de volgende uitvoer voor de onderdelen:
preprocess job
: uitvoer istransformations_output
train job
: uitvoer zijnmodel
enevaluation_results
U kunt de bijbehorende resultaten downloaden met behulp van:
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
Een nieuwe implementatie maken in het eindpunt
Eindpunten kunnen meerdere implementaties tegelijk hosten, terwijl slechts één implementatie als de standaardinstelling wordt behouden. Daarom kunt u uw verschillende modellen herhalen, de verschillende modellen implementeren op uw eindpunt en deze testen en ten slotte de standaardimplementatie overschakelen naar de modelimplementatie die het beste voor u werkt.
Laten we de manier wijzigen waarop voorverwerking in de pijplijn wordt uitgevoerd om te zien of we een model krijgen dat beter presteert.
Een parameter wijzigen in het voorverwerkingsonderdeel van de pijplijn
Het voorverwerkingsonderdeel heeft een invoer met de naam categorical_encoding
, die waarden ordinal
onehot
of . Deze waarden komen overeen met twee verschillende manieren om categorische functies te coderen.
ordinal
: Codeert de functiewaarden met numerieke waarden (rangtelwoorden) van[1:n]
n
waaruit het aantal categorieën in de functie is. Ordinale codering impliceert dat er een natuurlijke rangorde is tussen de functiecategorieën.onehot
: Impliceert geen geordende natuurlijke rangschikkingsrelatie, maar introduceert een dimensionaliteitsprobleem als het aantal categorieën groot is.
Standaard hebben we eerder gebruikt ordinal
. We gaan nu de categorische codering wijzigen om te gebruiken onehot
en te zien hoe het model presteert.
Tip
U kunt de categorial_encoding
invoer ook beschikbaar maken voor clients als invoer voor de pijplijntaak zelf. We hebben er echter voor gekozen om de parameterwaarde in de voorverwerkingsstap te wijzigen, zodat we de parameter in de implementatie kunnen verbergen en beheren en profiteren van de mogelijkheid om meerdere implementaties onder hetzelfde eindpunt te hebben.
Wijzig de pijplijn. Het ziet er als volgt uit:
De pijplijnconfiguratie is gedefinieerd in het
deployment-onehot/pipeline.yml
bestand: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}}
De implementatie configureren:
Het
deployment-onehot/deployment.yml
bestand bevat de configuratie van de implementatie. U kunt het YAML-schema voor het volledige batcheindpunt controleren op extra eigenschappen.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
De implementatie maken:
Uw implementatie is klaar voor gebruik.
Een niet-standaardimplementatie testen
Zodra de implementatie is gemaakt, kunt u taken ontvangen. We kunnen het testen op dezelfde manier als voorheen, maar nu gaan we een specifieke implementatie aanroepen:
Roep de implementatie als volgt aan en geef de implementatieparameter op om de specifieke implementatie
uci-classifier-train-onehot
te activeren:U kunt de voortgang van de voorstelling controleren en de logboeken streamen met behulp van:
De nieuwe implementatie configureren als de standaardimplementatie
Zodra we tevreden zijn over de prestaties van de nieuwe implementatie, kunnen we deze nieuwe instellen als de standaardinstelling:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
De oude implementatie verwijderen
Zodra u klaar bent, kunt u de oude implementatie verwijderen als u deze niet meer nodig hebt:
az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes
Resources opschonen
Wanneer u klaar bent, verwijdert u de gekoppelde resources uit de werkruimte:
Voer de volgende code uit om het batch-eindpunt en de onderliggende implementatie te verwijderen. --yes
wordt gebruikt om de verwijdering te bevestigen.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Optioneel) Verwijder rekenkracht, tenzij u van plan bent om uw rekencluster opnieuw te gebruiken met latere implementaties.
Volgende stappen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort: Gedurende 2024 worden GitHub Issues uitgefaseerd als het feedbackmechanisme voor inhoud. Dit wordt vervangen door een nieuw feedbacksysteem. Ga voor meer informatie naar:Feedback verzenden en bekijken voor