バッチ エンドポイントを使用してパイプラインをデプロイする方法

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

Azure Machine Learning で操作するための便利な方法が提供されるため、パイプライン コンポーネントをバッチ エンドポイントの下にデプロイできます。 この記事では、単純なパイプラインを含むバッチ デプロイを作成する方法について説明します。 次のことを学習します。

  • パイプライン コンポーネントを作成して登録する
  • バッチ エンドポイントを作成してパイプライン コンポーネントをデプロイする
  • 展開をテスト

この例の概要

この例では、"hello world!" を出力する単純なコマンド ジョブで構成されるパイプライン コンポーネントをデプロイします。 このコンポーネントは、入力や出力を必要としない最も単純なパイプライン デプロイ シナリオです。

この記事の例は、azureml-examples リポジトリに含まれているコード サンプルを基にしています。 YAML などのファイルをコピーして貼り付けることなくコマンドをローカルで実行するには、最初にリポジトリを複製してから、ディレクトリをそのフォルダーに変更します。

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

この例のファイルは、次の場所にあります。

cd endpoints/batch/deploy-pipelines/hello-batch

Jupyter ノートブックで作業を進める

この例の Python SDK バージョンに沿って作業を進めることができます。そのためには、複製されたリポジトリで sdk-deploy-and-test.ipynb ノートブックを開きます。

前提条件

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

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。

  • Azure Machine Learning ワークスペース。 準備できていない場合は、Microsoft Azure Machine Learning ワークスペースの管理に関する記事の手順を使用して作成します。

  • ワークスペースに次のアクセス許可があることを確認します。

    • バッチ エンドポイントとバッチ デプロイを作成または管理する: 所有者または共同作成者のロール、あるいは Microsoft.MachineLearningServices/workspaces/batchEndpoints/* を許可するカスタム ロールを使用します。

    • ワークスペース リソース グループに ARM デプロイを作成する: 所有者または共同作成者のロール、あるいはワークスペースがデプロイされているリソース グループで Microsoft.Resources/deployments/write を許可するカスタム ロールを使用します。

  • Azure Machine Learning を使用するには、次のソフトウェアをインストールする必要があります。

    Azure CLImlAzure Machine Learning 用の 拡張機能

    az extension add -n ml
    

    注意

    Batch エンドポイントのパイプライン コンポーネント デプロイは、Azure CLI 用 ml 拡張機能のバージョン 2.7 で導入されました。 az extension update --name ml を使用して、最新バージョンを取得します。

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

ワークスペースは、Azure Machine Learning の最上位のリソースで、Azure Machine Learning を使用するときに作成するすべての成果物を操作するための一元的な場所を提供します。 このセクションでは、デプロイ タスクを実行するワークスペースに接続します。

次のコードで、サブスクリプション ID、ワークスペース、場所、リソース グループの値を渡します。

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

パイプライン コンポーネントを作成する

バッチ エンドポイントでは、モデルまたはパイプライン コンポーネントをデプロイできます。 パイプライン コンポーネントは再利用可能であり、共有レジストリを使用してこれらのコンポーネントをワークスペース間で移動することで、MLOps プラクティスを効率化できます。

この例のパイプライン コンポーネントには、ログに "hello world" メッセージのみを出力する 1 つのステップが含まれています。 入力や出力は必要ありません。

hello-component/hello.yml ファイルには、パイプライン コンポーネントの構成が含まれています。

hello-component/hello.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
name: hello_batch
display_name: Hello Batch component
version: 1
type: pipeline
jobs:
  main_job:
    type: command
    component:
      code: src
      environment: azureml://registries/azureml/environments/sklearn-1.0/labels/latest
      command: >-
        python hello.py

コンポーネントを登録します。

az ml component create -f hello-component/hello.yml

バッチ エンドポイントを作成する

  1. エンドポイントの名前を指定します。 バッチ エンドポイントの名前は、呼び出し URI の構成に使用されるため、各リージョンで一意である必要があります。 一意性を確保するために、次のコードで指定する名前に末尾文字を追加します。

    ENDPOINT_NAME="hello-batch"
    
  2. エンドポイントを構成します。

    endpoint.yml ファイルには、エンドポイントの構成が含まれます。

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: hello-batch
    description: A hello world endpoint for component deployments.
    auth_mode: aad_token
    
  3. エンドポイントを作成します。

    az ml batch-endpoint create --name $ENDPOINT_NAME  -f endpoint.yml
    
  4. エンドポイント URI にクエリを実行します。

    az ml batch-endpoint show --name $ENDPOINT_NAME
    

パイプライン コンポーネントをデプロイする

パイプライン コンポーネントをデプロイするには、バッチ デプロイを作成する必要があります。 デプロイは、実際の作業を行うアセットをホスティングするために必要なリソースのセットです。

  1. コンピューティング クラスターを作成します。 バッチ エンドポイントとバッチ デプロイは、コンピューティング クラスター上で実行されます。 これらは、ワークスペースに既に存在する任意の Azure Machine Learning コンピューティング クラスター上で実行できます。 したがって、複数のバッチ デプロイが同じコンピューティング インフラストラクチャを共有できます。 この例では、batch-cluster という名前の Azure Machine Learning コンピューティング クラスター上で作業します。 ワークスペースにコンピューティングが存在することを確認し、存在しない場合は作成します。

    az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
    
  2. デプロイを構成します。

    deployment.yml ファイルには、デプロイの構成が含まれます。 追加のプロパティについては、完全なバッチ エンドポイント YAML スキーマを確認してください。

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: hello-batch-dpl
    endpoint_name: hello-pipeline-batch
    type: pipeline
    component: azureml:hello_batch@latest
    settings:
        default_compute: batch-cluster
    
  3. デプロイを作成します。

    次のコードを実行して、バッチ エンドポイントの下にバッチ デプロイを作成し、それを既定のデプロイとして設定します。

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
    

    ヒント

    この新しいデプロイが既定になったことを示すために --set-default フラグが使用されていることに注目してください。

  4. デプロイを使用する準備が整いました。

展開をテスト

デプロイが作成されると、ジョブを受け取る準備が整います。 次のように、既定のデプロイを呼び出すことができます。

JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --query name -o tsv)

ヒント

この例では、パイプラインに入力または出力がありません。 ただし、このパイプライン コンポーネントにいくつか入力や出力が必要な場合は、呼び出し時に指示できます。 入力と出力を指示する方法について詳しく確認するには、「バッチ エンドポイントのジョブと入力データを作成する」を参照するか、「前処理を使用してバッチ スコアリングを実行するパイプラインをデプロイする方法 (プレビュー)」に関するチュートリアルをご参照ください。

次を使用して、ログの表示およびストリーミングの進行状況を監視できます。

az ml job stream -n $JOB_NAME

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

完了したら、関連付けられているリソースをワークスペースから削除します。

次のコードを実行して、バッチ エンドポイントとその基になっているデプロイを削除します。 --yes は、削除を確認するために使用します。

az ml batch-endpoint delete -n $ENDPOINT_NAME --yes

(オプション) 後のデプロイでコンピューティング クラスターを再利用する予定がない場合は、コンピューティングを削除します。

az ml compute delete -n batch-cluster

次のステップ