次の方法で共有


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

適用対象: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 ワークスペース。 ワークスペースを作成するには、「Azure Machine Learning ワークスペースの管理」を参照してください。

  • Machine Learning ワークスペースでの以下のアクセス許可があることを確認してください。

    • バッチ エンドポイントとバッチ デプロイを作成または管理する: 所有者または共同作成者のロール、あるいは Microsoft.MachineLearningServices/workspaces/batchEndpoints/* を許可するカスタム役割を使用します。
    • ワークスペース リソース グループ内での Azure Resource Manager デプロイの作成: 所有者、共同作成者、またはワークスペースがデプロイされるリソース グループ での Microsoft.Resources/deployments/write を許可するカスタム ロールを使用します。
  • Machine Learning を使用するには、以下のソフトウェアをインストールします。

    次のコマンドを実行して、Azure CLIml という Azure Machine Learning 用の拡張機能をインストールします。

    az extension add -n ml
    

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


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

ワークスペースは、Machine Learning の最上位のリソースです。 これは 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

次のステップ