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) ファイルが使用されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。

前提条件

この記事の手順に従う前に、次の前提条件が満たされていることをご確認ください。

  • GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。

ステップ 1: コードを取得する

GitHub で次のリポジトリをフォークします。

https://github.com/azure/azureml-examples

フォークしたリポジトリをローカルで複製します。

git clone https://github.com/YOUR-USERNAME/azureml-examples

手順 2: Azure による認証

まず、Azure で認証する方法を定義する必要があります。 サービス プリンシパルまたは OpenID Connect を使用できます。

デプロイ資格情報を生成する

Azure CLIaz ad sp create-for-rbac コマンドを使用して、サービス プリンシパルを作成します。 このコマンドは、Azure portal で Azure Cloud Shell を使用するか、[試してみる] ボタンを選択して実行します。

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

--json-auth パラメーターは、Azure CLI バージョン 2.51.0 以降で使用できます。 これ以前のバージョンでは --sdk-auth を使用し、非推奨の警告が表示されます。

上記の例で、プレースホルダーをご利用のサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。 これにより、以下のようなご自分の App Service アプリにアクセスするためのロールの割り当て資格情報を含む JSON オブジェクトが出力されます。 この JSON オブジェクトを後のためにコピーします。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

シークレットを作成する

  1. GitHub で、お使いのリポジトリに移動します。

  2. ナビゲーション メニューで [設定] に移動します。

  3. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    シークレットを追加しているスクリーンショット

  4. [New repository secret](新しいリポジトリ シークレット) を選択します。

  5. Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS と名前を付けます。

  6. [Add secret](シークレットの追加) を選択します。

手順 3: setup.sh を更新して Azure Machine Learning ワークスペースに接続する

ご自分のワークスペースに合わせて CLI セットアップ ファイル変数を更新する必要があります。

  1. フォークしたリポジトリで、azureml-examples/cli/ に移動します。

  2. setup.sh を編集してファイル内のこれらの変数を更新します。

    変数 説明
    GROUP リソース グループの名前
    LOCATION ご自分のワークスペースの場所 (例: eastus2)
    ワークスペース Azure Machine Learning ワークスペースの名前

手順 4: コンピューティング クラスター名で pipeline.yml を更新する

pipeline.yml ファイルを使用して、Azure Machine Learning パイプラインをデプロイします。 これは機械学習パイプラインであり、DevOps パイプラインではありません。 コンピューター クラスター名に cpu-cluster 以外の名前を使用している場合にのみ、この更新を行う必要があります。

  1. フォークしたリポジトリで、azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml に移動します。
  2. 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 が行われたときに実行されます。 ワークフローをトリガーするイベントについて確認してください。
  • ワークフローのジョブ セクションで、コードをチェックアウトし、ご自分のサービス プリンシパル シークレットを使用して Azure にログインします。
  • ジョブ セクションには、Machine Learning CLI (v2) をインストールして設定するセットアップ アクションも含まれています。 CLI がインストールされると、実行ジョブ アクションによって Azure Machine Learning pipeline.yml ファイルが実行され、NYC タクシー データを使用してモデルがトレーニングされます。

ワークフローを有効にする

  1. フォークしたリポジトリで .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@v1
          with:
            creds: ${{secrets.AZURE_CREDENTIALS}}
        - 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
    
  2. [実行の表示] を選びます。

  3. [自分のワークフローを理解し、先に進んで有効にする] を選んでワークフローを有効にします。

  4. cli-jobs-pipelines-nyc-taxi-pipeline ワークフローを選び、[ワークフローを有効にする] を選びます。 GitHub Actions ワークフローを有効にするスクリーンショット。

  5. [ワークフローの実行] を選び、今すぐ [ワークフローの実行] オプションを選びます。 GitHub Actions ワークフローを実行するスクリーンショット。

手順 6: ワークフローの実行を確認する

  1. 完了したワークフロー実行を開き、ビルド ジョブが正常に実行されたことを確認します。 ジョブの横に緑色のチェックマークが表示されます。

  2. Azure Machine Learning スタジオを開き、nyc-taxi-pipeline-example に移動します。 ジョブの各部分 (準備、変換、トレーニング、予測、スコア) が完了し、緑色のチェックマークが表示されていることを確認します。

    正常に実行された Machine Learning Studio のスクリーンショット。

リソースをクリーンアップする

リソース グループとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。

次の手順