適用対象:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (current)
Azure Machine Learningには、ML トレーニング ジョブを送信する複数の方法が用意されています。 この記事では、次の方法を使用してジョブを送信する方法について説明します。
- 機械学習のAzure CLI拡張機能:
ml 拡張機能 。CLI v2 とも呼ばれます。
- Azure Machine Learning 用Python SDK v2。
- REST API: CLI と SDK が構築されている API。
前提 条件
REST API 情報を使用するには、次のものが必要です。
ワークスペース内の サービス プリンシパル 。 管理 REST 要求には サービス プリンシパル認証 を使用します。
サービス プリンシパル 認証トークン。 このトークンを取得するには、「 サービス プリンシパル認証トークンを取得 する」の手順に従います。
curl ユーティリティ。 curl プログラムは、Linux 用 Windows サブシステム または任意の UNIX ディストリビューションで使用できます。
ヒント
PowerShell では、 curl は Invoke-WebRequestのエイリアスです。 コマンド curl -d "key=val" -X POST uri が Invoke-WebRequest -Body "key=val" -Method POST -Uri uriになります。
PowerShell から REST API を呼び出しても問題はありませんが、この記事の例では Bash を使用していることを前提としています。
JSON を処理するための jq ユーティリティ。 このユーティリティを使用して、REST API 呼び出しによって返される JSON ドキュメントから値を抽出します。
サンプル リポジトリを複製する
この記事のコードスニペットは、Azure Machine Learning の例 GitHub リポジトリに基づいています。 リポジトリを開発環境に複製するには、次のコマンドを使用します。
git clone --depth 1 https://github.com/Azure/azureml-examples
ヒント
--depth 1を使用して、リポジトリへの最新のコミットのみを複製します。これにより、操作を完了する時間が短縮されます。
タスクの例
この記事の例では、あやめの花データセットを使用して MLFlow モデルをトレーニングします。
クラウドでトレーニングする
クラウドでトレーニングを行う場合は、Azure Machine Learning ワークスペースに接続し、トレーニング ジョブを実行するコンピューティング リソースを選択する必要があります。
1. ワークスペースに接続する
ヒント
次のタブを使用して、モデルのトレーニングに使用する方法を選択します。 タブを選択すると、この記事のすべてのタブが同じタブに自動的に切り替わる。別のタブはいつでも選択できます。
ワークスペースに接続するには、識別子パラメーター (サブスクリプション、リソース グループ、ワークスペース名) が必要です。
MLClient 名前空間の azure.ai.ml でこれらの詳細を使用して、必要なAzure Machine Learning ワークスペースへのハンドルを取得します。 認証するには、既定の認証Azureを使用します。 資格情報を構成してワークスペースに接続する方法の詳細については、この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)
Azure CLIを使用する場合は、識別子パラメーター (サブスクリプション、リソース グループ、ワークスペース名) が必要です。 コマンドごとにこれらのパラメーターを指定できますが、すべてのコマンドで使用される既定値を設定することもできます。 既定値を設定するには、次のコマンドを使用します。
<subscription ID>、<Azure Machine Learning workspace name>、および <resource group> を構成の値に置き換えます。
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
この記事の REST API の例では、 $SUBSCRIPTION_ID、 $RESOURCE_GROUP、 $LOCATION、および $WORKSPACE プレースホルダーを使用します。 プレースホルダーを次のように独自の値に置き換えます。
-
$SUBSCRIPTION_ID: Azure サブスクリプション ID。
-
$RESOURCE_GROUP: ワークスペースを含むAzure リソース グループ。
-
$LOCATION: ワークスペースがあるAzureリージョン。
-
$WORKSPACE: Azure Machine Learning ワークスペースの名前。
-
$COMPUTE_NAME: Azure Machine Learning コンピューティング クラスターの名前。
管理 REST 要求には、 サービス プリンシパル認証トークンが必要です。 次のコマンドを使用してトークンを取得できます。 トークンは、 $TOKEN 環境変数に格納されます。
TOKEN=$(az account get-access-token --query accessToken -o tsv)
サービス プロバイダーは、互換性を確保するために api-version 引数を使用します。
api-version引数はサービスによって異なります。
この記事では、Azure Resource Manager エンドポイント (management.azure.com) を使用します。
API_VERSIONを現在のAzure Machine Learning Resource Manager バージョンに設定します。
API_VERSION="2025-09-01"
Azure Machine Learningデータ プレーン API を使用する場合は、別のバージョンを使用できます。 たとえば、Azure AI 資産データ プレーン参照では、2024-04-01-preview を使用します。 詳細については、Azure Machine Learning (Resource Manager) および Azure AI 資産 (データ プレーン) の REST 操作グループを参照してください。
REST API を使用してトレーニングする場合は、ワークスペースがアクセスできるストレージ アカウントにデータとトレーニング スクリプトをアップロードする必要があります。 次の例では、ワークスペースのストレージ情報を取得し、後で使用できるように変数に保存します。
# 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. トレーニング用のコンピューティング リソースを作成する
Azure Machine Learning コンピューティング クラスターは、トレーニング ジョブの実行に使用できるフル マネージドコンピューティング リソースです。 次の例では、 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"
}
}
}
}'
ヒント
操作は数秒後に応答を返しますが、この応答は作成要求が受け入れられることを示すだけです。 クラスターの作成が完了するまで数分かかる場合があります。
3. トレーニング ジョブを送信する
このスクリプトを実行するには、command を使用して、./sdk/python/jobs/single-step/lightgbm/iris/src/ の下にある main.py Python スクリプトを実行します。 コマンドを job としてAzure Machine Learningに送信します。
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
前の例では、次の構成を行いました。
-
code - コマンドを実行するコードが配置されているパス。
-
command - 実行する必要があるコマンド。
-
environment - トレーニング スクリプトを実行するために必要な環境。 この例では、AzureML-lightgbm-3.3@latest と呼ばれるAzure Machine Learningによって提供されるキュレーションされた環境または既製の環境を使用します。 また、基本 Docker イメージを指定し、その上に conda yaml を指定することで、カスタム環境を使用することもできます。
-
inputs - コマンドへの名前と値のペアを使用する入力のディクショナリ。 キーはジョブのコンテキスト内の入力の名前であり、値は入力値です。
command式を使用して、${{inputs.<input_name>}}内の入力を参照します。 ファイルまたはフォルダーを入力として使用するには、 Input クラスを使用します。 詳細については、「 SDK と CLI v2 の式」を参照してください。
詳細については、 リファレンス ドキュメントを参照してください。
ジョブを送信すると、サービスは、Azure Machine Learning スタジオのジョブの状態への URL を返します。 スタジオ UI を使用して、ジョブの進行状況を表示します。
returned_job.statusを使用して、ジョブの現在の状態を確認することもできます。
この例の az ml job create コマンドには、YAML ジョブ定義ファイルが必要です。 この例で使用されるファイルには、次の内容が含まれています。
$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.
前の YAML では、次を構成しました。
-
code - コマンドを実行するコードが配置されているパス。
-
command - 実行する必要があるコマンド。
-
inputs - コマンドへの名前と値のペアを使用する入力のディクショナリ。 キーはジョブのコンテキスト内の入力の名前であり、値は入力値です。 入力は、command式を使用して${{inputs.<input_name>}}で参照されます。 詳細については、「 SDK と CLI v2 の式」を参照してください。
-
environment - トレーニング スクリプトを実行するために必要な環境。 この例では、AzureML-lightgbm-3.3@latest と呼ばれるAzure Machine Learningによって提供されるキュレーションされた環境または既製の環境を使用します。 また、基本 Docker イメージを指定し、その上に conda yaml を指定することで、カスタム環境を使用することもできます。
ジョブを送信するには、次のコマンドを使用します。 トレーニング ジョブの実行 ID (名前) は、 $run_id 変数に格納されます。
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
格納されている実行 ID を使用して、ジョブに関する情報を返します。
--web パラメーターを使用すると、Azure Machine Learning スタジオ Web UI が開き、ジョブの詳細を確認できます。
az ml job show -n $run_id --web
ジョブを送信するときは、Azure Machine Learning ワークスペースがアクセスできるクラウド ストレージの場所にトレーニング スクリプトとデータをアップロードする必要があります。
次の Azure CLI コマンドを使用して、トレーニング スクリプトをアップロードします。 このコマンドは、個々のファイルではなく、トレーニングに必要なファイルを含む ディレクトリ を指定します。 代わりに REST を使用してデータをアップロードする場合は、 Put BLOB のリファレンスを参照してください。
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
トレーニング データに対するバージョン付きの参照を作成します。 この例では、データは既にクラウドにあり、 https://azuremlexamples.blob.core.windows.net/datasets/iris.csvにあります。 データの参照の詳細については、Azure Machine LearningData に関するページを参照>。
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\"
}
}"
ジョブに使用するトレーニングスクリプトへのバージョン付き参照を登録します。 この例では、スクリプトの場所は、手順 1 でアップロードした既定のストレージ アカウントとコンテナーです。 バージョン管理されたトレーニング コードの ID が返され、 $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')
クラスターがトレーニング スクリプトの実行に使用する環境を作成します。 この例では、AzureML-lightgbm-3.3 と呼ばれるAzure Machine Learningによって提供されるキュレーションされた環境または既製の環境を使用します。
Azure Resource Managerでは、環境 ID の @latest ショートカットはサポートされていません。 次のコマンドは、環境のバージョンを一覧表示し、最近変更されたバージョン ID を選択します。これは、 $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')
最後に、ジョブを送信します。 次の例は、ジョブを送信し、トレーニング コード ID、環境 ID、入力データの URL、コンピューティング クラスターの ID を参照する方法を示しています。 ジョブ出力の場所は、 $JOB_OUTPUT 変数に格納されます。
ヒント
ジョブ名は一意である必要があります。 この例では、 uuidgen を使用して名前の一意の値を生成します。
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\"
}
}"
重要
Azure Machine Learning トレーニング ジョブとコマンド ジョブでは、カスタマイズされたドメイン名ラベルを使用する Azure Container Registries (ACR) は対応していません。 このようなレジストリを参照するジョブは、イメージの取得または環境設定の解決エラーが原因で起動中に失敗する可能性があります。 この問題を回避するには:
- ACR の既定のログイン サーバー形式 (
<registry-name>.azurecr.io) を使用します。
- レジストリを作成するときに、 ドメイン名ラベルのスコープ を [セキュリティで保護されていない] に設定します。
トレーニング済みモデルを登録する
次の例では、Azure Machine Learning ワークスペースにモデルを登録する方法を示します。
ヒント
トレーニング ジョブは、 name プロパティを返します。 この名前は、モデルへのパスの一部として使用します。
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)
ヒント
モデルへのパスの一部として、 $run_id 変数に格納されている名前を使用します。
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
ヒント
モデルへのパスの一部として、 $run_id 変数に格納されている名前を使用します。
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\"
}
}"
次の手順
トレーニング済みのモデルが作成されたので、 オンライン エンドポイントを使用してデプロイする方法について説明します。
その他の例については、Azure Machine Learning の例 GitHub リポジトリを参照してください。
この記事で使用する Azure CLI コマンド、Python SDK クラス、または REST API の詳細については、次のリファレンス ドキュメントを参照してください。