Azure Machine Learning で Azure Pipelines を使用する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure DevOps パイプラインを使って、機械学習のライフサイクルを自動化できます。 自動化できる操作の一部を次に示します。
- データの準備 (抽出、変換、読み込み操作)
- オンデマンドのスケールアウトとスケールアップを使った機械学習モデルのトレーニング
- パブリックまたはプライベートの Web サービスとしての機械学習モデルのデプロイ
- デプロイされた機械学習モデルの監視 (パフォーマンスやデータ ドリフト分析など)
この記事では、機械学習モデルを構築して Azure Machine Learning にデプロイする Azure パイプラインを作成する方法について説明します。
このチュートリアルでは、Azure Machine Learning Python SDK v2 と Azure CLI ML 拡張機能 v2 を使用します。
前提条件
- 「作業を開始するために必要なリソースを作成する」の手順を実行して、以下を行います。
- ワークスペースの作成
- モデルのトレーニングに使用するクラウドベースのコンピューティング クラスターを作成します。
- Azure Pipelines 用の Machine Learning 拡張機能。 この拡張機能は、https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2 の Visual Studio マーケットプレースからインストールできます。
ステップ 1: コードを取得する
GitHub で次のリポジトリをフォークします。
https://github.com/azure/azureml-examples
ステップ 2: Azure Pipelines にサインインする
Azure Pipelines にサインインします。 サインインすると、ブラウザーが https://dev.azure.com/my-organization-name
に移動し、Azure DevOps ダッシュボーが表示されます。
選択した組織内で、"プロジェクト" を作成します。 組織にプロジェクトがない場合、 [プロジェクトを作成して開始します] 画面が表示されます。 そうでない場合は、ダッシュボードの右上隅にある [新しいプロジェクト] ボタンを選びます。
手順 3: サービス接続を作成する
既存のサービス接続を使用できます。
Azure portal で認証を行うには、Azure Resource Manager 接続が必要です。
Azure DevOps で、[プロジェクト設定] を選択し、[サービス接続] ページを開きます。
[サービス接続の作成] を選択して、[Azure Resource Manager] を選択します。
既定の認証方法である [サービス プリンシパル (自動)] を選びます。
サービス接続を作成します。 お望みのスコープ レベル、サブスクリプション、リソース グループ、接続名を設定します。
ステップ 4: パイプラインを作成する
[パイプライン] に移動し、[パイプラインを作成] を選択します。
最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。
サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。
リポジトリの一覧が表示されたら、目的のリポジトリを選択します。
Azure Pipelines アプリをインストールするために、GitHub にリダイレクトされる場合があります。 その場合は、[承認してインストール] を選択します。
[スタート パイプライン] を選択します。 スタート パイプライン テンプレートを更新します。
手順 5: Azure Machine Learning ジョブを送信するための YAML パイプラインを構築する
スタート パイプラインを削除し、次の YAML コードに置き換えます。 このパイプラインでは、次のことを行います。
- Python バージョン タスクを使用して Python 3.8 を設定し、SDK の要件をインストールします。
- Bash タスクを使用して、Azure Machine Learning SDK と CLI の bash スクリプトを実行します。
- Azure CLI タスクを使用して、Azure Machine Learning ジョブを送信します。
Azure Resource Manager サービス接続と汎用サービス接続のどちらを使用しているかに応じて、次のタブを選択します。 パイプライン YAML で、変数の値を自分のリソースで置き換えます。
name: submit-azure-machine-learning-job
trigger:
- none
variables:
service-connection: 'machine-learning-connection' # replace with your service connection name
resource-group: 'machinelearning-rg' # replace with your resource group name
workspace: 'docs-ws' # replace with your workspace name
jobs:
- job: SubmitAzureMLJob
displayName: Submit AzureML Job
timeoutInMinutes: 300
pool:
vmImage: ubuntu-latest
steps:
- task: UsePythonVersion@0
displayName: Use Python >=3.8
inputs:
versionSpec: '>=3.8'
- bash: |
set -ex
az version
az extension add -n ml
displayName: 'Add AzureML Extension'
- task: AzureCLI@2
name: submit_azureml_job_task
displayName: Submit AzureML Job Task
inputs:
azureSubscription: $(service-connection)
workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
scriptLocation: inlineScript
scriptType: bash
inlineScript: |
# submit component job and get the run name
job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)
# Set output variable for next task
echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"
手順 6: Azure Machine Learning ジョブの完了を待機する
手順 5 では、Azure Machine Learning ジョブを送信するジョブを追加しました。 この手順では、Azure Machine Learning ジョブの完了を待機する別のジョブを追加します。
Azure Resource Manager サービス接続を使用している場合は、"Machine Learning" 拡張機能を使用できます。 この拡張機能を Azure DevOps 拡張機能マーケットプレースで検索することも、拡張機能に直接移動することもできます。 "Machine Learning" 拡張機能をインストールします。
重要
Machine Learning (クラシック) 拡張機能を誤ってインストールしないでください。これは古い拡張機能で、同じ機能は提供されません。
[パイプライン レビュー] ウィンドウで、サーバー ジョブを追加します。 ジョブのステップ部分で、[アシスタントの表示] を選択し、AzureML を検索します。 AzureML ジョブ待機タスクを選択し、ジョブの情報を入力します。
タスクには次の 4 個の入力があります。Service Connection
、Azure Resource Group Name
、AzureML Workspace Name
、AzureML Job Name
。 これらの入力を埋めます。 これらの手順の結果の YAML は、次の例のようになります。
Note
- Azure Machine Learning ジョブ待機タスクはサーバー ジョブで実行され、高価なエージェント プール リソースを使い切らず、追加料金の必要はありません。 (
pool: server
によって示される) サーバー ジョブは、パイプラインと同じマシンで実行されます。 詳細については、「サーバー ジョブ」を参照してください。 - 1 つの Azure Machine Learning ジョブ待機タスクは、1 つのジョブのみを待機できます。 待機したいジョブごとに個別のタスクを設定する必要があります。
- Azure Machine Learning ジョブ待機タスクは、最大 2 日間待機できます。 これは、Azure DevOps Pipelines によって設定されるハード制限です。
- job: WaitForAzureMLJobCompletion
displayName: Wait for AzureML Job Completion
pool: server
timeoutInMinutes: 0
dependsOn: SubmitAzureMLJob
variables:
# We are saving the name of azureMl job submitted in previous step to a variable and it will be used as an inut to the AzureML Job Wait task
azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ]
steps:
- task: AzureMLJobWaitTask@1
inputs:
serviceConnection: $(service-connection)
resourceGroupName: $(resource-group)
azureMLWorkspaceName: $(workspace)
azureMLJobName: $(azureml_job_name_from_submit_job)
手順 7: パイプラインを送信し、パイプラインの実行を確認する
[保存および実行] を選択します。 パイプラインは、Azure Machine Learning ジョブの完了を待機し、WaitForJobCompletion
の下のタスクを Azure Machine Learning ジョブと同じ状態で終了させます。 例: Azure Machine Learning ジョブ Succeeded
== Azure DevOps タスク WaitForJobCompletion
の下のジョブ Succeeded
Azure Machine Learning ジョブ Failed
== Azure DevOps タスク WaitForJobCompletion
の下のジョブ Failed
Azure Machine Learning ジョブ Cancelled
== Azure DevOps タスク WaitForJobCompletion
の下のジョブ Cancelled
ヒント
完全な Azure Machine Learning ジョブは、Azure Machine Learning スタジオで確認できます。
リソースをクリーンアップする
パイプラインを続けて使わない場合は、Azure DevOps プロジェクトを削除します。 Azure portal で、リソース グループと Azure Machine Learning インスタンスを削除します。