モデル パッケージをオンライン エンドポイントにデプロイする (プレビュー)

モデル パッケージは Azure Machine Learning の機能であり、機械学習モデルをサービス プラットフォームにデプロイするために必要なすべての依存関係を収集できます。 モデルをデプロイする前にパッケージを作成すると、堅牢で信頼性の高いデプロイと、より効率的な MLOps ワークフローが提供されます。 パッケージは、ワークスペース間だけでなく、Azure Machine Learning の外部にも移動できます。 モデル パッケージ (プレビュー)の詳細を確認する

重要

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。

詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

この記事では、モデルをパッケージ化し、Azure Machine Learning のオンライン エンドポイントにデプロイする方法について説明します。

前提条件

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

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

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

  • Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure Machine Learning ワークスペースの所有者か共同作成者ロール、またはカスタム ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

この例の概要

この例では、カスタム型 のモデルをパッケージ化し、オンライン推論のためにオンライン エンドポイントにデプロイします。

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

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

このセクションでは、endpoints/online/deploy-packages/custom-model フォルダーの例を使用します。

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

作業を行う Azure Machine Learning ワークスペースに接続します。

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

モデルをパッケージ化する

モデル パッケージを明示的に作成して、パッケージ化操作の実行方法を制御できます。 モデル パッケージを作成するには、次を指定します:

  • パッケージ化するモデル: 各モデル パッケージに含めることができるモデルは 1 つだけです。 Azure Machine Learning では、同じモデル パッケージに複数のモデルをパッケージ化することはできません。
  • 基本環境: 環境は基本イメージを示すために使用され、Python パッケージではモデルに必要な依存関係があります。 MLflow モデルの場合、Azure Machine Learning によって基本環境が自動的に生成されます。 カスタム モデルの場合は、それを指定する必要があります。
  • サービス テクノロジー: モデルの実行に使用される推論スタック。

ヒント

モデルが MLflow の場合、モデル パッケージを手動で作成する必要はありません。 デプロイ前に自動的にパッケージ化できます。 オンライン エンドポイントに MLflow モデルをデプロイするを参照してください。

  1. モデル パッケージでは、モデルをワークスペースまたは Azure Machine Learning レジストリに登録する必要があります。 この例では、リポジトリにモデルのローカル コピーが既に存在するため、ワークスペース内のレジストリにモデルを発行するだけで済みます。 デプロイしようとしているモデルが既に登録されている場合は、このセクションをスキップできます。

    MODEL_NAME='sklearn-regression'
    MODEL_PATH='model'
    az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model
    
  2. このモデルでは、次のパッケージを実行する必要があり、conda ファイルで指定されています:

    conda.yaml

    name: model-env
    channels:
      - conda-forge
    dependencies:
      - python=3.9
      - numpy=1.23.5
      - pip=23.0.1
      - scikit-learn=1.2.2
      - scipy=1.10.1
      - xgboost==1.3.3
    

    Note

    conda YAML でモデルの要件のみが示されていることに注意してください。 推論サーバーに必要なパッケージは、パッケージ操作に含まれます。

    ヒント

    モデルでプライベート フィードでホストされているパッケージが必要な場合は、それらを含むように構成できます。 プライベート Python フィードに依存関係があるモデルをパッケージ化するを参照してください。

  3. モデル要件と基本イメージを含む基本環境を作成します。 基本環境では、モデルに必要な依存関係のみが示されます。 MLflow モデルの場合、基本環境は省略可能であり、その場合、Azure Machine Learning によって自動生成されます。

    基本環境定義を作成します:

    sklearn-regression-env.yml

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: sklearn-regression-env
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
    conda_file: conda.yaml
    description: An environment for models built with XGBoost and Scikit-learn.
    

    次に、次のように環境を作成します:

    az ml environment create -f environment/sklearn-regression-env.yml
    
  4. パッケージ仕様を作成します:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  5. モデル パッケージ操作を開始します。

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  6. パッケージ操作の結果は環境です。

モデル パッケージをデプロイする

モデル パッケージは、Azure Machine Learning のオンライン エンドポイントに直接デプロイできます。 オンライン エンドポイントにパッケージをデプロイするには、次の手順に従います:

  1. パッケージのデプロイをホストするエンドポイントの名前を選択し、作成します:

    ENDPOINT_NAME="sklearn-regression-online"
    
    az ml online-endpoint create -n $ENDPOINT_NAME
    
  2. パッケージを使用してデプロイを作成します。 作成したパッケージで environment がどのように構成されているかに注目してください。

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: with-package
    endpoint_name: hello-packages
    environment: azureml:sklearn-regression-online-pkg@latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    

    ヒント

    この例では、モデルまたはスコアリング スクリプトを指定していない点に注意してください。これらはすべてパッケージの一部です。

  3. デプロイを開始します:

    az ml online-deployment create -f deployment.yml
    
  4. この時点で、デプロイを使用する準備ができました。 サンプル要求ファイルを作成することで、動作をテストできます:

    sample-request.json

    {
        "data": [
            [1,2,3,4,5,6,7,8,9,10], 
            [10,9,8,7,6,5,4,3,2,1]
        ]
    }
    
  5. エンドポイントに要求を送信する

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment with-package -r sample-request.json
    

次のステップ