APPLIES TO:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (current)
Azure Machine Learning biedt meerdere manieren om ML-trainingstaken in te dienen. In dit artikel leert u hoe u taken verzendt met behulp van de volgende methoden:
- Azure CLI-extensie voor machine learning: de extensie
ml, ook wel CLI v2 genoemd.
- Python SDK v2 voor Azure Machine Learning.
- REST API: de API waarop de CLI en SDK zijn gebouwd.
Voorwaarden
Als u de REST API-gegevens wilt gebruiken, hebt u het volgende nodig:
Een service-principal in uw werkruimte. Gebruik service-principalverificatie voor beheer-REST-aanvragen.
Een verificatietoken van de service principal. Volg de stappen in Een verificatietoken voor de service-principal ophalen om dit token op te halen.
Het curl-hulpprogramma. Het curl-programma is beschikbaar in de Windows-subsysteem voor Linux of een UNIX-distributie.
Tip
In PowerShell curl is dit een alias voor Invoke-WebRequest. De opdracht curl -d "key=val" -X POST uri wordt Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Hoewel het mogelijk is om de REST API aan te roepen vanuit PowerShell, gaan de voorbeelden in dit artikel ervan uit dat u Bash gebruikt.
Het hulpprogramma jq voor het verwerken van JSON. Gebruik dit hulpprogramma om waarden te extraheren uit de JSON-documenten die REST API-aanroepen retourneren.
De opslagplaats met voorbeelden klonen
De codefragmenten in dit artikel zijn gebaseerd op voorbeelden in de Azure Machine Learning voorbeelden GitHub opslagplaats. Gebruik de volgende opdracht om de opslagplaats naar uw ontwikkelomgeving te klonen:
git clone --depth 1 https://github.com/Azure/azureml-examples
Tip
Gebruik --depth 1 om alleen de meest recente commit in de opslagplaats te klonen, waardoor de tijd voor het voltooien van de bewerking wordt verkort.
Voorbeeldtaak
In de voorbeelden in dit artikel wordt de irisbloemgegevensset gebruikt om een MLFlow-model te trainen.
Trainen in de cloud
Wanneer u in de cloud traint, moet u verbinding maken met uw Azure Machine Learning werkruimte en een rekenresource selecteren om de trainingstaak uit te voeren.
1. Verbinding maken met de werkruimte
Tip
Gebruik de volgende tabbladen om de methode te selecteren die u wilt gebruiken om een model te trainen. Als u een tabblad selecteert, worden alle tabbladen in dit artikel automatisch naar hetzelfde tabblad overgeschakeld. U kunt op elk gewenst moment een ander tabblad selecteren.
Als u verbinding wilt maken met de werkruimte, hebt u id-parameters nodig: een abonnement, resourcegroep en werkruimtenaam. Gebruik deze gegevens in de MLClient uit de azure.ai.ml naamruimte om een ingang te krijgen voor de vereiste Azure Machine Learning werkruimte. Gebruik de default Azure verificatie om te verifiëren. Zie dit voorbeeld voor meer informatie over het configureren van referenties en verbinding maken met een werkruimte.
#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)
Wanneer u de Azure CLI gebruikt, hebt u id-parameters nodig: een abonnement, resourcegroep en werkruimtenaam. Hoewel u deze parameters voor elke opdracht kunt opgeven, kunt u ook de standaardwaarden instellen die alle opdrachten gebruiken. Gebruik de volgende opdrachten om standaardwaarden in te stellen. Vervang <subscription ID>, <Azure Machine Learning workspace name> en <resource group> door de waarden voor uw configuratie:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
De REST API-voorbeelden in dit artikel gebruiken$SUBSCRIPTION_ID, $RESOURCE_GROUPen $LOCATION$WORKSPACE tijdelijke aanduidingen. Vervang de tijdelijke aanduidingen als volgt door uw eigen waarden:
-
$SUBSCRIPTION_ID: uw Azure-abonnements-id.
-
$RESOURCE_GROUP: de Azure resourcegroep die uw werkruimte bevat.
-
$LOCATION: de Azure regio waar uw werkruimte zich bevindt.
-
$WORKSPACE: de naam van uw Azure Machine Learning werkruimte.
-
$COMPUTE_NAME: de naam van uw Azure Machine Learning rekencluster.
Voor beheer-REST-aanvragen is een verificatietoken voor de service-principal vereist. U kunt een token ophalen met de volgende opdracht. Het token wordt opgeslagen in de $TOKEN omgevingsvariabele:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
De serviceprovider gebruikt het api-version argument om compatibiliteit te garanderen. Het api-version argument varieert van service tot service.
In dit artikel worden Azure Resource Manager eindpunten (management.azure.com) gebruikt. Stel API_VERSION in op de huidige Azure Machine Learning Resource Manager versie:
API_VERSION="2025-09-01"
Als u Azure Machine Learning API's voor het gegevensvlak gebruikt, kunnen ze een andere versie gebruiken. De Azure AI Assets-gegevensvlakreferentie maakt bijvoorbeeld gebruik van 2024-04-01-preview. Zie de REST-bewerkingsgroepen voor Azure Machine Learning (Resource Manager) en Azure AI-assets (gegevensvlak) voor meer informatie.
Wanneer u traint met behulp van de REST API, moet u gegevens en trainingsscripts uploaden naar een opslagaccount waartoe de werkruimte toegang heeft. In het volgende voorbeeld worden de opslaggegevens voor uw werkruimte opgehaald en opgeslagen in variabelen, zodat u deze later kunt gebruiken:
# 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. Een rekenresource maken voor training
Een Azure Machine Learning rekencluster is een volledig beheerde rekenresource die u kunt gebruiken om de trainingstaak uit te voeren. In de volgende voorbeelden maakt u een rekencluster met de naam 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"
}
}
}
}'
Tip
Hoewel de bewerking na een paar seconden een antwoord retourneert, geeft dit antwoord alleen aan dat de aanvraag voor het maken wordt geaccepteerd. Het kan enkele minuten duren voordat de creatie van het cluster is voltooid.
3. Verzend de trainingstaak
Als u dit script wilt uitvoeren, gebruikt u een command waarmee het main.py Python script wordt uitgevoerd dat zich onder ./sdk/python/jobs/single-step/lightgbm/iris/src/ bevindt. U verzendt de opdracht als een job naar Azure Machine Learning.
Opmerking
Als u serverless compute wilt gebruiken, verwijder compute="cpu-cluster" in deze code.
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
In de voorgaande voorbeelden hebt u het volgende geconfigureerd:
-
code - pad waar de code voor het uitvoeren van de opdracht zich bevindt.
-
command - opdracht die moet worden uitgevoerd.
-
environment - de omgeving die nodig is om het trainingsscript uit te voeren. In dit voorbeeld gebruikt u een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.3@latest. U kunt ook aangepaste omgevingen gebruiken door een basis-Docker-image op te geven en daarbovenop een conda YAML te specificeren.
-
inputs - woordenboek van invoerwaarden met behulp van naam-waardeparen voor het commando. De sleutel is een naam voor de invoer binnen de context van de taak en de waarde is de invoerwaarde. Gebruik de ${{inputs.<input_name>}} expressie om verwijzingsinvoer in de command aan te geven. Als u bestanden of mappen als invoer wilt gebruiken, gebruikt u de Input klasse. Zie SDK- en CLI v2-expressies voor meer informatie.
Zie de referentiedocumentatie voor meer informatie.
Wanneer u de taak verzendt, retourneert de service een URL naar de taakstatus in de Azure Machine Learning Studio. Gebruik de gebruikersinterface van Studio om de voortgang van de taak weer te geven. U kunt ook de huidige status van de taak met returned_job.status controleren.
Voor de az ml job create opdracht in dit voorbeeld is een YAML-taakdefinitiebestand vereist. Het bestand dat in dit voorbeeld wordt gebruikt, bevat de volgende inhoud:
Opmerking
Als u serverless computing wilt gebruiken, verwijdert u compute: azureml:cpu-cluster" in deze code.
$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.
In de voorgaande YAML hebt u het volgende geconfigureerd:
-
code - pad waar de code voor het uitvoeren van de opdracht zich bevindt.
-
command - opdracht die moet worden uitgevoerd.
-
inputs - woordenboek van invoer met behulp van naam-waardeparen voor het commando. De sleutel is een naam voor de invoer binnen de context van de taak en de waarde is de invoerwaarde. Inputs worden in de command via de ${{inputs.<input_name>}} expressie verwezen naar. Zie SDK- en CLI v2-expressies voor meer informatie.
-
environment - de omgeving die nodig is om het trainingsscript uit te voeren. In dit voorbeeld gebruikt u een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.3@latest. U kunt ook aangepaste omgevingen gebruiken door een basis-docker-image op te geven en daarbovenop een conda yaml te specificeren.
Gebruik de volgende opdracht om de taak in te dienen. De uitvoerings-id (naam) van de trainingstaak wordt opgeslagen in de $run_id variabele:
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Gebruik de opgeslagen uitvoerings-id om informatie over de taak te retourneren. Met de parameter --web opent u de Azure Machine Learning Studio webgebruikersinterface, waar u kunt inzoomen op details van de taak:
az ml job show -n $run_id --web
Wanneer u een taak verzendt, moet u de trainingsscripts en -gegevens uploaden naar een cloudopslaglocatie waartoe uw Azure Machine Learning werkruimte toegang heeft.
Gebruik de volgende Azure CLI opdracht om het trainingsscript te uploaden. Met de opdracht geeft u de map op die de bestanden bevat die nodig zijn voor training, niet een afzonderlijk bestand. Als u in plaats daarvan REST wilt gebruiken om de gegevens te uploaden, raadpleegt u de Put Blob-verwijzing:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Maak een geversioneerde referentie naar de trainingsgegevens. In dit voorbeeld bevinden de gegevens zich al in de cloud en bevinden ze zich op https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Zie Data in Azure Machine Learning voor meer informatie over het verwijzen naar gegevens:
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\"
}
}"
Registreer een versieaanduiding van het trainingsscript voor gebruik met een job. In dit voorbeeld is de scriptlocatie het standaardopslagaccount en de container waarnaar u in stap 1 hebt geüpload. De ID van de geversioneerde trainingscode wordt geretourneerd en opgeslagen in de $TRAIN_CODE variabele.
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')
Maak de omgeving die door het cluster wordt gebruikt om het trainingsscript uit te voeren. In dit voorbeeld gebruikt u een gecureerde of kant-en-klare omgeving die wordt geleverd door Azure Machine Learning genaamd AzureML-lightgbm-3.3.
Azure Resource Manager biedt geen ondersteuning voor een snelkoppeling @latest voor omgevings-id's. De volgende opdracht bevat de omgevingsversies en selecteert de laatst gewijzigde versie-id, die vervolgens wordt opgeslagen in de $ENVIRONMENT variabele.
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')
Dien ten slotte de taak in. In het volgende voorbeeld ziet u hoe u de taak verzendt, verwijst naar de trainingscode-id, omgevings-id, URL voor de invoergegevens en de id van het rekencluster. De locatie van de taakuitvoer wordt opgeslagen in de $JOB_OUTPUT variabele:
Tip
De taaknaam moet uniek zijn. In dit voorbeeld uuidgen wordt gebruikt om een unieke waarde voor de naam te genereren.
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\"
}
}"
Belangrijk
Azure Machine Learning trainings- en opdrachttaken bieden geen ondersteuning voor Azure containerregisters (ACR) die gebruikmaken van aangepaste domeinnaamlabels. Taken die naar een dergelijk register verwijzen, kunnen mislukken tijdens het opstarten vanwege fouten bij het ophalen van images of resolutieproblemen bij de omgeving. Ga als volgt te werk om dit probleem te voorkomen:
- Gebruik de standaardindeling van de aanmeldingsserver (
<registry-name>.azurecr.io) voor uw ACR.
- Wanneer u het register maakt, stelt u het labelbereik van de domeinnaam in op Onbeveiligd.
Het getrainde model registreren
In de volgende voorbeelden ziet u hoe u een model registreert in uw Azure Machine Learning werkruimte.
Tip
De trainingsopdracht geeft een eigenschap name terug. Gebruik deze naam als onderdeel van het pad naar het model.
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)
Tip
Gebruik de naam die is opgeslagen in de $run_id variabele als onderdeel van het pad naar het model.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Tip
Gebruik de naam die is opgeslagen in de $run_id variabele als onderdeel van het pad naar het model.
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\"
}
}"
Volgende stappen
Nu u een getraind model hebt, leert u hoe u het implementeert met behulp van een online-eindpunt.
Zie de opslagplaats Azure Machine Learning voorbeelden GitHub voor meer voorbeelden.
Zie de volgende referentiedocumentatie voor meer informatie over de Azure CLI-opdrachten, Python SDK-klassen of REST API's die in dit artikel worden gebruikt: