Azure Machine Learning で GitHub Actions を使用する
適用対象:Azure CLI ml extension v2 (現行)
Python SDK azure-ai-ml v2 (現行)
Azure Machine Learning でモデルをトレーニングするために GitHub Actions を使ってみましょう。
この記事では、機械学習モデルを構築して Azure Machine Learning にデプロイする GitHub Actions ワークフローを作成する方法について説明します。 NYC タクシー データセットで scikit-learn 線形回帰モデルをトレーニングします。
GitHub Actions では、お使いのリポジトリの /.github/workflows/
パスにあるワークフロー YAML (.yml) ファイルが使用されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。
前提条件
この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。
Azure Machine Learning ワークスペース。 所有していない場合は、クイック スタート: ワークスペース リソースの作成に関する記事の手順に従って作成してください。
Python SDK v2 をインストールするには、次のコマンドを使用します。
pip install azure-ai-ml azure-identity
SDK の既存のインストールを最新バージョンに更新するには、次のコマンドを使用します。
pip install --upgrade azure-ai-ml azure-identity
詳細については、「Azure Machine Learning 用 Python SDK v2 のインストール」を参照してください。
- GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
ステップ 1: コードを取得する
GitHub で次のリポジトリをフォークします。
https://github.com/azure/azureml-examples
フォークしたリポジトリをローカルで複製します。
git clone https://github.com/YOUR-USERNAME/azureml-examples
手順 2: Azure による認証
まず、Azure で認証する方法を定義する必要があります。 推奨されるより安全なオプションは、Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID を使用して OpenID Connect でサインインすることです。 必要に応じて、サービス プリンシパルとシークレットでのサインインも使用できます。 この方法は安全性が低く、推奨されません。
デプロイ資格情報を生成する
OIDC で Azure ログイン アクションを使用するには、Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成する必要があります。
オプション 1: Microsoft Entra アプリケーション
- Azure portal、Azure CLI、または Azure PowerShell で、サービス プリンシパルを使って Microsoft Entra アプリケーションを作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- Azure portal、Azure CLI、または Azure PowerShell を使用して、サービス プリンシパルに適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、Microsoft Entra アプリケーションでフェデレーション ID 資格情報を構成します。
オプション 2: ユーザー割り当てマネージド ID
- 「ユーザー割り当てマネージド ID を作成する」の手順を使用して、ユーザー割り当てマネージド ID を作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- ユーザー割り当てマネージド ID に適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、ユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成します。
シークレットを作成する
ログイン アクションには、アプリケーションのクライアント ID、ディレクトリ (テナント) ID、サブスクリプション ID を指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。
GitHub で、お使いのリポジトリに移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
Note
パブリック リポジトリのワークフロー セキュリティを強化するには、リポジトリ シークレットの代わりに環境シークレットを使用します。 環境が承認を必要とするなら、ジョブは必須のレビュー担当者の一人が承認するまで環境のシークレットにアクセスできません。
AZURE_CLIENT_ID
、AZURE_TENANT_ID
、AZURE_SUBSCRIPTION_ID
のシークレットを作成します。 Microsoft Entra アプリケーションまたは GitHub シークレットのユーザー割り当てマネージド ID から次の値をコピーします。GitHub シークレット Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID AZURE_CLIENT_ID クライアント ID AZURE_SUBSCRIPTION_ID サブスクリプション ID AZURE_TENANT_ID ディレクトリ (テナント) ID Note
セキュリティ上の理由から、値をワークフローに直接渡すのではなく、GitHub シークレットを使用することをお勧めします。
手順 3: setup.sh
を更新して Azure Machine Learning ワークスペースに接続する
使用するワークスペースに合わせて CLI セットアップ ファイル変数を更新する必要があります。
フォークしたリポジトリで、
azureml-examples/cli/
に移動します。setup.sh
を編集してファイル内のこれらの変数を更新します。変数 説明 GROUP リソース グループの名前 LOCATION ご自分のワークスペースの場所 (例: eastus2
)ワークスペース Azure Machine Learning ワークスペースの名前
手順 4: コンピューティング クラスター名で pipeline.yml
を更新する
pipeline.yml
ファイルを使用して、Azure Machine Learning パイプラインをデプロイします。 このパイプラインは機械学習パイプラインであり、DevOps パイプラインではありません。 コンピューター クラスター名に cpu-cluster
以外の名前を使用している場合にのみ、この更新を行う必要があります。
- フォークしたリポジトリで、
azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml
に移動します。 -
compute: azureml:cpu-cluster
が表示されるたびに、cpu-cluster
の値をご自分のコンピューティング クラスター名で更新します。 たとえば、クラスター名がmy-cluster
の場合、新しい値はazureml:my-cluster
になります。 5 つの更新プログラムがあります。
手順 5: GitHub Actions ワークフローを実行する
このワークフローは、Azure で認証し、Azure Machine Learning CLI を設定し、CLI を使用して Azure Machine Learning でモデルをトレーニングします。
ワークフロー ファイルは、トリガー セクションとジョブで構成されます。
- トリガーは、
on
セクションでワークフローを開始します。 ワークフローは、既定で cron スケジュールで実行され、一致するブランチとパスから pull request が行われたときに実行されます。 ワークフローをトリガーするイベントについて確認してください。 - ワークフローのジョブ セクションで、コードをチェックアウトし、OpenID Connect を使用して Azure ログイン アクションで Azure にログインします。
- ジョブ セクションには、Machine Learning CLI (v2) をインストールして設定するセットアップ アクションも含まれています。 CLI がインストールされると、実行ジョブ アクションによって Azure Machine Learning
pipeline.yml
ファイルが実行され、NYC タクシー データを使用してモデルがトレーニングされます。
ワークフローを有効にする
フォークしたリポジトリで
.github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml
を開き、ワークフローが次のようになっていることを確認します。name: cli-jobs-pipelines-nyc-taxi-pipeline on: workflow_dispatch: schedule: - cron: "0 0/4 * * *" pull_request: branches: - main - sdk-preview paths: - cli/jobs/pipelines/nyc-taxi/** - .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml - cli/run-pipeline-jobs.sh - cli/setup.sh jobs: build: runs-on: ubuntu-latest steps: - name: check out repo uses: actions/checkout@v2 - name: azure login uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: setup run: bash setup.sh working-directory: cli continue-on-error: true - name: run job run: bash -x ../../../run-job.sh pipeline.yml working-directory: cli/jobs/pipelines/nyc-taxi
[実行の表示] を選びます。
[自分のワークフローを理解し、先に進んで有効にする] を選んでワークフローを有効にします。
cli-jobs-pipelines-nyc-taxi-pipeline ワークフローを選び、[ワークフローを有効にする] を選びます。
[ワークフローの実行] を選び、今すぐ [ワークフローの実行] オプションを選びます。
手順 6: ワークフローの実行を確認する
完了したワークフロー実行を開き、ビルド ジョブが正常に実行されたことを確認します。 ジョブの横に緑色のチェックマークが表示されます。
Azure Machine Learning スタジオを開き、nyc-taxi-pipeline-example に移動します。 ジョブの各部分 (準備、変換、トレーニング、予測、スコア) が完了し、緑色のチェックマークが表示されていることを確認します。
リソースをクリーンアップする
リソース グループとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。