Använda batchslutpunkter (förhandsversion) för batchbedömning

Lär dig hur du använder batchslutpunkter (förhandsversion) för att göra batchbedömning. Batch-slutpunkter förenklar processen med att vara värd för dina modeller för batchbedömning, så att du kan fokusera på maskininlärning, inte infrastruktur. Mer information finns i Vad är Azure Machine Learning slutpunkter (förhandsversion)?.

I den här artikeln får du lära dig att göra följande:

  • Skapa en batchslutpunkt och en standarddistribution av batchar
  • Starta ett batchbedömningsjobb med Hjälp av Azure CLI
  • Övervaka körningsförloppet för batchbedömningsjobb och kontrollera bedömningsresultat
  • Distribuera en ny MLflow-modell med automatiskt genererad kod och miljö till en befintlig slutpunkt utan att påverka det befintliga flödet
  • Testa den nya distributionen och ange den som standarddistribution
  • Ta bort slutpunkten och distributionen som inte används

Viktigt

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Förutsättningar

az account set -s "<subscription ID>"
az configure --defaults group="<resource group>" workspace="<workspace name>" location="<location>"

Klona exempeldatabasen

Kör följande kommandon för att klona AzureML-exempellagringsplatsen och gå till cli katalogen . I den här artikeln används tillgångarna /cli/endpoints/batch i , och arbetsexempel från slutet till slut är /cli/batch-score.sh .

git clone https://github.com/Azure/azureml-examples 
cd azureml-examples/cli

Ange namnet på slutpunkten. Ersätt YOUR_ENDPOINT_NAME med ett unikt namn i en Azure-region.

För Unix kör du det här kommandot:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

För Windows du det här kommandot:

set ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Anteckning

Batch-slutpunktsnamn måste vara unika i en Azure-region. Det kan till exempel bara finnas en batchslutpunkt med namnet mybatchendpoint i westus2.

Skapa beräkning

Batch-slutpunkten körs bara på resurser för molnbaserad databehandling, inte lokalt. Resursen för molnbaserad databehandling är ett återanvändbart virtuellt datorkluster. Kör följande kod för att skapa Azure Machine Learning ett beräkningskluster. I följande exempel i den här artikeln används beräkningen som skapats här med namnet batch-cluster . Justera efter behov och referera till din beräkning med hjälp av azureml:<your-compute-name> .

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Anteckning

Du debiteras inte för beräkning nu eftersom klustret förblir på 0 noder tills en batchslutpunkt anropas och ett batchbedömningsjobb skickas. Läs mer om att hantera och optimera kostnader för AmlCompute.

Förstå batchslutpunkter och batchdistributioner

En batchslutpunkt är en HTTPS-slutpunkt som klienter kan anropa för att utlösa ett batchbedömningsjobb. Ett batchbedömningsjobb är ett jobb som poängsättning av flera indata (mer information finns i Vad är batchslutpunkter?). En batchdistribution är en uppsättning beräkningsresurser som är värdar för modellen som gör den faktiska batchbedömningen. En batchslutpunkt kan ha flera batchdistributioner.

Tips

En av batchdistributionerna fungerar som standarddistribution för slutpunkten. Standarddistributionen används för att göra den faktiska batchbedömningen när slutpunkten anropas. Läs mer om batchslutpunkter och batchdistribution.

Följande YAML-fil definierar en batchslutpunkt, som du kan inkludera i CLI-kommandot för att skapa batchslutpunkter. På lagringsplatsen finns den här filen på /cli/endpoints/batch/batch-endpoint.yml .

$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
name: mybatchedp
description: my sample batch endpoint
auth_mode: aad_token

I följande tabell beskrivs nyckelegenskaperna för slutpunktens YAML. Den fullständiga YAML-schemat för batchslutpunkten finns i CLI (v2) batch endpoint YAML schema (YAML-schema för batchslutpunkt).

Nyckel Beskrivning
$schema [Valfritt] YAML-schemat. Du kan visa schemat i exemplet ovan i en webbläsare om du vill se alla tillgängliga alternativ för en YAML-fil för batchslutpunkten.
name Namnet på batchslutpunkten. Måste vara unikt på Azure-regionnivå.
auth_mode Autentiseringsmetoden för batchslutpunkten. För närvarande Azure Active Directory endast tokenbaserad autentisering ( aad_token ).
defaults.deployment_name Namnet på distributionen som ska fungera som standarddistribution för slutpunkten.

Om du vill skapa en batchdistribution behöver du alla följande objekt:

  • Modellfiler eller en registrerad modell på arbetsytan som refereras med hjälp av azureml:<model-name>:<model-version> .
  • Koden för att poängdöma modellen.
  • Miljön där modellen körs. Det kan vara en Docker-avbildning med Conda-beroenden, eller en miljö som redan är registrerad på din arbetsyta som refereras med hjälp av azureml:<environment-name>:<environment-version> .
  • Den förskapade beräkning som refereras med hjälp azureml:<compute-name> av resursinställningarna och .

Mer information om hur du refererar till en Azure ML-entitet finns i Referera till en Azure ML-entitet.

Exempeldatabasen innehåller alla nödvändiga filer. Följande YAML-fil definierar en batchdistribution med alla nödvändiga indata och valfria inställningar. Du kan inkludera den här filen i CLI-kommandot för att skapa batchdistributionen. På lagringsplatsen finns den här filen på /cli/endpoints/batch/nonmlflow-deployment.yml .

$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json
name: nonmlflowdp
endpoint_name: mybatchedp
model: 
  local_path: ./mnist/model/
code_configuration:
  code:
    local_path: ./mnist/code/
  scoring_script: digit_identification.py
environment:
  conda_file: ./mnist/environment/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest
compute: azureml:batch-cluster
resources:
  instance_count: 1
max_concurrency_per_instance: 2
mini_batch_size: 10
output_action: append_row
output_file_name: predictions.csv
retry_settings:
  max_retries: 3
  timeout: 30
error_threshold: -1
logging_level: info

I följande tabell beskrivs nyckelegenskaperna för distributionen av YAML. Den fullständiga YAML-schemat för batchdistribution finns i YAML-schemat för BATCH-distribution i CLI (v2).

Nyckel Beskrivning
$schema [Valfritt] YAML-schemat. Du kan visa schemat i exemplet ovan i en webbläsare för att se alla tillgängliga alternativ för en YAML-fil för batchdistribution.
name Namnet på distributionen.
endpoint_name Namnet på slutpunkten som distributionen ska skapas under.
model Modellen som ska användas för batchbedömning. I exemplet definieras en infogade modell med hjälp av local_path . Modellfiler laddas automatiskt upp och registreras med ett automatiskt genererat namn och en version. Följ modellschemat om du vill ha fler alternativ. Som bästa praxis för produktionsscenarier bör du skapa modellen separat och referera till den här. Om du vill referera till en befintlig modell använder du azureml:<model-name>:<model-version> syntaxen .
code_configuration.code.local_path Den katalog som innehåller all Python-källkod för att poängdöma modellen.
code_configuration.scoring_script Python-filen i katalogen ovan. Den här filen måste ha init() en funktion och en run() funktion. Använd funktionen init() för kostsamma eller vanliga förberedelser (till exempel läsa in modellen i minnet). init() anropas bara en gång i början av processen. Använd run(mini_batch) för att poängsätter varje post. Värdet mini_batch för är en lista med filsökvägar. Funktionen run() ska returnera en Pandas DataFrame eller en matris. Varje returnerat element anger en lyckad körning av indataelementet i mini_batch . Kontrollera att tillräckligt med data ingår i svaret run() för att korrelera indata med utdata.
environment Miljön för att poängdöma modellen. Exemplet definierar en miljö som är infogade med conda_file och image . Beroendena conda_file installeras ovanpå image . Miljön registreras automatiskt med ett automatiskt genererat namn och en version. Följ miljöschemat om du vill ha fler alternativ. Som bästa praxis för produktionsscenarier bör du skapa miljön separat och referera till den här. Om du vill referera till en befintlig miljö använder du azureml:<environment-name>:<environment-version> syntaxen .
compute Beräkningen för att köra batchbedömning. I exemplet används som batch-cluster skapades i början och refererar till det med hjälp av azureml:<compute-name> syntax.
resources.instance_count Antalet instanser som ska användas för varje batchbedömningsjobb.
max_concurrency_per_instance [Valfritt] Det maximala antalet parallella scoring_script körningar per instans.
mini_batch_size [Valfritt] Antalet filer som kan scoring_script bearbetas i ett run() anrop.
output_action [Valfritt] Hur utdata ska ordnas i utdatafilen. append_row sammanfogar alla run() returnerade utdataresultat till en enda fil med namnet output_file_name . summary_only sammanfogar inte utdataresultatet och beräknar bara error_threshold .
output_file_name [Valfritt] Namnet på utdatafilen för batchbedömning för append_row output_action .
retry_settings.max_retries [Valfritt] Antalet maximala försök för en misslyckad scoring_script run() .
retry_settings.timeout [Valfritt] Tidsgränsen i sekunder för en för scoring_script run() bedömning av en minibatch.
error_threshold [Valfritt] Antalet bedömningsfel för indatafiler som ska ignoreras. Om antalet fel för hela indata går över det här värdet avslutas batchbedömningsjobbet. I exemplet används -1 , vilket anger att val av antal fel tillåts utan att batchbedömningsjobbet avslutas.
logging_level [Valfritt] Loggens verbositet. Värden som ökar ordagrannhet är: VARNING, INFORMATION och FELSÖKNING.

Förstå bedömningsskriptet

Som tidigare nämnts code_configuration.scoring_script måste innehålla två funktioner:

  • init(): Använd den här funktionen för kostsamma eller vanliga förberedelser. Du kan till exempel använda den för att läsa in modellen i ett globalt objekt. Den här funktionen anropas en gång i början av processen.
  • run(mini_batch): Den här funktionen anropas för var och en mini_batch och gör den faktiska bedömningspoängen.
    • mini_batch: Värdet mini_batch är en lista med filsökvägar.
    • response: Metoden run() ska returnera en Pandas DataFrame eller en matris. Varje returnerat utdataelement anger en lyckad körning av ett indataelement i indata mini_batch . Kontrollera att tillräckligt med data (till exempel en identifierare för varje indataelement) ingår i svaret för att run() korrelera indata med ett utdataresultat.

I exemplet används /cli/endpoints/batch/mnist/code/digit_identification.py . Modellen läses in från init() AZUREML_MODEL_DIR , vilket är sökvägen till modellmappen som skapades under distributionen. run(mini_batch) itererar varje fil i mini_batch , gör den faktiska modellbedömningen och returnerar sedan utdataresultat.

Distribuera med batchslutpunkter och köra batchbedömning

Nu ska vi distribuera modellen med batchslutpunkter och köra batchbedömning.

Skapa en batchslutpunkt

Det enklaste sättet att skapa en batchslutpunkt är att köra följande kod och endast tillhandahålla en --name .

az ml batch-endpoint create --name $ENDPOINT_NAME

Du kan också skapa en batchslutpunkt med hjälp av en YAML-fil. Lägg --file till parametern i kommandot ovan och ange YAML-filsökvägen.

Skapa en batchdistribution

Kör följande kod för att skapa en batchdistribution med nonmlflowdp namnet under batchslutpunkten och ange den som standarddistribution.

az ml batch-deployment create --name nonmlflowdp --endpoint-name $ENDPOINT_NAME --file endpoints/batch/nonmlflow-deployment.yml --set-default

Tips

Parametern --set-default anger den nyligen skapade distributionen som standarddistribution av slutpunkten. Det är ett praktiskt sätt att skapa en ny standarddistribution av slutpunkten, särskilt när du skapar den första distributionen. Som bästa praxis för produktionsscenarier kanske du vill skapa en ny distribution utan att ange den som standard, verifiera den och uppdatera standarddistributionen senare. Mer information finns i avsnittet Distribuera en ny modell.

Kontrollera batchslutpunkt och distributionsinformation

Använd show för att kontrollera information om slutpunkt och distribution.

Kontrollera en batchdistribution genom att köra följande kod:

az ml batch-deployment show --name nonmlflowdp --endpoint-name $ENDPOINT_NAME

Kör följande kod för att kontrollera en batchslutpunkt. Eftersom den nyligen skapade distributionen är inställd som standarddistribution bör du nonmlflowdp se defaults.deployment_name i från svaret.

az ml batch-endpoint show --name $ENDPOINT_NAME

Anropa batchslutpunkten för att starta ett batchbedömningsjobb

Anropa en batchslutpunkt utlöser ett batchbedömningsjobb. Ett jobb name returneras från invoke-svaret och kan användas för att spåra batchbedömningsförloppet. Batchbedömningsjobbet körs under en viss tidsperiod. Den delar upp hela indata i flera mini_batch processer och parallellt i beräkningsklustret. En scoring_scrip run() tar en och bearbetar den med en mini_batch process på en instans. Batchbedömningsjobbens utdata lagras i molnlagring, antingen i arbetsytans standardbloblagring eller i den lagring som du har angett.

Anropa batchslutpunkten med olika indataalternativ

Du kan antingen använda CLI eller REST invoke till slutpunkten. REST-upplevelse finns i Använda batchslutpunkter (förhandsversion) med REST

Det finns tre alternativ för att ange indata i CLI invoke .

  • Alternativ 1: Data i molnet

    Använd --input-path för att ange en mapp (använd prefix ) eller en fil folder: (använd prefix ) i ett Azure Machine Learning registrerat file: datalager. Syntaxen för data-URI är folder:azureml://datastores/<datastore-name>/paths/<data-path>/ för mapp och för en specifik file:azureml://datastores/<datastore-name>/paths/<data-path>/<file-name> fil. Mer information om data-URI finns i Azure Machine Learning datareferens-URI.

    I exemplet används offentligt tillgängliga data i en mapp https://pipelinedata.blob.core.windows.net/sampledata/mnist från , som innehåller tusentals handskrivna siffror. Namnet på batchbedömningsjobbet returneras från invoke-svaret. Kör följande kod för att anropa batchslutpunkten med hjälp av dessa data. --query name läggs till för att endast returnera jobbnamnet från invoke-svaret och används senare för att övervaka körningsförloppet för batchbedömningsjobb och Kontrollera batchbedömningsresultat. Ta --query name -o tsv bort om du vill se det fullständiga svaret för att anropa. Mer information om parametern --query finns i Fråga Azure CLI-kommandoutdata.

    JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input-path folder:https://pipelinedata.blob.core.windows.net/sampledata/mnist --query name -o tsv)
    
  • Alternativ 2: Registrerad datauppsättning

    Använd --input-dataset för att skicka en Azure Machine Learning registrerad datauppsättning. Om du vill skapa en datauppsättning az ml dataset create -h söker du efter instruktioner och följer datauppsättningsschemat.

    Anteckning

    FileDataset som skapas med föregående version av CLI och Python SDK kan också användas. TabularDataset stöds inte.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input-dataset azureml:<dataset-name>:<dataset-version>
    
  • Alternativ 3: Data som lagras lokalt

    Använd --input-local-path för att skicka datafiler som lagras lokalt. Datafilerna laddas automatiskt upp och registreras med ett automatiskt genererat namn och en version.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input-local-path <local-path>
    

Konfigurera utdataplats och överskrivningsinställningar

Batchbedömningsresultaten lagras som standard i arbetsytans standardblobarkiv i en mapp med namnet efter jobbnamn (ett systemgenererat GUID). Du kan konfigurera var bedömningsutdata ska lagras när du anropar batchslutpunkten. Använd --output-path för att konfigurera alla i Azure Machine Learning ett registrerat folder: datalager. Syntaxen för --output-path folder: är samma som --input-path folder: . Använd för att konfigurera ett nytt namn på utdatafilen om du föredrar att ha en utdatafil som innehåller alla --set output_file_name=<your-file-name> bedömningsresultat output_action=append_row (anges i din distribution av YAML).

Viktigt

Du måste använda en unik utdataplats. Om utdatafilen finns misslyckas batchbedömningsjobbet.

Vissa inställningar kan skrivas över när de anropas för att få bästa möjliga användning av beräkningsresurserna och för att förbättra prestandan:

  • Använd --instance-count för att skriva över instance_count . För större mängder datainmatningar kanske du till exempel vill använda fler instanser för att påskynda batchbedömningen från slut till slut.
  • Använd --mini-batch-size för att skriva över mini_batch_size . Antalet minibatchar bestäms av det totala antalet indatafiler och antalet mini_batch_size. Mindre mini_batch_size genererar fler minibatch. Minibatcherna kan köras parallellt, men det kan finnas extra schemaläggning och anropskostnader.
  • Använd --set för att skriva över andra inställningar, inklusive , och max_retries timeout error_threshold . De här inställningarna kan påverka batchbedömningstiden från slut till slut för olika arbetsbelastningar.

Kör följande kod för att ange utdataplats och skriva över inställningarna när du anropar. Exemplet lagrar utdata i en mapp med samma namn som slutpunkten i arbetsytans standardbloblagring och använder även ett slumpmässigt filnamn för att säkerställa att utdataplatsen är unik. Koden ska fungera i Unix. Ersätt med din egen unika mapp och filnamn.

export OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input-path folder:https://pipelinedata.blob.core.windows.net/sampledata/mnist --output-path folder:azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME --set output_file_name=$OUTPUT_FILE_NAME --mini-batch-size 20 --instance-count 5 --query name -o tsv)

Övervaka körningsförloppet för batchbedömningsjobb

Batchbedömningsjobb tar vanligtvis lite tid att bearbeta hela uppsättningen indata.

Du kan använda CLI job show för att visa jobbet. Kör följande kod för att kontrollera jobbstatusen från den tidigare slutpunkten invoke. Om du vill veta mer om jobbkommandon kör du az ml job -h .

STATUS=$(az ml job show -n $JOB_NAME --query status -o tsv)
echo $STATUS
if [[ $STATUS == "Completed" ]]
then
  echo "Job completed"
elif [[ $STATUS ==  "Failed" ]]
then
  echo "Job failed"
  exit 1
else 
  echo "Job status not failed or completed"
  exit 2
fi

Kontrollera batchbedömningsresultat

Följ stegen nedan för att visa bedömningsresultaten i Azure Storage Explorer när jobbet har slutförts:

  1. Kör följande kod för att öppna batchbedömningsjobbet i Azure Machine Learning studio. Job Studio-länken ingår också i svaret för invoke , som värdet för interactionEndpoints.Studio.endpoint .

    az ml job show -n $JOB_NAME --web
    
  2. Välj steget i diagrammet för batchscoring körningen.

  3. Välj fliken Utdata + loggar och välj sedan Visa datautdata.

  4. Från Datautdata väljer du ikonen för att öppna Storage Explorer.

Studio-skärmbild som visar platsen för att visa datautdata

Bedömningsresultaten i Storage Explorer liknar följande exempelsida:

Skärmbild av bedömningsutdata

Distribuera en ny modell

När du har en batchslutpunkt kan du fortsätta att förfina din modell och lägga till nya distributioner.

Skapa en ny batchdistribution som är värd för en MLflow-modell

Om du vill skapa en ny batchdistribution under den befintliga batchslutpunkten men inte ange den som standarddistribution kör du följande kod:

az ml batch-deployment create --name mlflowdp --endpoint-name $ENDPOINT_NAME --file endpoints/batch/mlflow-deployment.yml

Observera att --set-default inte används. Om du show batchslutpunkten igen bör du inte se någon ändring av defaults.deployment_name .

I exemplet används en modell ( /cli/endpoints/batch/autolog_nyc_taxi ) som tränats och spårats med MLflow. scoring_script och environment kan genereras automatiskt med hjälp av modellens metadata, inget behov av att ange i YAML-filen. Mer information om MLflow finns i Träna och spåra ML modeller med MLflow och Azure Machine Learning (förhandsversion).

Nedan visas YAML-filen som exemplet använder för att distribuera en MLflow-modell, som endast innehåller de minsta nödvändiga egenskaperna. Källfilen på lagringsplatsen är /cli/endpoints/batch/mlflow-deployment.yml .

$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json
name: mlflowdp
endpoint_name: mybatchedp
model: 
  local_path: ./autolog_nyc_taxi
compute: azureml:batch-cluster

Anteckning

scoring_script och environment automatisk generering stöder endast python-funktionsmodells smak och kolumnbaserad modellsignatur.

Testa en batchdistribution som inte är standard

Testa den nya icke-standarddistributionen genom att köra följande kod. I exemplet används en annan modell som accepterar en offentligt tillgänglig CSV-fil från https://pipelinedata.blob.core.windows.net/sampledata/nytaxi/taxi-tip-data.csv .

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name mlflowdp --input-path file:https://pipelinedata.blob.core.windows.net/sampledata/nytaxi/taxi-tip-data.csv --query name -o tsv)

az ml job show -n $JOB_NAME --web

az ml job stream -n $JOB_NAME

STATUS=$(az ml job show -n $JOB_NAME --query status -o tsv)
echo $STATUS
if [[ $STATUS == "Completed" ]]
then
  echo "Job completed"
elif [[ $STATUS ==  "Failed" ]]
then
  echo "Job failed"
  exit 1
else 
  echo "Job status not failed or completed"
  exit 2
fi

Observera --deployment-name att används för att ange det nya distributionsnamnet. Med den här parametern invoke kan du använda en icke-standarddistribution och den uppdaterar inte standarddistributionen av batchslutpunkten.

Uppdatera standarddistributionen för batchen

Kör följande kod för att uppdatera standarddistributionen av batchen för slutpunkten:

az ml batch-endpoint update --name $ENDPOINT_NAME --defaults deployment_name=mlflowdp

Om du nu show batchslutpunkten igen bör du se defaults.deployment_name har angetts till mlflowdp . Du kan invoke batchslutpunkten direkt utan --deployment-name parametern .

(Valfritt) Uppdatera distributionen

Om du vill uppdatera distributionen (till exempel uppdateringskod, modell, miljö eller inställningar) uppdaterar du YAML-filen och kör az ml batch-deployment update sedan . Du kan också uppdatera utan YAML-filen med hjälp av --set . Sök az ml batch-deployment update -h efter mer information.

Ta bort batchslutpunkten och distributionen

Om du inte ska använda den gamla batchdistributionen bör du ta bort den genom att köra följande kod. --yes används för att bekräfta borttagningen.

az ml batch-deployment delete --name nonmlflowdp --endpoint-name $ENDPOINT_NAME --yes

Kör följande kod för att ta bort batchslutpunkten och alla underliggande distributioner. Batchbedömningsjobb tas inte bort.

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes

Nästa steg