Condividi tramite


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 il file YAML e altri file, innanzitutto clonare il repository quindi cambiare le directory nella cartella:

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. Provare la versione gratuita o a pagamento di Azure Machine Learning.

  • Un'area di lavoro di Azure Machine Learning. Per creare un'area di lavoro, vedere Gestire aree di lavoro di Azure Machine Learning.

  • Assicurarsi di disporre delle autorizzazioni seguenti nell'area di lavoro di Azure Machine Learning:

    • Creare o gestire endpoint e distribuzioni batch: usare un ruolo di proprietario, collaboratore o personalizzato che consenta Microsoft.MachineLearningServices/workspaces/batchEndpoints/*.
    • Creare distribuzioni di Azure Resource Manager nel gruppo di risorse dell'area di lavoro: usare un ruolo Proprietario, Contributore o Personalizzato che consenta Microsoft.Resources/deployments/write nel gruppo di risorse in cui viene distribuita l'area di lavoro.
  • Installare il software seguente per usare Azure Machine Learning:

    Usare il comando seguente per installare l'interfaccia della riga di comando di Azure e l'estensione per Azure Machine Learning ml:

    az extension add -n ml
    

    Le distribuzioni dei componenti della pipeline per gli endpoint batch sono state introdotte nella versione 2.7 dell'estensione ml per l'interfaccia della riga di comando di Azure. Usare il comando az extension update --name ml per ottenere l'ultima versione.


Connettersi all'area di lavoro

L'area di lavoro è la risorsa di primo livello per Machine Learning. Fornisce una posizione centralizzata per gestire tutti gli artefatti creati durante l'uso di Machine Learning. In questa sezione ci si connette all'area di lavoro in cui vengono eseguite le attività di distribuzione.

Nel comando seguente, immettere i valori per ID sottoscrizione, area di lavoro, posizione e gruppo di risorse:

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

  1. 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"
    
  2. 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
    
  3. Creare l'endpoint:

    az ml batch-endpoint create --name $ENDPOINT_NAME  -f endpoint.yml
    
  4. 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.

  1. 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
    
  2. 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
    
  3. 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.

  4. 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