Azure Machine Learning tillhandahåller flera sätt att skicka ML-träningsjobb. I den här artikeln får du lära dig hur du skickar jobb med hjälp av följande metoder:
Azure CLI-tillägg för maskininlärning: Tillägget ml , även kallat CLI v2.
I PowerShell curl är ett alias för Invoke-WebRequest och curl -d "key=val" -X POST uri blir Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Även om det är möjligt att anropa REST-API:et från PowerShell förutsätter exemplen i den här artikeln att du använder Bash.
Jq-verktyget för bearbetning av JSON. Det här verktyget används för att extrahera värden från JSON-dokument som returneras från REST API-anrop.
Klona exempellagringsplatsen
Kodfragmenten i den här artikeln baseras på exempel i GitHub-lagringsplatsen för Azure Machine Learning-exempel. Om du vill klona lagringsplatsen till utvecklingsmiljön använder du följande kommando:
Använd --depth 1 för att endast klona den senaste incheckningen till lagringsplatsen, vilket minskar tiden för att slutföra åtgärden.
Exempeljobb
Exemplen i den här artikeln använder irisblomsdatamängden för att träna en MLFlow-modell.
Träna i molnet
När du tränar i molnet måste du ansluta till din Azure Machine Learning-arbetsyta och välja en beräkningsresurs som ska användas för att köra träningsjobbet.
1. Anslut till arbetsytan
Dricks
Använd flikarna nedan för att välja den metod som du vill använda för att träna en modell. Om du väljer en flik växlar du automatiskt alla flikar i den här artikeln till samma flik. Du kan välja en annan flik när som helst.
För att ansluta till arbetsytan behöver du identifierarparametrar – en prenumeration, en resursgrupp och ett arbetsytenamn. Du använder den här informationen i MLClient från azure.ai.ml namnområdet för att få ett handtag till den Azure Machine Learning-arbetsyta som krävs. Om du vill autentisera använder du azure-standardautentiseringen. I det här exemplet finns mer information om hur du konfigurerar autentiseringsuppgifter och ansluter till en arbetsyta.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
När du använder Azure CLI behöver du identifierarparametrar – en prenumeration, resursgrupp och arbetsytenamn. Du kan ange dessa parametrar för varje kommando, men du kan också ange standardvärden som ska användas för alla kommandon. Använd följande kommandon för att ange standardvärden. Ersätt <subscription ID>, <Azure Machine Learning workspace name>och <resource group> med värdena för konfigurationen:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
I REST API-exemplen i den här artikeln används $SUBSCRIPTION_IDplatshållarna , $RESOURCE_GROUP, $LOCATIONoch $WORKSPACE . Ersätt platshållarna med dina egna värden på följande sätt:
$SUBSCRIPTION_ID: Ditt Azure-prenumerations-ID.
$RESOURCE_GROUP: Den Azure-resursgrupp som innehåller din arbetsyta.
$LOCATION: Den Azure-region där din arbetsyta finns.
$WORKSPACE: Namnet på din Azure Machine Learning-arbetsyta.
$COMPUTE_NAME: Namnet på ditt Azure Machine Learning-beräkningskluster.
Administrativ REST begär en autentiseringstoken för tjänstens huvudnamn. Du kan hämta en token med följande kommando. Token lagras i $TOKEN miljövariabeln:
Tjänstleverantören använder api-version argumentet för att säkerställa kompatibilitet. Argumentet api-version varierar från tjänst till tjänst. Ange API-versionen som en variabel för framtida versioner:
API_VERSION="2022-05-01"
När du tränar med rest-API:et måste data- och träningsskript laddas upp till ett lagringskonto som arbetsytan kan komma åt. I följande exempel hämtas lagringsinformationen för din arbetsyta och sparas i variabler så att vi kan använda den senare:
Ett Azure Machine Learning-beräkningskluster är en fullständigt hanterad beräkningsresurs som kan användas för att köra träningsjobbet. I följande exempel skapas ett beräkningskluster med namnet cpu-compute .
Ett svar returneras efter några sekunder, men detta anger bara att begäran om att skapa har godkänts. Det kan ta flera minuter innan klustret har skapats.
Om du vill köra det här skriptet använder du ett command som kör main.py Python-skript som finns under ./sdk/python/jobs/single-step/lightgbm/iris/src/. Kommandot körs genom att skicka det som en job till Azure Machine Learning.
Kommentar
Om du vill använda serverlös beräkning tar du bort compute="cpu-cluster" i den här koden.
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
I exemplen ovan har du konfigurerat:
code – sökväg där koden som ska köra kommandot finns
command - kommando som måste köras
environment – den miljö som krävs för att köra träningsskriptet. I det här exemplet använder vi en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Vi använder den senaste versionen av den här miljön med hjälp @latest av direktivet. Du kan också använda anpassade miljöer genom att ange en bas docker-avbildning och ange en conda yaml ovanpå den.
inputs – ordlista med indata med namnvärdepar till kommandot. Nyckeln är ett namn på indata i jobbets kontext och värdet är indatavärdet. Indata refereras i command med uttrycket ${{inputs.<input_name>}} . Om du vill använda filer eller mappar som indata kan du använda Input klassen . Mer information finns i SDK- och CLI v2-uttryck.
Mer information finns i referensdokumentationen.
När du skickar jobbet returneras en URL till jobbstatusen i Azure Machine Learning-studio. Använd studiogränssnittet för att visa jobbets förlopp. Du kan också använda returned_job.status för att kontrollera jobbets aktuella status.
Kommandot az ml job create som används i det här exemplet kräver en YAML-jobbdefinitionsfil. Innehållet i filen som används i det här exemplet är:
Kommentar
Om du vill använda serverlös beräkning tar du bort compute: azureml:cpu-cluster" i den här koden.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
I ovanstående konfigurerade du:
code – sökväg där koden som ska köra kommandot finns
command - kommando som måste köras
inputs – ordlista med indata med namnvärdepar till kommandot. Nyckeln är ett namn på indata i jobbets kontext och värdet är indatavärdet. Indata refereras i command med uttrycket ${{inputs.<input_name>}} . Mer information finns i SDK- och CLI v2-uttryck.
environment – den miljö som krävs för att köra träningsskriptet. I det här exemplet använder vi en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.3. Vi använder den senaste versionen av den här miljön med hjälp @latest av direktivet. Du kan också använda anpassade miljöer genom att ange en bas docker-avbildning och ange en conda yaml ovanpå den.
Använd följande kommando för att skicka jobbet. Träningsjobbets körnings-ID (namn) lagras i variabeln $run_id :
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Du kan använda det lagrade körnings-ID:t för att returnera information om jobbet. Parametern --web öppnar det Azure Machine Learning-studio webbgränssnittet där du kan öka detaljnivån för jobbet:
az ml job show -n $run_id --web
Som en del av jobböverföringen måste träningsskripten och data laddas upp till en molnlagringsplats som din Azure Machine Learning-arbetsyta kan komma åt.
Använd följande Azure CLI-kommando för att ladda upp träningsskriptet. Kommandot anger den katalog som innehåller de filer som behövs för träning, inte en enskild fil. Om du vill använda REST för att ladda upp data i stället kan du läsa put blob-referensen:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Skapa en versionsreferens till träningsdata. I det här exemplet finns data redan i molnet och finns på https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Mer information om hur du refererar till data finns i Data i Azure Machine Learning:
Registrera en versionsreferens till träningsskriptet för användning med ett jobb. I det här exemplet är skriptplatsen standardlagringskontot och containern som du laddade upp till i steg 1. ID:t för den versionerade träningskoden returneras och lagras i variabeln $TRAIN_CODE :
Skapa den miljö som klustret ska använda för att köra träningsskriptet. I det här exemplet använder vi en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Följande kommando hämtar en lista över miljöversionerna, där den senaste finns överst i samlingen. jq används för att hämta ID:t för den senaste versionen ([0]) som sedan lagras i variabeln $ENVIRONMENT .
Skicka slutligen jobbet. I följande exempel visas hur du skickar jobbet, refererar till träningskod-ID, miljö-ID, URL för indata och ID för beräkningsklustret. Jobbets utdataplats lagras i variabeln $JOB_OUTPUT :
Dricks
Jobbnamnet måste vara unikt. I det här exemplet uuidgen används för att generera ett unikt värde för namnet.
Kommentar
Om du vill använda serverlös beräkning tar du bort raden i den \"computeId\": här koden.
Egenskapen name som returneras av träningsjobbet används som en del av sökvägen till modellen.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Dricks
Namnet (som lagras i variabeln $run_id ) används som en del av sökvägen till modellen.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Dricks
Namnet (som lagras i variabeln $run_id ) används som en del av sökvägen till modellen.