Azure Machine Learning の外部でモデルをパッケージ化してデプロイする (プレビュー)

モデル パッケージを作成することで、オンライン サービス用に Azure Machine Learning の外部にモデルをデプロイできます (プレビュー)。 Azure Machine Learning では、機械学習モデルをサービス プラットフォームにデプロイするために必要なすべての依存関係を収集するモデル パッケージを作成できます。 モデル パッケージは、ワークスペース間でも、Azure Machine Learning の外部でも移動できます。 モデル パッケージの詳細については、「デプロイ用のモデル パッケージ (プレビュー)」を参照してください。

重要

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

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

この記事では、モデルをパッケージ化して Azure App Service にデプロイする方法について説明します。

前提条件

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

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

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

    Note

    プライベート リンクが有効なワークスペースは、Azure Machine Learning の外部にデプロイするためのモデルのパッケージ化をサポートしていません。

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

システムを準備する

システムを準備するには、次の手順に従います。

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

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

    この記事では、endpoints/online/deploy-with-packages/mlflow-model フォルダーの例を使用します。

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

    az account set --subscription <subscription>
    az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
    
  3. パッケージでは、モデルをワークスペースまたは Azure Machine Learning レジストリに登録する必要があります。 この例では、リポジトリにモデルのローカル コピーがあるため、ワークスペース内のレジストリにモデルを発行するだけで済みます。 デプロイ対象のモデルが既に登録されている場合は、この手順をスキップできます。

    MODEL_NAME='heart-classifier-mlflow'
    MODEL_PATH='model'
    az ml model create --name $MODEL_NAME --path $MODEL_PATH --type mlflow_model
    

Azure App Service にモデル パッケージをデプロイする

このセクションでは、以前に登録した MLflow モデルをパッケージ化し、Azure App Service にデプロイします。

  1. Azure Machine Learning の外部にモデルをデプロイするには、パッケージ仕様を作成する必要があります。 Azure Machine Learning から完全に切断されたパッケージを作成するには、モデル構成で copy モードを指定します。 copy モードでは、パッケージ内の成果物をコピーするようにパッケージに指示します。 次のコードは、モデル構成のコピー モードを指定する方法を示しています。

    パッケージ YAML 仕様を作成します。

    package-external.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: heart-classifier-mlflow-pkg
    inferencing_server: 
        type: azureml_online
    model_configuration:
        mode: copy
    

    ヒント

    モードのプロパティに copy を使用してモデル構成を指定すると、すべてのモデル成果物が Azure Machine Learning モデル レジストリからダウンロードされるのではなく、生成された Docker イメージ内にコピーされることが保証されるため、Azure Machine Learning の外部での真の移植性を実現できます。 パッケージを作成するときのすべてのオプションに関する完全な仕様については、「パッケージ仕様を作成する」を参照してください。

  2. パッケージ操作を開始します。

    az ml model package --name $MODEL_NAME --version $MODEL_VERSION --file package-external.yml
    
  3. パッケージ操作の結果は、Azure Machine Learning の環境です。 この環境を使用する利点は、各環境に、外部デプロイで使用できる対応する Docker イメージがあることです。 イメージは Azure Container Registry でホストされます。 次の手順では、生成されたイメージの名前を取得する方法を示します。

    1. Azure Machine Learning Studio に移動します。

    2. [環境] セクションを選択します。

    3. [カスタム環境] タブを選択します。

    4. heart-classifier-mlflow-package という名前の環境を探します。これは、先ほど作成したパッケージの名前です。

    5. Azure コンテナー レジストリ フィールドにある値をコピーします。

    Azure Machine Learning スタジオで Azure コンテナー レジストリ イメージ名が表示されるセクションを示すスクリーンショット。

  4. 次に、このパッケージを App Service にデプロイします。

    1. Azure portal にアクセスし、新しい App Service リソースを作成します。

    2. 作成ウィザードで、使用しているサブスクリプションとリソース グループを選択します。

    3. [インスタンスの詳細] セクションで、アプリに名前を付けます。

    4. [発行][Docker コンテナー] を選択します。

    5. [オペレーティング システム][Linux] を選択します。

      生成された Docker コンテナー イメージをデプロイするように App Service を構成する方法を示すスクリーンショット。

    6. 必要に応じてページの残りの部分を構成し、[次へ] を選択します。

    7. [Docker] タブに移動します。

    8. [オプション][単一コンテナー] を選択します。

    9. [イメージ ソース][Azure Container Registry] を選択します。

    10. 次のように Azure コンテナー レジストリ オプションを構成します。

      1. [レジストリ] に、Azure Machine Learning ワークスペースに関連付けられている Azure Container Registry を選択します。

      2. [イメージ] に、このチュートリアルの手順 3(e) で見つけたイメージを選択します。

      3. [タグ][最新] を選択します。

      ウィザードの Docker セクションを示すスクリーンショット。パッケージに関連付けられている Docker イメージが示されています。

    11. 必要に応じて、ウィザードの残りの部分を構成します。

    12. [作成] を選択します これで、作成した App Service にモデルがデプロイされます。

    13. 予測を呼び出して取得する方法は、使用した推論サーバーによって異なります。 この例では、ルート /score の下に予測を作成する Azure Machine Learning 推論サーバーを使用しました。 入力形式と機能の詳細については、azureml-inference-server-http パッケージの詳細を参照してください。

    14. 要求ペイロードを準備します。 Azure Machine Learning 推論サーバーと共にデプロイされる MLflow モデルの形式は次のとおりです。

      sample-request.json

      {
          "input_data": {
              "columns": [
                  "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
              ],
              "index": [1],
              "data": [
                  [1, 1, 4, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
              ]
          }
      }
      
    15. モデル デプロイをテストして、動作するかどうかを確認します。

      cat -A sample-request.json | curl http://heart-classifier-mlflow-pkg.azurewebsites.net/score \
          --request POST \
          --header 'Content-Type: application/json' \
          --data-binary @-
      

次のステップ