CLI & SDK (v2) を使用して Azure Machine Learning 環境を管理する

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

Azure Machine Learning 環境は、ジョブまたはデプロイの実行環境を定義し、コードの依存関係をカプセル化します。 Azure ML は、環境仕様を使用して、指定されたコンピューティング ターゲットでトレーニング コードまたはスコアリング コードを実行する Docker コンテナーを作成します。 Conda 仕様、Docker イメージ、または Docker ビルド コンテキストから環境を定義できます。

この記事では、SDK & CLI (v2) を使用して Azure ML 環境を作成し、管理する方法について学習します。

前提条件

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

ヒント

完全な機能を備えた開発環境の場合は、Visual Studio Code と Azure Machine Learning 拡張機能を使用して、Azure Machine Learning リソースを管理し、機械学習モデルをトレーニングします。

examples リポジトリを複製する

トレーニング例を実行するには、最初に examples リポジトリをクローンします。 CLI の例では、cli ディレクトリに移動します。 SDK の例では、SDK ディレクトリに移動します。

git clone --depth 1 https://github.com/Azure/azureml-examples

なお、--depth 1 では、リポジトリに対する最新のコミットだけがクローンされるので、操作の完了にかかる時間を短縮できます。

ワークスペースに接続する

ヒント

以下のタブを使って、環境の操作に使用する方法を選択します。 タブを選択すると、この記事のすべてのタブが同じタブに自動的に切り替わります。いつでも別のタブを選択できます。

Azure CLI を使用する場合は、識別子パラメーター (サブスクリプション、リソース グループ、ワークスペース名) が必要です。 コマンドごとにこれらのパラメーターを指定できますが、すべてのコマンドに使用される既定値を設定することもできます。 既定値を設定するには、次のコマンドを使用します。 <subscription ID><AzureML workspace name><resource group> を、構成の値に置き換えます。

az account set --subscription <subscription ID>
az configure --defaults workspace=<AzureML workspace name> group=<resource group>

キュレーションされた環境

Azure ML には、キュレーションされた環境とカスタム環境という 2 種類の環境があります。 キュレーションされた環境は、一般的な ML フレームワークとツールが含まれた、定義済みの環境です。 カスタム環境は、ユーザー定義の環境であり、az ml environment create を使用して作成できます。

キュレーションされた環境は Azure ML から提供され、既定でお使いのワークスペースで利用できます。 Azure ML は、これらの環境を最新のフレームワーク バージョンのリリースで定期的に更新し、バグの修正とセキュリティ修正プログラムを行うために保持します。 キャッシュされた Docker イメージによってサポートされるため、ジョブの準備に要するコストとモデルのデプロイに要する時間が短縮されます。

キュレーションされたこれらの環境は、azureml:<curated-environment-name>:<version> または azureml:<curated-environment-name>@latest 構文を使用する特定の環境を参照することで、トレーニングやデプロイにすぐに使用できます。 また、キュレーションされたこれらの環境をサポートする Dockerfile を変更することで、独自のカスタム環境のリファレンスとして使用することもできます。

使用可能な一連のキュレーションされた環境は、Azure ML スタジオの UI で確認することも、az ml environments list で CLI (v2) を使用して確認することもできます。

環境の作成

Docker イメージ、Docker ビルド コンテキスト、および Docker イメージを使用した conda 仕様から環境を定義できます。

Docker イメージから環境を作成する

Docker イメージから環境を定義するには、Docker Hub や Azure Container Registry などのレジストリでホストされているイメージのイメージ URI を指定します。

Docker イメージから定義された環境の YAML 仕様ファイルの例を以下に示します。 Docker Hub のオフィシャル PyTorch リポジトリにあるイメージは、YAML ファイルの image プロパティを使用して指定されます。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-example
image: pytorch/pytorch:latest
description: Environment created from a Docker image.

環境を作成するには:

az ml environment create --file assets/environment/docker-image.yml

ヒント

Azure ML は、共通のシステム依存関係を使用して、CPU と GPU Ubuntu Linux ベースの基本イメージを保持します。 たとえば、GPU イメージには Miniconda、OpenMPI、CUDA、cuDNN、NCCL が含まれています。 ご使用の環境に合わせてこれらのイメージを使用することも、独自のカスタム イメージをビルドするときに、対応する Dockerfile を参考として使用することもできます。

一連の基本イメージと、それに対応する Dockerfile については、AzureML コンテナー リポジトリを参照してください。

Docker ビルド コンテキストから環境を作成する

ビルド済みイメージから環境を定義する代わりに、 Docker ビルド コンテキストから環境を定義することもできます。 これを行うには、ビルド コンテキストとして機能するディレクトリを指定します。 このディレクトリには、Dockerfile と、イメージをビルドするために必要なその他のファイルが含まれている必要があります。

ビルド コンテキストから定義された環境の YAML 仕様ファイルの例を以下に示します。 ビルド コンテキスト フォルダーへのローカル パスが build.path フィールドに指定され、そのビルド コンテキスト フォルダー内の Dockerfile への相対パスが build.dockerfile_path フィールドに指定されます。 YAML ファイルで build.dockerfile_path が省略された場合、Azure ML はビルド コンテキストのルートで Dockerfile という名前の Dockerfile を検索します。

この例では、ビルド コンテキストに Dockerfile という名前の Dockerfile と、Python パッケージをインストールするために Dockerfile 内で参照される requirements.txt ファイルが含まれています。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-context-example
build:
  path: docker-contexts/python-and-pip

環境を作成するには:

az ml environment create --file assets/environment/docker-context.yml

Azure ML は、環境が作成されるときに、ビルド コンテキストからイメージのビルドを開始します。 studio UI でビルドの状態を監視し、ビルド ログを確認できます。

Conda 仕様から環境を作成する

Conda 環境の依存関係を含む標準の conda YAML 構成ファイルを使用して環境を定義できます。 この標準形式の詳細については、環境の手動作成に関するセクションを参照してください。

この環境では、Docker 基本イメージも指定する必要があります。 Azure ML は、提供されている Docker イメージを基盤にして conda 環境をビルドします。 Python の一部の依存関係を Docker イメージにインストールした場合、それらのパッケージは実行環境に存在しないため、実行時エラーが発生します。 既定では、指定した依存関係を含む Conda 環境が Azure ML で構築され、その環境でジョブが実行されます。基本イメージにインストールされている Python ライブラリは使用されません。

conda 仕様から定義された環境の YAML 仕様ファイルの例を以下に示します。 ここでは、Azure ML environment yaml ファイルから conda ファイルへの相対パスが、conda_file プロパティを使用して指定されています。 また、別のファイルで定義するのではなく、conda_file プロパティを使用して conda 仕様をインラインで定義することもできます。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-plus-conda-example
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: conda-yamls/pydata.yml
description: Environment created from a Docker image plus Conda environment.

環境を作成するには:

az ml environment create --file assets/environment/docker-image-plus-conda.yml

環境がジョブまたはデプロイで使用されている場合、Azure ML はこの環境仕様から最終的な Docker イメージをビルドします。 また、スタジオ UI で環境のビルドを手動でトリガーすることもできます。

環境を管理する

SDK と CLI (v2) では、Azure ML 環境資産のライフサイクルを管理することもできます。

List

ワークスペース内のすべての環境を一覧表示します。

az ml environment list

指定された名前のすべての環境バージョンを一覧表示します。

az ml environment list --name docker-image-example

表示

特定の環境の詳細を取得します。

az ml environment show --name docker-image-example --version 1

更新

特定の環境の変更可能なプロパティを更新します。

az ml environment update --name docker-image-example --version 1 --set description="This is an updated description."

重要

環境については、descriptiontags のみを更新できます。 その他のすべてのプロパティは変更できません。これらのプロパティを変更する必要がある場合は、新しいバージョンの環境を作成する必要があります。

アーカイブ

環境をアーカイブすると、既定でリスト クエリ (az ml environment list) から非表示になります。 アーカイブされた環境は、ワークフローで参照し、使用し続けることができます。 環境コンテナーのすべてのバージョンまたは特定のバージョンのみをアーカイブできます。

バージョンを指定しない場合、特定の名前の環境のすべてのバージョンがアーカイブされます。 アーカイブされた環境コンテナーの下に新しい環境バージョンを作成すると、その新しいバージョンも自動的にアーカイブ済みとして設定されます。

環境のすべてのバージョンをアーカイブする:

az ml environment archive --name docker-image-example

特定の環境バージョンをアーカイブする:

az ml environment archive --name docker-image-example --version 1

トレーニングに環境を使用する

トレーニング ジョブに環境を使用するには、ジョブ YAML 構成の environment フィールドを指定します。 environment: azureml:<environment-name>:<environment-version> または environment: azureml:<environment-name>@latest を使用して既存の登録済みの Azure ML 環境を参照するか (環境の最新バージョンを参照する場合)、インラインで環境仕様を定義するかのいずれかを行うことができます。 環境をインラインで定義する場合は、nameversion フィールドを指定しないでください。これらの環境は "未登録" の環境として扱われ、環境資産レジストリでは追跡されません。

トレーニング ジョブを送信するときに、新しい環境のビルドに数分かかる場合があります。 その期間は、必要な依存関係のサイズによって異なります。 環境はサービスによってキャッシュされます。 そのため、環境定義が変更されていない限り、完全なセットアップの時間が発生するのは一度だけです。


ジョブでの環境の使用方法の詳細については、「モデルをトレーニングする」を参照してください。

モデル デプロイに環境を使用する

オンラインとバッチの両方のスコアリング用に、モデルのデプロイに環境を使用することもできます。 これを行うには、デプロイ YAML 構成で environment フィールドを指定します。

デプロイでの環境の使用方法について詳しくは、「オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコア付けする」をご覧ください。

次のステップ