APPLIES TO:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (aktuell)
Azure Machine Learning tillhandahåller flera sätt att skicka ML-utbildningsjobb. 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.
- Python SDK v2 för Azure Machine Learning.
- REST API: DET API som CLI och SDK bygger på.
Förutsättningar
Om du vill använda REST API-informationen behöver du följande:
Ett huvudnamn för tjänsten på din arbetsyta. Använd autentisering med tjänstens huvudnamn för administrativa REST-begäranden.
En autentiseringstoken för tjänstens huvudnamn. Följ stegen i Hämta en autentiseringstoken för tjänstens huvudnamn för att hämta den här token.
Curl-verktyget. Curl-programmet finns i Podsystém Windowsu pre Linux eller någon UNIX-distribution.
Tips
I PowerShell curl är ett alias för Invoke-WebRequest. Kommandot 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. Använd det här verktyget för att extrahera värden från JSON-dokument som REST API anropar returnerar.
Klona exempellagringsplatsen
Kodfragmenten i den här artikeln baseras på exempel i Azure Machine Learning exempel GitHub lagringsplats. Om du vill klona lagringsplatsen till utvecklingsmiljön använder du följande kommando:
git clone --depth 1 https://github.com/Azure/azureml-examples
Tips
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 irisblommans datamängd för att träna en modell i MLFlow.
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 för att köra träningsjobbet.
1. Anslut till arbetsytan
Tips
Använd följande flikar 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. Använd den här informationen i MLClient från namnområdet azure.ai.ml för att få en referens till den Azure Machine Learning arbetsyta som krävs. Om du vill autentisera använder du default Azure-autentisering. Mer information om hur du konfigurerar autentiseringsuppgifter och ansluter till en arbetsyta finns i den här example.
#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 alla kommandon använder. 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 är belägen.
-
$WORKSPACE: Namnet på din Azure Machine Learning arbetsyta.
-
$COMPUTE_NAME: Namnet på ditt Azure Machine Learning beräkningskluster.
Administrativa REST-begäranden kräver en autentiseringstoken för tjänstens huvudnamn. Du kan hämta en token med följande kommando. Token lagras i $TOKEN miljövariabeln:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
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.
Den här artikeln använder Azure Resource Manager slutpunkter (management.azure.com). Ange API_VERSION till den aktuella Azure Machine Learning Resource Manager versionen:
API_VERSION="2025-09-01"
Om du använder Azure Machine Learning API:er för dataplanet kan de använda en annan version. Till exempel använder Azure AI Assets dataplansreferensen 2024-04-01-preview. Mer information finns i REST-åtgärdsgrupper för Azure Machine Learning (Resource Manager) och Azure AI Assets (dataplan).
När du tränar med hjälp av REST-API:et måste du ladda upp data och träningsskript 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 du kan använda den senare:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
2. Skapa en beräkningsresurs för träning
Ett Azure Machine Learning beräkningskluster är en fullständigt hanterad beräkningsresurs som du kan använda för att köra träningsjobbet. I följande exempel skapar du ett beräkningskluster med namnet cpu-cluster.
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 4
curl -X PUT \
"https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME?api-version=$API_VERSION" \
-H "Authorization:Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location": "'$LOCATION'",
"properties": {
"computeType": "AmlCompute",
"properties": {
"vmSize": "Standard_D2_V2",
"vmPriority": "Dedicated",
"scaleSettings": {
"maxNodeCount": 4,
"minNodeCount": 0,
"nodeIdleTimeBeforeScaleDown": "PT30M"
}
}
}
}'
Tips
Åtgärden returnerar ett svar efter några sekunder, men det här svaret anger bara att begäran om att skapa godkänns. Det kan ta flera minuter innan klustret har skapats.
3. Skicka in utbildningsjobbet
Om du vill köra det här skriptet använder du en command som kör det main.py Python skriptet som finns under ./sdk/python/jobs/single-step/lightgbm/iris/src/. Du skickar kommandot som en job till Azure Machine Learning.
Observera
Om du vill använda serverlös beräkning tar du bort compute="cpu-cluster" i den här koden.
from azure.ai.ml import command, Input
# define the command
command_job = command(
code="./src",
command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
inputs={
"iris_csv": Input(
type="uri_file",
path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
),
"learning_rate": 0.9,
"boosting": "gbdt",
},
compute="cpu-cluster",
)
# 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 föregående exempel har du konfigurerat:
-
code – sökväg där koden för att 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 du en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.3@latest. Du kan också använda anpassade miljöer genom att ange en bas docker-avbildning och ange en conda yaml ovanpå den.
-
inputs – en ordlista över indata som använder namn-värdepar till kommandot. Nyckeln är ett namn på indata i jobbets kontext och värdet är indatavärdet. Referera till input i genom att använda uttrycket . Om du vill använda filer eller mappar som indata använder du Input klassen . Mer information finns i SDK- och CLI v2-uttryck.
Mer information finns i referensdokumentationen.
När du skickar jobbet returnerar tjänsten 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 i det här exemplet kräver en YAML-jobbdefinitionsfil. Filen som används i det här exemplet innehåller följande innehåll:
Observera
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 föregående YAML konfigurerade du:
-
code – sökväg där koden för att 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 du en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.3@latest. Du kan också använda anpassade miljöer genom att ange en bas-dockeravbild och ange en conda yaml ovanför 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)
Använd 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 granska mer information om jobbet:
az ml job show -n $run_id --web
När du skickar ett jobb måste du ladda upp träningsskript och data 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:
DATA_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/data/iris-data/versions/$DATA_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Iris dataset\",
\"dataType\": \"uri_file\",
\"dataUri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
}"
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 :
TRAIN_CODE=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/train-lightgbm/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Train code\",
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/testjob\"
}
}" | jq -r '.id')
Skapa den miljö som klustret använder för att köra träningsskriptet. I det här exemplet använder du en kuraterad eller färdig miljö som tillhandahålls av Azure Machine Learning med namnet AzureML-lightgbm-3.3.
Azure Resource Manager stöder inte en @latest genväg för miljö-ID:t. Följande kommando visar miljöversionerna och väljer det senast ändrade versions-ID:t, som sedan lagras i variabeln $ENVIRONMENT .
ENVIRONMENT_NAME="AzureML-lightgbm-3.3"
ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/$ENVIRONMENT_NAME/versions?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" | jq -r '.value | sort_by(.systemData.lastModifiedAt) | last | .id')
Skicka slutligen arbetet. 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 :
Tips
Jobbnamnet måste vara unikt. I det här exemplet uuidgen används för att generera ett unikt värde för namnet.
Observera
Om du vill använda serverlös beräkning tar du bort raden i den \"computeId\": här koden.
run_id=$(uuidgen)
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/jobs/$run_id?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"jobType\": \"Command\",
\"codeId\": \"$TRAIN_CODE\",
\"command\": \"python main.py --iris-csv \$AZURE_ML_INPUT_iris\",
\"environmentId\": \"$ENVIRONMENT\",
\"inputs\": {
\"iris\": {
\"jobInputType\": \"uri_file\",
\"uri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
},
\"experimentName\": \"lightgbm-iris\",
\"computeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME\"
}
}"
Viktigt
Azure Machine Learning tränings- och kommandojobb stöder inte Azure Container Registries (ACR) som använder anpassade domännamnsetiketter. Jobb som refererar till ett sådant register kan misslyckas vid start på grund av fel vid avbildningshämtning eller miljömatchning. Undvik det här problemet:
- Använd standardformatet för inloggningsservern (
<registry-name>.azurecr.io) för din ACR.
- När du skapar registret anger du Domännamnsetikettomfång till Oskyddad.
Registrera den tränade modellen
Följande exempel visar hur du registrerar en modell på din Azure Machine Learning arbetsyta.
Tips
Träningsjobbet returnerar en name attribut. Använd det här namnet 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)
Tips
Använd namnet som lagras i variabeln $run_id 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
Tips
Använd namnet som lagras i variabeln $run_id som en del av sökvägen till modellen.
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelType\": \"mlflow_model\",
\"modelUri\":\"runs:/$run_id/model\"
}
}"
Nästa steg
Nu när du har en tränad modell lär du dig hur du distribuerar den med hjälp av en onlineslutpunkt.
Fler exempel finns i lagringsplatsen Azure Machine Learning GitHub.
Mer information om Azure CLI kommandon, Python SDK-klasser eller REST-API:er som används i den här artikeln finns i följande referensdokumentation: