開発環境と運用環境を設定する

完了

DevOps 内で、環境とはリソースの集まりを指します。 これらのリソースは、アプリケーションをデプロイしたり、機械学習プロジェクトによってモデルをデプロイしたりするために使用されます。

継続的デリバリーのために環境を使用する

使用する環境の数は、組織によって異なります。 一般的に、開発 (dev) と運用 (prod) の少なくとも 2 つの環境があります。さらに、ステージング運用前 (pre-prod) 環境など、中間の環境を追加することもできます。

継続的デリバリーを使用した一般的な方法は次のとおりです。

  1. 開発環境でモデル トレーニングを試します。
  2. 最適なモデルをステージング環境または運用前環境に移動し、そのモデルをデプロイしてテストします。
  3. 最後に、モデルを運用環境にリリースして、そのモデルをデプロイし、エンドユーザーがモデルを使用できるようにします。

Note

このモジュールでは、環境を DevOps での解釈に基づいて使用しています。 Azure Machine Learning では、環境という用語が、スクリプトの実行に必要な Python パッケージのコレクションを記述するためにも使用されることに注意してください。 これら 2 つの環境の概念は互いに独立しています。 Azure Machine Learning の環境の詳細について説明します。

Azure Machine Learning の環境を構成する

MLOps を実装し、大規模な機械学習モデルを扱う場合は、さまざまな段階に対して個別の環境を使用することをお勧めします。

開発、運用前、および運用の各環境をチームで使用すると想定します。 チームの全員がすべての環境にアクセスする必要があるわけではありません。 データ サイエンティストは、非運用データを使用して開発環境内でのみ作業する可能性があります。一方、機械学習エンジニアは、運用データを使用して運用前環境と運用環境にモデルをデプロイする作業を行います。

環境を分離すれば、リソースへのアクセスの制御が容易になります。 その後、各環境を個別の Azure Machine Learning ワークスペースに関連付けることができます。

Diagram of multiple environments set-up.

Azure 内では、ロールベースのアクセス制御 (RBAC) を使用して、それぞれの同僚に、作業する必要があるリソースのサブセットに対する適切なレベルのアクセス権を付与します。

または、Azure Machine Learning ワークスペースを 1 つだけ使用することもできます。 開発と運用のために 1 つのワークスペースを使用すると、Azure のフットプリントが小さくなり、管理オーバーヘッドが少なくなります。 ただし、RBAC は開発と運用の両方に適用されます。これにより、ユーザーに付与されるリソースへのアクセス権が少なすぎるか、または多すぎることになる可能性があります。

モデル開発のさまざまな段階に対する環境を操作するには、GitHub Actions を使用して Azure Pipeline またはワークフローを実行するときに 1 つの環境をターゲットに設定します。

Azure DevOps の環境

Azure DevOps の環境を操作するには、まず環境を作成する必要があります。 次に、Azure Pipeline 内のデプロイ先の環境を指定できます。

  1. Azure DevOps 内で、[パイプライン] メニューを展開します。
  2. [環境] を選択します。
  3. 新しい環境を作成します。
  4. 環境に名前を指定します。
  5. リソースに対して [なし] を選択します。 パイプライン自体の中で、特定の Azure Machine Learning ワークスペースをターゲットに設定します。
  6. [作成] を選択します

Screenshot of creating new environment in Azure DevOps.

Azure DevOps で環境を作成し、各環境に異なる Azure Machine Learning ワークスペースを関連付けた後、デプロイ先の環境を Azure Pipelines YAML ファイルで指定できます。

trigger: 
- main

stages:
- stage: deployDev
  displayName: 'Deploy to development environment'
  jobs:
    - deployment: publishPipeline
      displayName: 'Model Training'
      pool:
        vmImage: 'Ubuntu-18.04'
      environment: dev
      strategy:
       runOnce:
         deploy:
          steps:
          - template: aml-steps.yml
            parameters:
              serviceconnectionname: 'spn-aml-workspace-dev'

YAML ファイルで environment の値は dev です。これは、モデルが開発環境でトレーニングされていることを示しています。 サービス接続によって、モデルのトレーニングに使用する Azure Machine Learning ワークスペースを指定します。

GitHub 環境

GitHub Actions で環境を使用するには、まず環境を作成する必要があります。 その後、ワークフローで環境を使用できます。

GitHub リポジトリ (repo) 内に環境を作成するには:

  1. リポジトリ内の [設定] タブに移動します。
  2. [環境] を選択します。
  3. 新しい環境を作成します。
  4. 名前を入力します。
  5. [環境の構成] を選択します。

Screenshot of creating new environment in GitHub.

特定の Azure Machine Learning ワークスペースに環境を関連付けるには、環境シークレットを作成して、その環境にのみ Azure Machine Learning ワークスペースへのアクセス権を付与します。

ワークフローで環境を使用するには、YAML ファイルにデプロイ先の環境を含めて追加します。

name: Train model

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment:
        name: dev 
    steps:
    - name: check out repo
      uses: actions/checkout@v2
    - name: install az ml extension
      run: az extension add -n ml -y
    - name: azure login
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}
    - name: set current directory
      run: cd src
    - name: run pipeline
      run: az ml job create --file src/aml_service/pipeline-job.yml --resource-group dev-ml-rg --workspace-name dev-ml-ws

この例では、AZURE_CREDENTIALS シークレットに、この環境で使用される Azure Machine Learning ワークスペースへの接続情報が含まれています。

ヒント

GitHub Actions を使用して環境を作成して使用する方法の詳細について説明します。