開発環境と運用環境を設定する
DevOps 内で、環境とはリソースの集まりを指します。 これらのリソースは、アプリケーションをデプロイしたり、機械学習プロジェクトによってモデルをデプロイしたりするために使用されます。
継続的デリバリーのために環境を使用する
使用する環境の数は、組織によって異なります。 一般的に、開発 (dev) と運用 (prod) の少なくとも 2 つの環境があります。さらに、ステージングや運用前 (pre-prod) 環境など、中間の環境を追加することもできます。
継続的デリバリーを使用した一般的な方法は次のとおりです。
- 開発環境でモデル トレーニングを試します。
- 最適なモデルをステージング環境または運用前環境に移動し、そのモデルをデプロイしてテストします。
- 最後に、モデルを運用環境にリリースして、そのモデルをデプロイし、エンドユーザーがモデルを使用できるようにします。
Note
このモジュールでは、環境を DevOps での解釈に基づいて使用しています。 Azure Machine Learning では、環境という用語が、スクリプトの実行に必要な Python パッケージのコレクションを記述するためにも使用されることに注意してください。 これら 2 つの環境の概念は互いに独立しています。 Azure Machine Learning の環境の詳細について説明します。
Azure Machine Learning の環境を構成する
MLOps を実装し、大規模な機械学習モデルを扱う場合は、さまざまな段階に対して個別の環境を使用することをお勧めします。
開発、運用前、および運用の各環境をチームで使用すると想定します。 チームの全員がすべての環境にアクセスする必要があるわけではありません。 データ サイエンティストは、非運用データを使用して開発環境内でのみ作業する可能性があります。一方、機械学習エンジニアは、運用データを使用して運用前環境と運用環境にモデルをデプロイする作業を行います。
環境を分離すれば、リソースへのアクセスの制御が容易になります。 その後、各環境を個別の Azure Machine Learning ワークスペースに関連付けることができます。
Azure 内では、ロールベースのアクセス制御 (RBAC) を使用して、それぞれの同僚に、作業する必要があるリソースのサブセットに対する適切なレベルのアクセス権を付与します。
または、Azure Machine Learning ワークスペースを 1 つだけ使用することもできます。 開発と運用のために 1 つのワークスペースを使用すると、Azure のフットプリントが小さくなり、管理オーバーヘッドが少なくなります。 ただし、RBAC は開発と運用の両方に適用されます。これにより、ユーザーに付与されるリソースへのアクセス権が少なすぎるか、または多すぎることになる可能性があります。
ヒント
Azure Machine Learning のリソースを編成するためのベスト プラクティスの詳細について説明します。
モデル開発のさまざまな段階に対する環境を操作するには、GitHub Actions を使用して Azure Pipeline またはワークフローを実行するときに 1 つの環境をターゲットに設定します。
Azure DevOps の環境
Azure DevOps の環境を操作するには、まず環境を作成する必要があります。 次に、Azure Pipeline 内のデプロイ先の環境を指定できます。
- Azure DevOps 内で、[パイプライン] メニューを展開します。
- [環境] を選択します。
- 新しい環境を作成します。
- 環境に名前を指定します。
- リソースに対して [なし] を選択します。 パイプライン自体の中で、特定の Azure Machine Learning ワークスペースをターゲットに設定します。
- [作成] を選択します
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 ワークスペースを指定します。
ヒント
Azure DevOps を使用して環境を作成してターゲットを設定する方法の詳細について説明します。
GitHub 環境
GitHub Actions で環境を使用するには、まず環境を作成する必要があります。 その後、ワークフローで環境を使用できます。
GitHub リポジトリ (repo) 内に環境を作成するには:
- リポジトリ内の [設定] タブに移動します。
- [環境] を選択します。
- 新しい環境を作成します。
- 名前を入力します。
- [環境の構成] を選択します。
特定の 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 を使用して環境を作成して使用する方法の詳細について説明します。