既存のパイプライン ジョブをバッチ エンドポイントにデプロイする

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

Azure Machine Learning でパイプラインを操作するための便利な方法が提供されるため、バッチ エンドポイントを使用するとパイプライン コンポーネントをデプロイできます。 バッチ エンドポイントは、デプロイ用のパイプライン コンポーネントを受け入れます。 ただし、正常に実行されるパイプライン ジョブが既にある場合、Azure Machine Learning はそのジョブをバッチ エンドポイントへの入力として受け入れ、パイプライン コンポーネントを自動的に作成できます。 この記事では、既存のパイプライン ジョブをバッチ デプロイの入力として使用する方法について説明します。

次のことを学習します。

  • デプロイするパイプライン ジョブを実行して作成する
  • 既存のジョブからバッチ デプロイを作成する
  • 展開をテスト

この例の概要

この例では、"hello world!" を出力する単純なコマンド ジョブで構成されるパイプラインをデプロイします。 デプロイの前にパイプライン コンポーネントを登録する代わりに、デプロイに使用する既存のパイプライン ジョブを指定します。 その後、Azure Machine Learning によってパイプライン コンポーネントが自動的に作成され、バッチ エンドポイントのパイプライン コンポーネント デプロイとしてデプロイされます。

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

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

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

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

前提条件

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

  • 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>

デプロイするパイプライン ジョブを実行する

このセクションでは、まずパイプライン ジョブを実行します。

次の pipeline-job.yml ファイルには、パイプライン ジョブの構成が含まれます。

pipeline-job.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

experiment_name: hello-pipeline-batch
display_name: hello-pipeline-batch-job
description: This job demonstrates how to run the a pipeline component in a pipeline job. You can use this example to test a component in an standalone job before deploying it in an endpoint.

compute: batch-cluster
component: hello-component/hello.yml

パイプライン ジョブを作成します。

JOB_NAME=$(az ml job create -f pipeline-job.yml --query name -o tsv)

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

パイプライン ジョブをデプロイする前に、バッチ エンドポイントをデプロイしてデプロイをホストする必要があります。

  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 に知らせる必要があります。 この場合、そのジョブは次の変数で指定されます。

    echo $JOB_NAME
    
  2. デプロイを構成します。

    deployment-from-job.yml ファイルには、デプロイの構成が含まれます。 このデプロイがパイプライン ジョブから作成されていることを示すために、component の代わりにキー job_definition が使用されていることに注目してください。

    deployment-from-job.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: hello-batch-from-job
    endpoint_name: hello-pipeline-batch
    type: pipeline
    job_definition: azureml:job_name_placeholder
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    

    ヒント

    この構成では、batch-cluster という名前のコンピューティング クラスターがあることを前提としています。 この値は、お使いのクラスターの名前に置き換えることができます。

  3. デプロイを作成します。

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

    az ml batch-deployment create --endpoint $ENDPOINT_NAME --set job_definition=azureml:$JOB_NAME -f deployment-from-job.yml
    

    ヒント

    --set job_definition=azureml:$JOB_NAME が使用されていることに注目してください。 ジョブ名は一意であるため、ここではコマンド --set を使用して、ワークスペースで実行するときにジョブの名前を変更しています。

  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

次のステップ