Azure Machine Learning CLI、SDK、REST API を使用してモデルをトレーニングする

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

Azure Machine Learningには、ML トレーニング ジョブを送信する複数の方法が用意されています。 この記事では、次の方法を使用してジョブを送信する方法について説明します。

  • 機械学習のAzure CLI拡張機能: ml 拡張機能 。CLI v2 とも呼ばれます。
  • Azure Machine Learning 用Python SDK v2。
  • REST API: CLI と SDK が構築されている API。

前提 条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料または有料版のAzure Machine Learningをお試しください。
  • Azure Machine Learning ワークスペース。 リソースがない場合は、 リソースの作成 に関する記事の手順を使用できます。

SDK を使用するには、Azure Machine Learning SDK v2 for Python をインストールします。

サンプル リポジトリを複製する

この記事のコードスニペットは、Azure Machine Learning の例 GitHub リポジトリに基づいています。 リポジトリを開発環境に複製するには、次のコマンドを使用します。

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

ヒント

--depth 1を使用して、リポジトリへの最新のコミットのみを複製します。これにより、操作を完了する時間が短縮されます。

タスクの例

この記事の例では、あやめの花データセットを使用して MLFlow モデルをトレーニングします。

クラウドでトレーニングする

クラウドでトレーニングを行う場合は、Azure Machine Learning ワークスペースに接続し、トレーニング ジョブを実行するコンピューティング リソースを選択する必要があります。

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

ヒント

次のタブを使用して、モデルのトレーニングに使用する方法を選択します。 タブを選択すると、この記事のすべてのタブが同じタブに自動的に切り替わる。別のタブはいつでも選択できます。

ワークスペースに接続するには、識別子パラメーター (サブスクリプション、リソース グループ、ワークスペース名) が必要です。 MLClient 名前空間の azure.ai.ml でこれらの詳細を使用して、必要なAzure Machine Learning ワークスペースへのハンドルを取得します。 認証するには、既定の認証Azureを使用します。 資格情報を構成してワークスペースに接続する方法の詳細については、このexampleを参照してください。

#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

2. トレーニング用のコンピューティング リソースを作成する

メモ

サーバーレス コンピューティングを試すには、この手順をスキップして 3 に進みます。トレーニング ジョブを送信します

Azure Machine Learning コンピューティング クラスターは、トレーニング ジョブの実行に使用できるフル マネージドコンピューティング リソースです。 次の例では、 cpu-clusterという名前のコンピューティング クラスターを作成します。

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

3. トレーニング ジョブを送信する

このスクリプトを実行するには、command を使用して、./sdk/python/jobs/single-step/lightgbm/iris/src/ の下にある main.py Python スクリプトを実行します。 コマンドを job としてAzure Machine Learningに送信します。

メモ

サーバーレス コンピューティングを使用するには、このコードのcompute="cpu-cluster"を削除します。

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url

前の例では、次の構成を行いました。

  • code - コマンドを実行するコードが配置されているパス。
  • command - 実行する必要があるコマンド。
  • environment - トレーニング スクリプトを実行するために必要な環境。 この例では、AzureML-lightgbm-3.3@latest と呼ばれるAzure Machine Learningによって提供されるキュレーションされた環境または既製の環境を使用します。 また、基本 Docker イメージを指定し、その上に conda yaml を指定することで、カスタム環境を使用することもできます。
  • inputs - コマンドへの名前と値のペアを使用する入力のディクショナリ。 キーはジョブのコンテキスト内の入力の名前であり、値は入力値です。 command式を使用して、${{inputs.<input_name>}}内の入力を参照します。 ファイルまたはフォルダーを入力として使用するには、 Input クラスを使用します。 詳細については、「 SDK と CLI v2 の式」を参照してください

詳細については、 リファレンス ドキュメントを参照してください

ジョブを送信すると、サービスは、Azure Machine Learning スタジオのジョブの状態への URL を返します。 スタジオ UI を使用して、ジョブの進行状況を表示します。 returned_job.statusを使用して、ジョブの現在の状態を確認することもできます。

重要

Azure Machine Learning トレーニング ジョブとコマンド ジョブでは、カスタマイズされたドメイン名ラベルを使用する Azure Container Registries (ACR) は対応していません。 このようなレジストリを参照するジョブは、イメージの取得または環境設定の解決エラーが原因で起動中に失敗する可能性があります。 この問題を回避するには:

  • ACR の既定のログイン サーバー形式 (<registry-name>.azurecr.io) を使用します。
  • レジストリを作成するときに、 ドメイン名ラベルのスコープ[セキュリティで保護されていない] に設定します。

トレーニング済みモデルを登録する

次の例では、Azure Machine Learning ワークスペースにモデルを登録する方法を示します。

ヒント

トレーニング ジョブは、 name プロパティを返します。 この名前は、モデルへのパスの一部として使用します。

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=AssetTypes.MLFLOW_MODEL
)

ml_client.models.create_or_update(run_model)

次の手順

トレーニング済みのモデルが作成されたので、 オンライン エンドポイントを使用してデプロイする方法について説明します

その他の例については、Azure Machine Learning の例 GitHub リポジトリを参照してください。

この記事で使用する Azure CLI コマンド、Python SDK クラス、または REST API の詳細については、次のリファレンス ドキュメントを参照してください。