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 costituito da un semplice processo di comando che stampa "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 notebook di Jupyter

È possibile seguire la versione di Python SDK di questo esempio aprendo il notebook sdk-deploy-and-test.ipynb nel repository clonato.

Prerequisiti

Prima di seguire la procedura descritta in questo articolo, assicurarsi di disporre dei prerequisiti seguenti:

  • 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. Se non è disponibile, usare la procedura descritta nell'articolo Gestire le aree di lavoro di Azure Machine Learning per crearne una.

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

    • Creare o gestire endpoint e distribuzioni batch: usare un ruolo Proprietario, Collaboratore o Personalizzato che consenta Microsoft.MachineLearningServices/workspaces/batchEndpoints/*.

    • Creare distribuzioni arm nel gruppo di risorse dell'area di lavoro: usare un ruolo Proprietario, Collaboratore o Personalizzato che consenta Microsoft.Resources/deployments/write nel gruppo di risorse in cui viene distribuita l'area di lavoro.

  • Per usare Azure Machine Learning, è necessario installare il software seguente:

    L'Interfaccia della riga di comando di Azure e l'mlestensione per Azure Machine Learning.

    az extension add -n ml
    

    Nota

    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 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 Azure Machine Learning, che fornisce una posizione centralizzata da cui gestire tutti gli artefatti creati quando si usa Azure Machine Learning. In questa sezione ci si connetterà all'area di lavoro in cui verranno eseguite le attività di distribuzione.

Passare i valori per l'ID sottoscrizione, l'area di lavoro, la posizione e il gruppo di risorse nel codice seguente:

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 hello-component/hello.yml file 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.0/labels/latest
      command: >-
        python hello.py

Registrare il componente:

az ml component create -f hello-component/hello.yml

Creare un endpoint batch

  1. Specificare 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. Una distribuzione è 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 calcolo. Possono essere eseguiti in qualsiasi cluster di calcolo 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 lavorerà in un cluster di calcolo di Azure Machine Learning denominato batch-cluster. Verificare che il calcolo esista nell'area di lavoro o crearlo in caso contrario.

    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 l'uso del --set-default flag per indicare che questa nuova distribuzione è ora l'impostazione 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 intenda riutilizzare il cluster di calcolo con distribuzioni successive.

az ml compute delete -n batch-cluster

Passaggi successivi