GILT FÜR:
Azure CLI ml Erweiterung v2 (aktuell)
Python SDK azure-ai-ml v2 (aktuell)
Azure Machine Learning bietet mehrere Möglichkeiten zum Übermitteln von ML-Trainingsaufträgen. In diesem Artikel erfahren Sie, wie Sie Aufträge mithilfe der folgenden Methoden übermitteln:
- Azure CLI-Erweiterung für maschinelles Lernen: Die Erweiterung
ml, auch als CLI v2 bezeichnet
- Python SDK v2 für Azure Machine Learning
- REST-API: Die API, auf der die CLI und das SDK basieren
Voraussetzungen
Um das SDK zu verwenden, installieren Sie das Azure Machine Learning SDK v2 für Python.
Um die REST-API-Informationen zu verwenden, benötigen Sie die folgenden Elemente:
Einen Dienstprinzipal in Ihrem Arbeitsbereich. Verwenden Sie die Dienstprinzipalauthentifizierung für administrative REST-Anforderungen.
Ein Token für die Dienstprinzipalauthentifizierung. Führen Sie die Schritte unter Abrufen eines Dienstprinzipalauthentifizierungstokens aus, um dieses Token abzurufen.
Das curl-Hilfsprogramm. Das curl-Programm ist im Windows-Subsystem für Linux oder jeder beliebigen UNIX-Distribution verfügbar.
Tipp
In PowerShell curl ist ein Alias für Invoke-WebRequest. Der Befehl curl -d "key=val" -X POST uri wird .Invoke-WebRequest -Body "key=val" -Method POST -Uri uri
Obwohl es möglich ist, die REST-API aus PowerShell aufzurufen, gehen die Beispiele in diesem Artikel davon aus, dass Sie Bash verwenden.
Das Hilfsprogramm jq für die Verarbeitung von JSON. Verwenden Sie dieses Hilfsprogramm, um Werte aus den JSON-Dokumenten zu extrahieren, die REST-API-Aufrufe zurückgeben.
Klonen des Beispielrepositorys
Die Codeschnipsel in diesem Artikel basieren auf Beispielen aus dem GitHub-Repository mit Azure Machine Learning-Beispielen. Verwenden Sie den folgenden Befehl, um das Repository in Ihrer Entwicklungsumgebung zu klonen:
git clone --depth 1 https://github.com/Azure/azureml-examples
Tipp
Verwenden Sie --depth 1, um nur den neuesten Commit in das Repository zu klonen, wodurch die Zeit für den Abschluss des Vorgangs verkürzt wird.
Beispielauftrag
Die Beispiele in diesem Artikel verwenden das Schwertlilien-Dataset, um ein MLFlow-Modell zu trainieren.
Trainieren in der Cloud
Wenn Sie in der Cloud trainieren, müssen Sie eine Verbindung mit Ihrem Azure Machine Learning-Arbeitsbereich herstellen und eine Computeressource auswählen, um den Schulungsauftrag auszuführen.
1. Herstellen einer Verbindung mit dem Arbeitsbereich
Tipp
Verwenden Sie die folgenden Registerkarten, um die Methode auszuwählen, die Sie zum Trainieren eines Modells verwenden möchten. Wenn Sie eine Registerkarte auswählen, werden alle Registerkarten in diesem Artikel automatisch auf dieselbe Registerkarte umgeschaltet. Sie können jederzeit eine andere Registerkarte auswählen.
Um eine Verbindung mit dem Arbeitsbereich herzustellen, benötigen Sie Bezeichnerparameter – ein Abonnement, eine Ressourcengruppe und einen Arbeitsbereichsnamen. Verwenden Sie diese Details im MLClient im azure.ai.ml-Namespace, um Zugriff auf den erforderlichen Azure Machine Learning-Arbeitsbereich zu erhalten. Verwenden Sie zum Authentifizieren die Azure-Standardauthentifizierung. Weitere Informationen zum Konfigurieren von Anmeldeinformationen und herstellen einer Verbindung mit einem Arbeitsbereich finden Sie in diesem Beispiel.
#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)
Wenn Sie die Azure CLI verwenden, benötigen Sie Bezeichnerparameter – ein Abonnement, eine Ressourcengruppe und einen Arbeitsbereichsnamen. Sie können diese Parameter zwar für jeden Befehl angeben, sie können aber auch Standardwerte festlegen, die alle Befehle verwenden. Verwenden Sie die folgenden Befehle, um Standardwerte festzulegen. Ersetzen Sie <subscription ID>, <Azure Machine Learning workspace name> und <resource group> durch die Werte für Ihre Konfiguration:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
In den REST-API-Beispielen in diesem Artikel werden die Platzhalter $SUBSCRIPTION_ID, $RESOURCE_GROUP, $LOCATION und $WORKSPACE verwendet. Ersetzen Sie die Platzhalter wie folgt durch Ihre eigenen Werte:
-
$SUBSCRIPTION_ID: Die ID Ihres Azure-Abonnements.
-
$RESOURCE_GROUP: Die Azure-Ressourcengruppe, die Ihren Arbeitsbereich enthält.
-
$LOCATION: Die Azure-Region, in der sich Ihr Arbeitsbereich befindet
-
$WORKSPACE: Der Name Ihres Azure Machine Learning-Arbeitsbereichs.
-
$COMPUTE_NAME: Der Name Ihres Azure Machine Learning-Computeclusters.
Für administrative REST-Anforderungen wird ein Token für die Dienstprinzipalauthentifizierung angefordert. Sie können ein Token mit dem folgenden Befehl abrufen. Das Token wird in der Umgebungsvariable $TOKEN gespeichert:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Der Dienstanbieter verwendet das api-version-Argument, um Kompatibilität zu gewährleisten. Das api-version-Argument variiert von Dienst zu Dienst. Legen Sie die API-Version zur Vorbereitung für zukünftige Versionen als Variable fest:
API_VERSION="2022-05-01"
Wenn Sie mit der REST-API trainieren, müssen Sie Daten und Schulungsskripts in ein Speicherkonto hochladen, auf das der Arbeitsbereich zugreifen kann. Das folgende Beispiel ruft die Speicherinformationen für Ihren Arbeitsbereich ab und speichert sie in Variablen, damit Sie sie später verwenden können:
# 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. Erstellen einer Computeressource für das Training
Ein Azure Machine Learning-Computecluster ist eine vollständig verwaltete Computeressource, mit der Sie den Schulungsauftrag ausführen können. In den folgenden Beispielen erstellen Sie einen Computecluster mit dem Namen 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"
}
}
}
}'
Tipp
Während der Vorgang nach ein paar Sekunden eine Antwort zurückgibt, gibt diese Antwort nur an, dass die Erstellungsanforderung akzeptiert wird. Die Clustererstellung kann einige Minuten dauern.
3. Übermitteln des Trainingsauftrags
Verwenden Sie zum Ausführen dieses Skripts ein command, das das Python-Skript main.py unter ./sdk/python/jobs/single-step/lightgbm/iris/src/ ausführt. Sie übermitteln den Befehl als job an Azure Machine Learning.
Hinweis
Wenn Sie serverloses Computing verwenden möchten, löschen Sie compute="cpu-cluster" in diesem 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 den vorherigen Beispielen haben Sie Folgendes konfiguriert:
-
code - Pfad, in dem sich der Code zum Ausführen des Befehls befindet.
-
command - Befehl, der ausgeführt werden muss.
-
environment: Die Umgebung, die für die Ausführung des Trainingsskripts erforderlich ist. Verwenden Sie in diesem Beispiel eine kuratierte oder vorgefertigte Umgebung, die von Azure Machine Learning aufgerufen wird AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Verwenden Sie die neueste Version dieser Umgebung mithilfe der @latest Direktive. Sie können auch benutzerdefinierte Umgebungen verwenden, indem Sie ein Docker-Basisimage und zusätzlich Conda-YAML-Code angeben.
-
inputs: Ein Wörterbuch der Eingaben mit Schlüssel-Wert-Paaren für den Befehl. Der Schlüssel ist ein Name für die Eingabe im Kontext des Auftrags, und der Wert ist der Eingabewert. Verweisen Sie auf Eingaben in der command, indem Sie den ${{inputs.<input_name>}}-Ausdruck verwenden. Verwenden Sie die Input Klasse, um Dateien oder Ordner als Eingaben zu verwenden. Weitere Informationen finden Sie unter SDK und CLI v2-Ausdrücke.
Weitere Informationen finden Sie in der Referenzdokumentation.
Wenn Sie den Auftrag übermitteln, gibt der Dienst eine URL zum Auftragsstatus im Azure Machine Learning Studio zurück. Verwenden Sie die Studio-Benutzeroberfläche, um den Auftragsfortschritt anzuzeigen. Sie können auch returned_job.status verwenden, um den aktuellen Status des Auftrags zu überprüfen.
Der az ml job create Befehl in diesem Beispiel erfordert eine YAML-Auftragsdefinitionsdatei. Die in diesem Beispiel verwendete Datei enthält den folgenden Inhalt:
Hinweis
Wenn Sie serverloses Computing verwenden möchten, löschen Sie compute: azureml:cpu-cluster" in diesem 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.
Im vorherigen YAML haben Sie Folgendes konfiguriert:
-
code - Pfad, in dem sich der Code zum Ausführen des Befehls befindet.
-
command - Befehl, der ausgeführt werden muss.
-
inputs: Ein Wörterbuch der Eingaben mit Schlüssel-Wert-Paaren für den Befehl. Der Schlüssel ist ein Name für die Eingabe im Kontext des Auftrags, und der Wert ist der Eingabewert. Auf Eingaben wird im command mit dem Ausdruck ${{inputs.<input_name>}} verwiesen. Weitere Informationen finden Sie unter SDK und CLI v2-Ausdrücke.
-
environment: Die Umgebung, die für die Ausführung des Trainingsskripts erforderlich ist. Verwenden Sie in diesem Beispiel eine kuratierte oder vorgefertigte Umgebung, die von Azure Machine Learning aufgerufen wird AzureML-lightgbm-3.3. Verwenden Sie die neueste Version dieser Umgebung mithilfe der @latest Direktive. Sie können auch benutzerdefinierte Umgebungen verwenden, indem Sie ein Docker-Basisimage und zusätzlich Conda-YAML-Code angeben.
Verwenden Sie den folgenden Befehl zum Übermitteln des Auftrags. Die Ausführungs-ID (Name) des Trainingsauftrags wird in der Variablen $run_id gespeichert:
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Verwenden Sie die gespeicherte Ausführungs-ID, um Informationen zum Auftrag zurückzugeben. Der Parameter --web öffnet die Azure Machine Learning Studio-Webbenutzeroberfläche, auf der Sie Details zum Auftrag anzeigen können:
az ml job show -n $run_id --web
Wenn Sie einen Auftrag übermitteln, müssen Sie die Schulungsskripts und -daten an einen Cloudspeicherort hochladen, auf den Ihr Azure Machine Learning-Arbeitsbereich zugreifen kann.
Verwenden Sie den folgenden Azure CLI-Befehl, um das Trainingsskript hochzuladen. Der Befehl gibt das Verzeichnis an, das die für das Training erforderlichen Dateien enthält, nicht eine einzelne Datei. Wenn Sie stattdessen REST verwenden möchten, um die Daten hochzuladen, lesen Sie die Put Blob-Referenz :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Erstellen Sie einen Verweis mit Versionsangabe für die Trainingsdaten. In diesem Beispiel befinden sich die Daten bereits in der Cloud und unter https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Weitere Informationen zum Verweisen auf Daten finden Sie unter Daten in 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\"
}
}"
Registrieren Sie einen Verweis mit Versionsangabe für das Trainingsskript zur Verwendung mit einem Auftrag. In diesem Beispiel ist der Skriptspeicherort das Standardspeicherkonto und der Standardcontainer, in den Sie in Schritt 1 hochgeladen haben. Die ID des Trainingscodes mit Versionsangabe wird zurückgegeben und in der Variablen $TRAIN_CODE gespeichert:
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')
Erstellen Sie die Umgebung, die der Cluster zum Ausführen des Schulungsskripts verwendet. Verwenden Sie in diesem Beispiel eine kuratierte oder vorgefertigte Umgebung, die von Azure Machine Learning aufgerufen wird AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Der folgende Befehl ruft eine Liste der Umgebungsversionen ab, wobei die neueste am Anfang der Auflistung steht.
jq wird verwendet, um die ID der neuesten ([0]) Version abzurufen, die dann in der $ENVIRONMENT Variablen gespeichert wird.
ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu?api-version=$API_VERSION" --header "Authorization: Bearer $TOKEN" | jq -r .id)
Übermitteln Sie schließlich den Auftrag. Das folgende Beispiel zeigt, wie Sie den Auftrag übermitteln und auf die Trainingscode-ID, die Umgebungs-ID, die URL für die Eingabedaten und die ID des Computeclusters verweisen. Der Auftragsausgabespeicherort wird in der folgenden $JOB_OUTPUT-Variablen gespeichert:
Tipp
Der Auftragsname muss eindeutig sein. In diesem Beispiel wird uuidgen verwendet, um einen eindeutigen Wert für den Namen zu generieren.
Hinweis
Wenn Sie serverloses Computing verwenden möchten, löschen Sie die Zeile \"computeId\": in diesem Code.
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\"
}
}"
Registrieren des trainierten Modells
Die folgenden Beispiele veranschaulichen das Registrieren eines Modells in Ihrem Azure Machine Learning-Arbeitsbereich.
Tipp
Der Schulungsauftrag gibt eine name Eigenschaft zurück. Verwenden Sie diesen Namen als Teil des Pfads zum Modell.
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)
Tipp
Verwenden Sie den In der $run_id Variablen gespeicherten Namen als Teil des Pfads zum Modell.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Tipp
Verwenden Sie den In der $run_id Variablen gespeicherten Namen als Teil des Pfads zum Modell.
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ächste Schritte
Sie verfügen nun über ein trainiertes Modell. Informieren Sie sich anschließend über das Bereitstellen des Modells mithilfe eines Onlineendpunkts.
Weitere Beispiele finden Sie im GitHub-Repository mit Azure Machine Learning-Beispielen.
Weitere Informationen zu den Azure CLI-Befehlen, Python SDK-Klassen oder REST-APIs, die in diesem Artikel verwendet werden, finden Sie in der folgenden Referenzdokumentation: