機械学習モデルを Azure にデプロイするDeploy machine learning models to Azure

機械学習またはディープ ラーニング モデルを Web サービスとして Azure クラウドにデプロイする方法について説明します。Learn how to deploy your machine learning or deep learning model as a web service in the Azure cloud. また、Azure IoT Edge デバイスにデプロイすることもできます。You can also deploy to Azure IoT Edge devices.

モデルをどこにデプロイするかに関係なく、ワークフローは同様です。The workflow is similar no matter where you deploy your model:

  1. モデルを登録します (省略可能、下記参照)。Register the model (optional, see below).
  2. 推論構成を準備します (コードなしのデプロイを使用する場合を除く)。Prepare an inference configuration (unless using no-code deployment).
  3. エントリ スクリプトを準備します (コードなしのデプロイを使用する場合を除く)。Prepare an entry script (unless using no-code deployment).
  4. コンピューティング ターゲットを選択します。Choose a compute target.
  5. モデルをコンピューティング ターゲットにデプロイします。Deploy the model to the compute target.
  6. 結果の Web サービスをテストします。Test the resulting web service.

機械学習デプロイ ワークフローに関連する概念の詳細については、Azure Machine Learning でのモデルの管理、デプロイ、監視に関する記事を参照してください。For more information on the concepts involved in the machine learning deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

前提条件Prerequisites

ワークスペースに接続するConnect to your workspace

サブスクリプション コンテキストの設定に関する Azure CLI ドキュメントに記載されている手順に従います。Follow the directions in the Azure CLI documentation for setting your subscription context.

その後、次の操作を行います。Then do:

az ml workspace list --resource-group=<my resource group>

アクセス権のあるワークスペースを表示します。to see the workspaces you have access to.

モデルを登録する (省略可能)Register your model (optional)

登録済みモデルは、モデルを構成する 1 つまたは複数のファイルの論理コンテナーです。A registered model is a logical container for one or more files that make up your model. たとえば、複数のファイルに格納されているモデルがある場合は、ワークスペースに単一モデルとしてそれらを登録できます。For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. ファイルの登録後は、その登録済みモデルをダウンロードするかデプロイし、登録されたすべてのファイルを受信できます。After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

ヒント

バージョンを追跡するためにモデルを登録することをお勧めしますが、必須ではありません。Registering a model for version tracking is recommended but not required. モデルを登録しないで続行する場合は、InferenceConfig または InferenceConfig でソース ディレクトリを指定し、確実にそのソース ディレクトリ内にモデルが存在するようにする必要があります。If you would rather proceed without registering a model, you will need to specify a source directory in your InferenceConfig or inferenceconfig.json and ensure your model resides within that source directory.

ヒント

モデルを登録するときは、(トレーニングの実行から) クラウドの場所またはローカル ディレクトリのパスを指定します。When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. このパスは、登録プロセスの一部としてアップロードするファイルを見つけるためだけのものです。This path is just to locate the files for upload as part of the registration process. エントリ スクリプトで使用されるパスと一致する必要はありません。It doesn't need to match the path used in the entry script. 詳細については、「エントリ スクリプトでモデル ファイルを検索する」を参照してください。For more information, see Locate model files in your entry script.

重要

Azure Machine Learning スタジオの [モデル] ページの [Tags でフィルター] オプションを使用するとき、お客様は TagName : TagValue を使用するのではなく、TagName=TagValue を (スペースなしで) 使用してください。When using Filter by Tags option on the Models page of Azure Machine Learning Studio, instead of using TagName : TagValue customers should use TagName=TagValue (without space)

次の例では、モデルを登録する方法を示します。The following examples demonstrate how to register a model.

Azure ML トレーニングの実行からモデルを登録するRegister a model from an Azure ML training run

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --run-id myrunid --tag area=mnist

ヒント

ml 拡張機能がインストールされていないというエラー メッセージを受け取った場合は、次のコマンドを使用してインストールしてください。If you get an error message stating that the ml extension isn't installed, use the following command to install it:

az extension add -n azure-cli-ml

--asset-path パラメーターは、クラウドでのモデルの場所を示します。The --asset-path parameter refers to the cloud location of the model. この例では、1 つのファイルへのパスが使用されます。In this example, the path of a single file is used. モデルの登録に複数のファイルを含めるには、--asset-path を、それらのファイルが含まれているフォルダーのパスに設定します。To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

ローカル ファイルからモデルを登録するRegister a model from a local file

az ml model register -n onnx_mnist -p mnist/model.onnx

モデルの登録に複数のファイルを含めるには、-p を、それらのファイルが含まれているフォルダーのパスに設定します。To include multiple files in the model registration, set -p to the path of a folder that contains the files.

az ml model register に関する詳細については、リファレンス ドキュメントを参照してください。For more information on az ml model register, consult the reference documentation.

エントリ スクリプトを定義するDefine an entry script

エントリ スクリプトは、デプロイされた Web サービスに送信されたデータを受け取り、それをモデルに渡します。The entry script receives data submitted to a deployed web service and passes it to the model. 次に、モデルから返された応答を受け取り、それをクライアントに返します。It then takes the response returned by the model and returns that to the client. このスクリプトはこのモデルに固有のものですThe script is specific to your model. そのため、モデルが受け入れ、返すデータを認識する必要があります。It must understand the data that the model expects and returns.

エントリ スクリプトでは、次の 2 つの処理を実行する必要があります。The two things you need to accomplish in your entry script are:

  1. モデルの読み込み (init() という関数を使用)Loading your model (using a function called init())
  2. 入力データでのモデルの実行 (run() という関数を使用)Running your model on input data (using a function called run())

それでは、これらの手順を詳しく見ていきましょう。Let's go through these steps in detail.

init() の記述Writing init()

登録済みのモデルの読み込みLoading a registered model

登録済みのモデルは、AZUREML_MODEL_DIR という環境変数が指すパスに格納されます。Your registered models are stored at a path pointed to by an environment variable called AZUREML_MODEL_DIR. 正確なディレクトリ構造の詳細については、「エントリ スクリプトでモデル ファイルを検索する」をご覧ください。For more information on the exact directory structure, see Locate model files in your entry script

ローカル モデルの読み込みLoading a local model

モデルを登録せず、モデルをソース ディレクトリの一部として受け渡すことを選択した場合は、スコアリング スクリプトからモデルへの相対パスを渡すことによって、ローカルで行うのと同様にそのモデルを読み取ることができます。If you opted against registering your model and passed your model as part of your source directory, you can read it in like you would locally, by passing the path to the model relative to your scoring script. たとえば、ディレクトリが次のように構成されているとします。For example, if you had a directory structured as:


- source_dir
    - score.py
    - models
        - model1.onnx

次の Python コードを使用して、モデルを読み込むことができます。you could load your models with the following Python code:

import os

model = open(os.path.join('.', 'models', 'model1.onnx'))

run() の書き込みWriting run()

モデルがスコアリング要求を受信するたびに run() が実行されます。要求の本文は次の構造を持つ JSON ドキュメントであることが想定されます。run() is executed every time your model receives a scoring request, and expects the body of the request to be a JSON document with the following structure:

{
    "data": <model-specific-data-structure>
}

run() への入力は、"data" キーの後に何かが続く Python 文字列です。The input to run() is a Python string containing whatever follows the "data" key.

次の例は、登録された scikit-learn モデルを読み込み、それを numpy データでスコア付けする方法を示しています。The following example demonstrates how to load a registered scikit-learn model and score it with numpy data:

import json
import numpy as np
import os
from sklearn.externals import joblib


def init():
    global model
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(data):
    try:
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Automatic Swagger スキーマ生成とバイナリ (イメージ) データを含む、より高度な例については、「高度なエントリ スクリプトの作成」の記事をご覧ください。For more advanced examples, including automatic Swagger schema generation and binary (i.e. image) data, read the article on advanced entry script authoring

推論構成を定義するDefine an inference configuration

推論構成では、モデルを含む Web サービスを設定する方法を示します。An inference configuration describes how to set up the web-service containing your model. これは後でモデルをデプロイするときに使用されます。It's used later, when you deploy the model.

最小限の推論構成は、次のように記述することができます。A minimal inference configuration can be written as:

{
    "entryScript": "score.py",
    "sourceDirectory": "./working_dir"
}

これにより、受信要求を処理するために、機械学習デプロイで ./working_dir ディレクトリ内のファイル score.py が使用されることが指定されます。This specifies that the machine learning deployment will use the file score.py in the ./working_dir directory to process incoming requests.

推論構成に関する詳細な説明については、こちらの記事を参照してください。See this article for a more thorough discussion of inference configurations.

ヒント

推論構成を利用したカスタム Docker イメージの使用については、カスタム Docker イメージを使用してモデルをデプロイする方法に関するページを参照してください。For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

コンピューティング ターゲットを選択するChoose a compute target

モデルをホストするために使用するコンピューティング先は、デプロイされているエンドポイントのコストと可用性に影響を及ぼします。The compute target you use to host your model will affect the cost and availability of your deployed endpoint. 次のテーブルを使用して、適切なコンピューティング先を選択します。Use this table to choose an appropriate compute target.

コンピューティング ターゲットCompute target 使用目的Used for GPU のサポートGPU support FPGA のサポートFPGA support 説明Description
ローカル  Web  サービスLocal web service テスト/デバッグTesting/debugging     制限付きのテストとトラブルシューティングに使用。Use for limited testing and troubleshooting. ハードウェア アクセラレーションは、ローカル システムでのライブラリの使用に依存します。Hardware acceleration depends on use of libraries in the local system.
Azure Kubernetes Service (AKS)Azure Kubernetes Service (AKS) リアルタイムの推論Real-time inference はい (Web サービスのデプロイ)Yes (web service deployment) はいYes 高スケールの運用デプロイに使用。Use for high-scale production deployments. 高速な応答時間と、デプロイされたサービスの自動スケールを提供します。Provides fast response time and autoscaling of the deployed service. Azure Machine Learning SDK では、クラスターの自動スケールはサポートされていません。Cluster autoscaling isn't supported through the Azure Machine Learning SDK. AKS クラスター内のノードを変更するには、Azure portal でお使いの AKS クラスター用の UI を使用します。To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal.

デザイナーでサポートされています。Supported in the designer.
Azure Container InstancesAzure Container Instances テストまたは開発Testing or development     必要な RAM が 48 GB より少ない低スケール CPU ベース ワークロードに使用。Use for low-scale CPU-based workloads that require less than 48 GB of RAM.

デザイナーでサポートされています。Supported in the designer.
Azure Machine Learning コンピューティング クラスターAzure Machine Learning compute clusters バッチ推論 Batch inference はい (機械学習パイプライン)Yes (machine learning pipeline)   サーバーレス コンピューティングでバッチ スコアリングを実行します。Run batch scoring on serverless compute. 優先順位が中程度または低い VM をサポートします。Supports normal and low-priority VMs. リアルタイムの推論はサポートされていません。No support for realtime inference.

注意

ローカル、Azure Machine Learning コンピューティング、Azure Machine Learning コンピューティング クラスターなどのコンピューティング先は、トレーニングと実験のために GPU をサポートしていますが、"Web サービスとしてデプロイされる場合" に GPU を推論に使用することは、AKS でのみサポートされています。Although compute targets like local, Azure Machine Learning compute, and Azure Machine Learning compute clusters support GPU for training and experimentation, using GPU for inference when deployed as a web service is supported only on AKS.

"機械学習パイプラインでスコアリングする場合" に GPU を推論に使用することは、Azure Machine Learning コンピューティングでのみサポートされています。Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning compute.

クラスター SKU を選択する場合は、まずスケールアップしてからスケールアウトします。モデルで必要とされる RAM の 150% が搭載されたマシンから始め、結果をプロファイルして、必要なパフォーマンスを備えたマシンを見つけます。When choosing a cluster SKU, first scale up and then scale out. Start with a machine that has 150% of the RAM your model requires, profile the result and find a machine that has the performance you need. これについて学習した後は、同時推定のニーズに合うようにマシンの数を増やします。Once you've learned that, increase the number of machines to fit your need for concurrent inference.

注意

  • コンテナー インスタンスが適しているのは、サイズが 1 GB 未満の小さいモデルのみです。Container instances are suitable only for small models less than 1 GB in size.
  • より大きいモデルの開発およびテストには、単一ノードの AKS クラスターを使用します。Use single-node AKS clusters for dev/test of larger models.

デプロイ構成を定義するDefine a deployment configuration

デプロイ構成で使用できるオプションは、選択するコンピューティング ターゲットによって異なります。The options available for a deployment configuration differ depending on the compute target you choose.

deploymentconfig.json ドキュメントのエントリは、LocalWebservice.deploy_configuration のパラメーターにマッピングされます。The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. 次の表は、JSON ドキュメントのエントリとメソッド用パラメーターの間のマッピングについてまとめたものです。The following table describes the mapping between the entities in the JSON document and the parameters for the method:

JSON エンティティJSON entity メソッド パラメーターMethod parameter 説明Description
computeType NANA コンピューティング ターゲット。The compute target. ローカル ターゲットの場合、値は local である必要があります。For local targets, the value must be local.
port port サービスの HTTP エンドポイントを公開するローカル ポート。The local port on which to expose the service's HTTP endpoint.

この JSON は、CLI で使用するデプロイ構成の例です。This JSON is an example deployment configuration for use with the CLI:

{
    "computeType": "local",
    "port": 32267
}

詳細については、こちらのリファレンスを参照してください。For more information, see this reference.

機械学習モデルをデプロイするDeploy your machine learning model

これでモデルをデプロイする準備が整いました。You are now ready to deploy your model.

登録済みのモデルの使用Using a registered model

Azure Machine Learning ワークスペースにモデルを登録した場合は、"mymodel:1" を、モデルの名前とそのバージョン番号に置き換えます。If you registered your model in your Azure Machine Learning workspace, replace "mymodel:1" with the name of your model and its version number.

az ml model deploy -m mymodel:1 --ic inferenceconfig.json --dc deploymentconfig.json

ローカル モデルの使用Using a local model

モデルを登録しない場合は、inferenceconfig.json に "sourceDirectory" パラメーターを渡して、モデルの提供元となるローカル ディレクトリを指定します。If you would prefer not to register your model, you can pass the "sourceDirectory" parameter in your inferenceconfig.json to specify a local directory from which to serve your model.

az ml model deploy --ic inferenceconfig.json --dc deploymentconfig.json

サービスの状態についてUnderstanding service state

モデルのデプロイ中に、完全にデプロイされるまでの間に、サービスの状態が変化することがあります。During model deployment, you may see the service state change while it fully deploys.

次の表で、サービスの各状態について説明します。The following table describes the different service states:

Web サービスの状態Webservice state 説明Description 最終的な状態Final state?
移行中Transitioning サービスはデプロイ処理中です。The service is in the process of deployment. いいえNo
異常Unhealthy サービスはデプロイされましたが、現在アクセスできません。The service has deployed but is currently unreachable. いいえNo
スケジュール不可Unschedulable リソースが不足しているため、現時点ではサービスをデプロイできません。The service cannot be deployed at this time due to lack of resources. いいえNo
失敗Failed エラーまたはクラッシュが発生したため、サービスをデプロイできませんでした。The service has failed to deploy due to an error or crash. はいYes
HealthyHealthy サービスは正常であり、エンドポイントを使用できます。The service is healthy and the endpoint is available. はいYes

ヒント

デプロイ時に、コンピューティング ターゲットの Docker イメージが構築され、Azure Container Registry (ACR) から読み込まれます。When deploying, Docker images for compute targets are built and loaded from Azure Container Registry (ACR). 既定では、Azure Machine Learning により、basic サービス レベルを使用する ACR が作成されます。By default, Azure Machine Learning creates an ACR that uses the basic service tier. ワークスペースの ACR を standard レベルまたは premium レベルに変更すると、イメージを構築してコンピューティング ターゲットにデプロイするための時間を短縮することができます。Changing the ACR for your workspace to standard or premium tier may reduce the time it takes to build and deploy images to your compute targets. 詳細については、「Azure Container Registry サービス階層」を参照してください。For more information, see Azure Container Registry service tiers.

注意

Azure Kubernetes Service (AKS) にモデルをデプロイする場合は、そのクラスターで Azure Monitor を有効にすることをお勧めします。If you are deploying a model to Azure Kubernetes Service (AKS), we advise you enable Azure Monitor for that cluster. これは、全体的なクラスターの正常性とリソースの使用状況を把握するのに役立ちます。This will help you understand overall cluster health and resource usage. また、次のリソースも役立つ場合があります。You might also find the following resources useful:

異常または過負荷のクラスターにモデルをデプロイしようとすると、問題が発生することが予想されます。If you are trying to deploy a model to an unhealthy or overloaded cluster, it is expected to experience issues. AKS クラスターでの問題のトラブルシューティングに関するヘルプが必要な場合は、AKS サポートにお問い合わせください。If you need help troubleshooting AKS cluster problems please contact AKS Support.

バッチ推論Batch inference

Azure Machine Learning のコンピューティング先は、Azure Machine Learning によって作成され、管理されます。Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. これは Azure Machine Learning パイプラインからのバッチ予測に使用できます。They can be used for batch prediction from Azure Machine Learning pipelines.

Azure Machine Learning コンピューティングを使用したバッチ推論のチュートリアルについては、バッチ予測を実行する方法に関するページを参照してください。For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

IoT Edge の推論IoT Edge inference

エッジにデプロイするためのサポートは現在、プレビューの段階にあります。Support for deploying to the edge is in preview. 詳細については、IoT Edge モジュールとしての Azure Machine Learning のデプロイに関する記事を参照してください。For more information, see Deploy Azure Machine Learning as an IoT Edge module.

リソースを削除するDelete resources

デプロイされた Web サービスを削除するには、az ml service <name of webservice> を使用します。To delete a deployed webservice, use az ml service <name of webservice>.

ワークスペースから登録済みのモデルを削除するには、az ml model delete <model id> を使用します。To delete a registered model from your workspace, use az ml model delete <model id>

Web サービスの削除モデルの削除に関する詳細を確認してください。Read more about deleting a webservice and deleting a model.

次のステップNext steps