Van toepassing op:
Azure CLI ml extensie v2 (huidige versie)
Python SDK azure-ai-ml v2 (huidige versie)
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
cd 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.
Bij de overige opdrachten in dit artikel wordt ervan uitgegaan dat u vanuit de azureml-examples map werkt.
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.
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)
Controleer de verbinding door de naam van de werkruimte af te drukken:
print(ml_client.workspace_name)
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')
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()
Controleer of het rekencluster bestaat:
cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")
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.
De trainingstaak verzenden
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",
)
Verzend de taak in dezelfde Python sessie:
# 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.2-ubuntu18.04-py37-cpu@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 command expressie om verwijzingsinvoer in de ${{inputs.<input_name>}} 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.
print(f"Studio URL: {returned_job.studio_url}")
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 compute wilt gebruiken, verwijder 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 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. 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.
De trainingstaak bewaken
Wacht totdat de trainingstaak is voltooid voordat u het model registreert. De taakstatus gaat over naar Starting → Preparing → → RunningCompleted.
Gebruik ml_client.jobs.stream() dit om de taakuitvoer in realtime te bewaken:
ml_client.jobs.stream(returned_job.name)
U kunt de taakstatus ook programmatisch controleren:
returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")
Gebruik de opdracht az ml job show met --query status om de taakstatus te controleren:
az ml job show -n $run_id --query status -o tsv
De logboeken van de taak streamen totdat de taak is voltooid:
az ml job stream -n $run_id
Controleer de taakstatus met een GET-aanvraag:
curl --location --request GET "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" | jq -r '.properties.status'
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)
Controleer of het model is geregistreerd:
registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")
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\"
}
}"
De hulpbronnen opschonen
Als u niet van plan bent om het rekencluster te gebruiken voor meer trainingstaken, verwijdert u het om te stoppen met het maken van kosten. Er worden kosten voor het cluster in rekening gebracht zolang het bestaat, zelfs als er geen knooppunten actief zijn.
ml_client.compute.begin_delete("cpu-cluster").wait()
az ml compute delete -n cpu-cluster --yes
curl --location --request DELETE "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN"
Veelvoorkomende fouten oplossen
| Fout |
Oorzaak |
Resolutie |
ImportError: No module named 'azure.identity' |
Ontbrekend azure-identity pakket |
Voer pip install azure-identity uit |
DefaultAzureCredential failed |
Niet aangemeld bij Azure |
Voer az login eerst uit of stel omgevingsvariabelen in voor service-principal-verificatie |
ComputeNotFound |
Clusternaam komt niet overeen of het cluster is verwijderd |
De clusternaam controleren en de inrichtingsstatus controleren |
EnvironmentNotFound |
Gecureerde omgeving afgeschaft of niet beschikbaar |
Beschikbare omgevingen weergeven met ml_client.environments.list() en een huidige versie gebruiken |
QuotaExceeded |
Onvoldoende vCPU-quotum voor de VM-grootte |
Een quotumverhoging aanvragen of een kleinere VM-grootte gebruiken |
Zie Problemen met omgevingsinstallatiekopieën oplossen.
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: