Come distribuire pipeline con endpoint batch
SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)
È possibile distribuire i componenti della pipeline in un endpoint batch, offrendo un modo pratico per renderli operativi in Azure Machine Learning. Questo articolo illustra come creare una distribuzione batch che contiene una pipeline semplice. Si apprenderà come:
- Creare e registrare un componente della pipeline
- Creare un endpoint batch e distribuire un componente della pipeline
- Testare la distribuzione
Informazioni su questo esempio
In questo esempio si distribuirà un componente della pipeline costituita da un semplice processo di comando che stampi "hello world!". Questo componente non richiede input o output ed è lo scenario di distribuzione della pipeline più semplice.
L'esempio contenuto in questo articolo si basa sugli esempi di codice contenuti nel repository azureml-examples. Per eseguire i comandi in locale senza dover copiare o incollare YAML e altri file, usare i comandi seguenti per clonare il repository e passare alla cartella per il linguaggio di codifica:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
I file per questo esempio si trovano in:
cd endpoints/batch/deploy-pipelines/hello-batch
Seguire la procedura nei Jupyter Notebook
È possibile seguire la versione di Python SDK di questo esempio aprendo il notebook sdk-deploy-and-test.ipynb nel repository clonato.
Prerequisiti
Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Un'area di lavoro di Azure Machine Learning. Per creare un'area di lavoro, vedere Gestire le aree di lavoro di Azure Machine Learning.
Le autorizzazioni seguenti nell'area di lavoro di Azure Machine Learning:
- Per la creazione o la gestione di endpoint e distribuzioni batch: usare un ruolo proprietario, collaboratore o personalizzato a cui sono state assegnate le
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
autorizzazioni. - Per la creazione di distribuzioni di Azure Resource Manager nel gruppo di risorse dell'area di lavoro: usare un ruolo proprietario, collaboratore o personalizzato a cui è stata assegnata l'autorizzazione
Microsoft.Resources/deployments/write
nel gruppo di risorse in cui viene distribuita l'area di lavoro.
- Per la creazione o la gestione di endpoint e distribuzioni batch: usare un ruolo proprietario, collaboratore o personalizzato a cui sono state assegnate le
Interfaccia della riga di comando di Azure Machine Learning o Azure Machine Learning SDK per Python:
Eseguire il comando seguente per installare l'interfaccia della riga di comando di Azure e l'
ml
estensione per Azure Machine Learning:az extension add -n ml
Le distribuzioni dei componenti della pipeline per gli endpoint batch vengono introdotte nella versione 2.7 dell'estensione per l'interfaccia
ml
della riga di comando di Azure. Usare il comandoaz extension update --name ml
per ottenere la versione più recente.
Connettersi all'area di lavoro
L'area di lavoro è la risorsa di primo livello per Azure Machine Learning. Offre una posizione centralizzata per lavorare con tutti gli artefatti creati quando si usa Azure Machine Learning. In questa sezione ci si connette all'area di lavoro in cui verranno eseguite le attività di distribuzione.
Nel comando seguente immettere l'ID sottoscrizione, il nome dell'area di lavoro, il nome del gruppo di risorse e il percorso:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Creare il componente della pipeline
Gli endpoint batch possono distribuire modelli o componenti della pipeline. I componenti della pipeline sono riutilizzabili ed è possibile semplificare la procedura MLOps usando registri condivisi per spostare questi componenti da un'area di lavoro a un'altra.
Il componente della pipeline in questo esempio contiene un singolo passaggio che stampa solo un messaggio "hello world" nei log. Non richiede input o output.
Il file hello-component/hello.yml
contiene la configurazione per il componente della pipeline:
hello-component/hello.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
name: hello_batch
display_name: Hello Batch component
version: 1
type: pipeline
jobs:
main_job:
type: command
component:
code: src
environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
command: >-
python hello.py
Registrare il componente:
az ml component create -f hello-component/hello.yml
Creare un endpoint batch
Immettere un nome per l'endpoint. Il nome di un endpoint batch deve essere univoco in ogni area poiché viene usato per costruire l'URI di chiamata. Per garantirne l'univocità, aggiungere tutti i caratteri finali al nome specificato nel codice seguente.
ENDPOINT_NAME="hello-batch"
Configurare l'endpoint:
Il file
endpoint.yml
contiene la configurazione dell'endpoint.endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: hello-batch description: A hello world endpoint for component deployments. auth_mode: aad_token
Creare l'endpoint:
az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
Eseguire una query sull'URI dell'endpoint:
az ml batch-endpoint show --name $ENDPOINT_NAME
Distribuire il componente della pipeline
Per distribuire il componente della pipeline, è necessario creare una distribuzione batch. Per distribuzione si intende un set di risorse necessarie per ospitare l’asset che esegue il lavoro effettivo.
Creare un cluster di elaborazione. Gli endpoint e le distribuzioni batch vengono eseguiti nei cluster di elaborazione. Possono essere eseguiti in qualsiasi cluster di elaborazione di Azure Machine Learning già esistente nell'area di lavoro. Di conseguenza, più distribuzioni batch possono condividere la stessa infrastruttura di calcolo. In questo esempio si utilizzerà un cluster di elaborazione di Azure Machine Learning denominato
batch-cluster
. Verificare che il calcolo esista nell'area di lavoro o, in caso contrario, crearlo.az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Configurare la distribuzione:
Il file
deployment.yml
contiene la configurazione della distribuzione. È possibile controllare lo schema YAML dell'endpoint batch completo per ottenere proprietà aggiuntive.deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: hello-batch-dpl endpoint_name: hello-pipeline-batch type: pipeline component: azureml:hello_batch@latest settings: default_compute: batch-cluster
Creare la distribuzione:
Eseguire il codice seguente per creare una distribuzione batch nell'endpoint batch e impostarla come distribuzione predefinita.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
Suggerimento
Si noti che l'uso del flag
--set-default
sta ad indicare che ora questa nuova distribuzione è la distribuzione predefinita.La distribuzione è pronta per l'uso.
Testare la distribuzione
Dopo aver creato la distribuzione, questa è pronta per ricevere i processi. È possibile richiamare la distribuzione predefinita nel modo seguente:
JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --query name -o tsv)
Suggerimento
In questo esempio la pipeline non include input o output. Tuttavia, se il componente della pipeline richiede alcuni elementi, possono essere indicati in fase di chiamata. Per informazioni su come indicare input e output, vedere Creare processi e dati di input per gli endpoint batch o vedere l'esercitazione Come distribuire una pipeline per eseguire l'assegnazione dei punteggi batch con la pre-elaborazione (anteprima).
È possibile monitorare lo stato di avanzamento del contenuto e trasmettere i log usando:
az ml job stream -n $JOB_NAME
Pulire le risorse
Al termine, eliminare le risorse associate dall'area di lavoro:
Eseguire il codice seguente per eliminare l'endpoint batch e la relativa distribuzione sottostante. --yes
viene usato per confermare l'eliminazione.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Facoltativo) Eliminare le risorse di calcolo, a meno che non si preveda di riutilizzare il cluster di elaborazione con distribuzioni successive.
az ml compute delete -n batch-cluster
Passaggi successivi
- Come distribuire una pipeline di training con endpoint batch)
- Come distribuire una pipeline per eseguire l'assegnazione dei punteggi batch con la pre-elaborazione
- Creare endpoint batch dai processi delle pipeline
- Creare processi e inserire dati negli endpoint batch
- Risoluzione dei problemi relativi agli endpoint batch