Azure Machine Learning を使用してモデルをデプロイするDeploy models with Azure Machine Learning

適用先: 有効Basic エディション 有効Enterprise エディション                    (Enterprise エディションにアップグレード)APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

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

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

  1. モデルを登録します。Register the model.
  2. デプロイの準備をします。Prepare to deploy. (アセット、用途、コンピューティング ターゲットを指定する)。(Specify assets, usage, compute target.)
  3. コンピューティング ターゲットにモデルをデプロイします。Deploy the model to the compute target.
  4. デプロイしたモデル (Web サービスとも呼ばれる) をテストします。Test the deployed model, also called a web service.

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

前提条件Prerequisites

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

次のコードでは、ローカル開発環境にキャッシュされた情報を使用して Azure Machine Learning ワークスペースに接続する方法を示します。The following code shows how to connect to an Azure Machine Learning workspace by using information cached to the local development environment:

  • SDK を使用するUsing the SDK

    from azureml.core import Workspace
    ws = Workspace.from_config(path=".file-path/ws_config.json")
    

    SDK を使用してワークスペースに接続する方法の詳細については、Azure Machine Learning SDK for Python のドキュメントをご覧ください。For more information on using the SDK to connect to a workspace, see the Azure Machine Learning SDK for Python documentation.

  • CLI を使用するUsing the CLI

    CLI を使用するときは、-w パラメーターまたは --workspace-name パラメーターを使用して、コマンドのワークスペースを指定します。When using the CLI, use the -w or --workspace-name parameter to specify the workspace for the command.

  • Visual Studio Code の使用Using Visual Studio Code

    Visual Studio Code を使用する場合は、グラフィカル インターフェイスを使用してワークスペースを選択します。When you use Visual Studio Code, you select the workspace by using a graphical interface. 詳しくは、Visual Studio Code 拡張機能のドキュメントの「モデルを展開して管理する」をご覧ください。For more information, see Deploy and manage models in the Visual Studio Code extension documentation.

モデルを登録するRegister your model

登録済みモデルは、モデルを構成する 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.

ヒント

モデルを登録するときは、(トレーニングの実行から) クラウドの場所またはローカル ディレクトリのパスを指定します。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 ワークスペースに登録します。Machine learning models are registered in your Azure Machine Learning workspace. これらのモデルは、Azure Machine Learning から取得することも、どこか他の場所から取得することもできます。The model can come from Azure Machine Learning or from somewhere else. モデルを登録するときに、必要に応じてモデルに関するメタデータを提供できます。When registering a model, you can optionally provide metadata about the model. その後、モデル登録に適用する tags および properties 辞書を使用して、モデルをフィルター処理できます。The tags and properties dictionaries that you apply to a model registration can then be used to filter models.

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

実験の実行からモデルを登録するRegister a model from an experiment run

このセクションのコード スニペットでは、トレーニング実行からモデルを登録する方法が示されています。The code snippets in this section demonstrate how to register a model from a training run:

重要

これらのスニペットを使用するには、以前にトレーニング実行を行ったことがあり、Run オブジェクト (SDK の例) または実行 ID の値 (CLI の例) にアクセスできることが必要です。To use these snippets, you need to have previously performed a training run and you need to have access to the Run object (SDK example) or the run ID value (CLI example). トレーニング モデルの詳細については、モデルのトレーニング用のコンピューティング先の設定に関する記事をご覧ください。For more information on training models, see Set up compute targets for model training.

  • SDK を使用するUsing the SDK

    SDK を使用してモデルをトレーニングする場合、モデルのトレーニング方法に応じて、Run オブジェクトまたは AutoMLRun オブジェクトのいずれかを受け取ることができます。When you use the SDK to train a model, you can receive either a Run object or an AutoMLRun object, depending on how you trained the model. 各オブジェクトは、実験の実行によって作成されたモデルを登録するために使用できます。Each object can be used to register a model created by an experiment run.

    • azureml.core.Run オブジェクトからモデルを登録するRegister a model from an azureml.core.Run object:

      model = run.register_model(model_name='sklearn_mnist',
                                 tags={'area': 'mnist'},
                                 model_path='outputs/sklearn_mnist_model.pkl')
      print(model.name, model.id, model.version, sep='\t')
      

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

    • azureml.train.automl.run.AutoMLRun オブジェクトからモデルを登録するRegister a model from an azureml.train.automl.run.AutoMLRun object:

          description = 'My AutoML Model'
          model = run.register_model(description = description,
                                     tags={'area': 'mnist'})
      
          print(run.model_id)
      

      この例では、metric パラメーターと iteration パラメーターが指定されていません。これにより、最適なプライマリ メトリックを持つイテレーションが登録されます。In this example, the metric and iteration parameters aren't specified, so the iteration with the best primary metric will be registered. 実行から返された model_id 値がモデル名の代わりに使用されます。The model_id value returned from the run is used instead of a model name.

      詳細については、AutoMLRun.register_model のドキュメントを参照してください。For more information, see the AutoMLRun.register_model documentation.

  • CLI を使用するUsing the CLI

    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.

  • Visual Studio Code の使用Using Visual Studio Code

    Visual Studio Code 拡張機能を使用して、任意のモデル ファイルまたはフォルダーを使用してモデルを登録します。Register models using any model files or folders by using the Visual Studio Code extension.

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

モデルのローカル パスを指定することで、モデルを登録できます。You can register a model by providing the local path of the model. フォルダーまたは 1 個のファイルのパスのいずれかを指定できます。You can provide the path of either a folder or a single file. この方法を使用すると、Azure Machine Learning でトレーニングされてからダウンロードされたモデルを登録できます。You can use this method to register models trained with Azure Machine Learning and then downloaded. この方法を使用して、Azure Machine Learning の外部でトレーニングされたモデルを登録することもできます。You can also use this method to register models trained outside of Azure Machine Learning.

重要

自分で作成したモデルまたは信頼できるソースから取得したモデルのみを使用する必要があります。You should use only models that you create or obtain from a trusted source. 多数の一般的な形式でセキュリティの脆弱性が発見されているため、シリアル化されたモデルはコードとして扱う必要があります。You should treat serialized models as code, because security vulnerabilities have been discovered in a number of popular formats. また、偏りのある出力や不正確な出力を提供するように、モデルが悪意のある目的で意図的にトレーニングされる場合もあります。Also, models might be intentionally trained with malicious intent to provide biased or inaccurate output.

  • SDK と ONNX の使用Using the SDK and ONNX

    import os
    import urllib.request
    from azureml.core.model import Model
    # Download model
    onnx_model_url = "https://www.cntk.ai/OnnxModels/mnist/opset_7/mnist.tar.gz"
    urllib.request.urlretrieve(onnx_model_url, filename="mnist.tar.gz")
    os.system('tar xvzf mnist.tar.gz')
    # Register model
    model = Model.register(workspace = ws,
                            model_path ="mnist/model.onnx",
                            model_name = "onnx_mnist",
                            tags = {"onnx": "demo"},
                            description = "MNIST image classification CNN from ONNX Model Zoo",)
    

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

  • CLI を使用するUsing the CLI

    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.

推定所要時間: 約 10 秒。Time estimate: Approximately 10 seconds.

詳細については、Model クラスのドキュメントを参照してください。For more information, see the documentation for the Model class.

Azure Machine Learning 以外でトレーニングされたモデルの使用の詳細については、既存のモデルをデプロイする方法に関する記事を参照してください。For more information on working with models trained outside Azure Machine Learning, see How to deploy an existing model.

シングルモデルエンドポイントとマルチモデルエンドポイントSingle versus multi-model endpoints

Azure ML は、1つのエンドポイントの背後に シングルまたはマルチモデルのデプロイをサポートしています。Azure ML supports deploying single or multiple models behind a single endpoint.

マルチモデルエンドポイントは、共有コンテナーを使用して複数モデルをホストします。Multi-model endpoints use a shared container to host multiple models. これにより、オーバーヘッドコストを削減し、使用率を向上させ、複数のモジュールをアンサンブルとしてチェーンすることができます。This helps to reduce overhead costs, improves utilization, and enables you to chain modules together into ensembles. デプロイ スクリプトで指定したモデルはマウントされ、サービスを提供するコンテナーのディスクで使用できるようになります。必要に応じてメモリに読み込んで、スコアリング時に要求されている特定のモデルに基づいてスコア付けすることができます。Models you specify in your deployment script are mounted and made available on the disk of the serving container - you can load them into memory on demand and score based on the specific model being requested at scoring time.

1 つのコンテナー化されたエンドポイントの背後にある複数モデルの使用方法を示す E2E の例としては、こちらの例を参照してください。For an E2E example, which shows how to use multiple models behind a single containerized endpoint, see this example

デプロイを準備するPrepare to deploy

モデルをサービスとしてデプロイするには、次のコンポーネントが必要です。To deploy the model as a service, you need the following components:

  • 推論環境を定義しますDefine inference environment. この環境は、推論用モデルを実行するために必要な依存関係をカプセル化します。This environment encapsulates the dependencies required to run your model for inference.
  • スコアリング コードを定義しますDefine scoring code. このスクリプトは、要求を受け入れ、モデルを使用してその要求にスコアを付け、その結果を返します。This script accepts requests, scores the requests by using the model, and returns the results.
  • 推論構成を定義しますDefine inference configuration. 推論構成では、サービスとしてのモデルを実行するために必要な環境構成、エントリ スクリプト、およびその他のコンポーネントを指定します。The inference configuration specifies the environment configuration, entry script, and other components needed to run the model as a service.

必要なコンポーネントを用意したら、に、モデルをデプロイした結果として作成されるサービスをプロファイルして、CPU とメモリの要件を把握できます。Once you have the necessary components, you can profile the service that will be created as a result of deploying your model to understand its CPU and memory requirements.

1.推論環境の定義1. Define inference environment

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

推論構成は Azure Machine Learning 環境を使用して、デプロイに必要なソフトウェアの依存関係を定義します。Inference configuration uses Azure Machine Learning environments to define the software dependencies needed for your deployment. 環境では、トレーニングとデプロイに必要なソフトウェアの依存関係を作成、管理、再利用することができます。Environments allow you to create, manage, and reuse the software dependencies required for training and deployment. カスタム依存関係ファイルから環境を作成するか、またはキュレートされた Azure Machine Learning 環境のいずれかを使用できます。You can create an environment from custom dependency files or use one of the curated Azure Machine Learning environments. 次の YAML は、推論のための Conda 依存関係ファイルの例です。The following YAML is an example of a Conda dependencies file for inference. バージョン 1.0.45 以上では、pip の依存関係として、azureml-defaults を指定する必要があることに注意してください。これは、モデルを Web サービスとしてホストするために必要な機能が含まれているためです。Note that you must indicate azureml-defaults with verion >= 1.0.45 as a pip dependency, because it contains the functionality needed to host the model as a web service. また、自動スキーマ生成を使用する場合、エントリ スクリプトでは inference-schema パッケージをインポートする必要もあります。If you want to use automatic schema generation, your entry script must also import the inference-schema packages.

name: project_environment
dependencies:
  - python=3.6.2
  - scikit-learn=0.20.0
  - pip:
      # You must list azureml-defaults as a pip dependency
    - azureml-defaults>=1.0.45
    - inference-schema[numpy-support]

重要

依存関係が Conda と pip (PyPi から) の両方で利用できる場合、Conda パッケージには通常、インストールの信頼性を高めるビルド済みのバイナリが付属しているため、Conda バージョンを使用することをお勧めします。If your dependency is available through both Conda and pip (from PyPi), Microsoft recommends using the Conda version, as Conda packages typically come with pre-built binaries that make installation more reliable.

詳細については、「Conda と Pip について」を参照してください。For more information, see Understanding Conda and Pip.

依存関係が Conda を介して使用可能かどうかを確認するには、conda search <package-name> コマンドを使用するか、https://anaconda.org/anaconda/repo および https://anaconda.org/conda-forge/repo でパッケージ インデックスを使用します。To check if your dependency is available through Conda, use the conda search <package-name> command, or use the package indexes at https://anaconda.org/anaconda/repo and https://anaconda.org/conda-forge/repo.

依存関係ファイルを使用して環境オブジェクトを作成して、後で使用するためにワークスペースに保存することができます。You can use the dependencies file to create an environment object and save it to your workspace for future use:

from azureml.core.environment import Environment
myenv = Environment.from_conda_specification(name = 'myenv',
                                             file_path = 'path-to-conda-specification-file'
myenv.register(workspace=ws)

2.スコアリング コードの定義2. Define scoring code

エントリ スクリプトは、デプロイされた 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 script contains two functions that load and run the model:

  • init():通常は、この関数によってモデルがグローバル オブジェクトに読み込まれます。init(): Typically, this function loads the model into a global object. この関数は、Web サービスの Docker コンテナーの起動時に 1 回だけ実行されます。This function is run only once, when the Docker container for your web service is started.

  • run(input_data):この関数では、モデルを使用して、入力データに基づいて値が予測されます。run(input_data): This function uses the model to predict a value based on the input data. 実行の入力と出力は、通常、JSON を使用してシリアル化およびシリアル化解除が実行されます。Inputs and outputs of the run typically use JSON for serialization and deserialization. また、未加工のバイナリ データも使用できます。You can also work with raw binary data. モデルに送信する前、またはクライアントに返す前のデータを変換できます。You can transform the data before sending it to the model or before returning it to the client.

エントリ スクリプトでモデル ファイルを読み込むLoad model files in your entry script

エントリ スクリプトでモデルを検索するには、次の 2 つの方法があります。There are two ways to locate models in your entry script:

  • AZUREML_MODEL_DIR:モデルの場所へのパスを含む環境変数。AZUREML_MODEL_DIR: An environment variable containing the path to the model location.
  • Model.get_model_path:登録されているモデル名を使用してモデル ファイルへのパスを返す API。Model.get_model_path: An API that returns the path to model file using the registered model name.
AZUREML_MODEL_DIRAZUREML_MODEL_DIR

AZUREML_MODEL_DIR は、サービスのデプロイ中に作成される環境変数です。AZUREML_MODEL_DIR is an environment variable created during service deployment. この環境変数を使用して、デプロイされたモデルの場所を見つけることができます。You can use this environment variable to find the location of the deployed model(s).

次の表では、デプロイされるモデルの数に応じて、AZUREML_MODEL_DIR の値について説明します。The following table describes the value of AZUREML_MODEL_DIR depending on the number of models deployed:

デプロイDeployment 環境変数の値Environment variable value
単一モデルSingle model モデルを含むフォルダーへのパス。The path to the folder containing the model.
複数のモデルMultiple models すべてのモデルを含むフォルダーへのパス。The path to the folder containing all models. モデルは、このフォルダー ($MODEL_NAME/$VERSION) で名前とバージョンによって検索されますModels are located by name and version in this folder ($MODEL_NAME/$VERSION)

モデルの登録とデプロイ中、モデルは AZUREML_MODEL_DIR パスに配置され、元のファイル名が保持されます。During model registration and deployment, Models are placed in the AZUREML_MODEL_DIR path, and their original filenames are preserved.

エントリ スクリプト内のモデル ファイルへのパスを取得するには、環境変数と探しているファイル名を組み合わせます。To get the path to a model file in your entry script, combine the environment variable with the file path you're looking for.

単一モデルの例Single model example

# Example when the model is a file
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_regression_model.pkl')

# Example when the model is a folder containing a file
file_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'my_model_folder', 'sklearn_regression_model.pkl')

複数のモデルの例Multiple model example

# Example when the model is a file, and the deployment contains multiple models
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_model', '1', 'sklearn_regression_model.pkl')
get_model_pathget_model_path

モデルを登録するときに、レジストリ内のモデルを管理するために使用されるモデル名を指定します。When you register a model, you provide a model name that's used for managing the model in the registry. この名前は、ローカル ファイル システム上のモデル ファイルのパスを取得する Model.get_model_path() メソッドで使用します。You use this name with the Model.get_model_path() method to retrieve the path of the model file or files on the local file system. フォルダーまたはファイルのコレクションを登録した場合、この API では、これらのファイルを含むディレクトリのパスが返されます。If you register a folder or a collection of files, this API returns the path of the directory that contains those files.

モデルを登録する場合は名前を指定します。When you register a model, you give it a name. この名前は、モデルがローカルにデプロイされるか、またはサービスのデプロイ時に配置されるときの場所に対応します。The name corresponds to where the model is placed, either locally or during service deployment.

(オプション) モデルの Web サービスのスキーマを定義する(Optional) Define model web service schema

Web サービスのスキーマを自動生成するには、定義された型オブジェクトのいずれかのコンストラクターに入力や出力のサンプルを指定します。To automatically generate a schema for your web service, provide a sample of the input and/or output in the constructor for one of the defined type objects. 型とサンプルはスキーマを自動作成するために使用されます。The type and sample are used to automatically create the schema. その後、Azure Machine Learning によって、デプロイ中に、Web サービスの OpenAPI (Swagger) 仕様が作成されます。Azure Machine Learning then creates an OpenAPI (Swagger) specification for the web service during deployment.

現在サポートされている型は次のとおりです。These types are currently supported:

  • pandas
  • numpy
  • pyspark
  • 標準的な Python オブジェクトStandard Python object

スキーマ生成を使用するには、オープンソースの inference-schema パッケージを依存関係ファイルに含めます。To use schema generation, include the open-source inference-schema package in your dependencies file. このパッケージの詳細については、https://github.com/Azure/InferenceSchema を参照してください。For more information on this package, see https://github.com/Azure/InferenceSchema. 変数 input_sampleoutput_sample で入力と出力のサンプル形式を定義します。これは Web サービスの要求と応答の形式を表します。Define the input and output sample formats in the input_sample and output_sample variables, which represent the request and response formats for the web service. これらのサンプルを、run() 関数の入力と出力の関数デコレーターで使用します。Use these samples in the input and output function decorators on the run() function. 下の scikit-learn の例では、スキーマ生成が使用されています。The following scikit-learn example uses schema generation.

エントリ スクリプトの例Example entry script

次の例では、JSON データを受け取り、返す方法が示されています。The following example demonstrates how to accept and return JSON data:

#Example: scikit-learn and Swagger
import json
import numpy as np
import os
from sklearn.externals import joblib
from sklearn.linear_model import Ridge

from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType


def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment. Join this path with the filename of the model file.
    # It holds the path to the directory that contains the deployed model (./azureml-models/$MODEL_NAME/$VERSION).
    # If there are multiple models, this value is the path to the directory containing all deployed models (./azureml-models).
    # Alternatively: model_path = Model.get_model_path('sklearn_mnist')
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    # Deserialize the model file back into a sklearn model
    model = joblib.load(model_path)


input_sample = np.array([[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]])
output_sample = np.array([3726.995])


@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        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

次の例では、DataFrame を使用して、<key: value> ディクショナリとして入力データを定義する方法を示しています。The following example demonstrates how to define the input data as a <key: value> dictionary by using a DataFrame. このメソッドは、Power BI からデプロイされた Web サービスを使用するためにサポートされています。This method is supported for consuming the deployed web service from Power BI. (詳細については、Power BI から Web サービスを使用する方法に関するページを参照してください。)(Learn more about how to consume the web service from Power BI.)

import json
import pickle
import numpy as np
import pandas as pd
import azureml.train.automl
from sklearn.externals import joblib
from azureml.core.model import Model

from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType
from inference_schema.parameter_types.pandas_parameter_type import PandasParameterType


def init():
    global model
    # Replace filename if needed.
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model_file.pkl')
    # Deserialize the model file back into a sklearn model.
    model = joblib.load(model_path)


input_sample = pd.DataFrame(data=[{
    # This is a decimal type sample. Use the data type that reflects this column in your data.
    "input_name_1": 5.1,
    # This is a string type sample. Use the data type that reflects this column in your data.
    "input_name_2": "value2",
    # This is an integer type sample. Use the data type that reflects this column in your data.
    "input_name_3": 3
}])

# This is an integer type sample. Use the data type that reflects the expected result.
output_sample = np.array([0])


@input_schema('data', PandasParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        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

他の例については、次のスクリプトをご覧ください。For more examples, see the following scripts:

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

次の例で、ワークスペースから環境を読み込み、推論構成でそれを使用する方法を示します。The following example demonstrates loading an environment from your workspace and then using it with the inference configuration:

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig


myenv = Environment.get(workspace=ws, name='myenv', version='1')
inference_config = InferenceConfig(entry_script='path-to-score.py',
                                   environment=myenv)

環境の詳細については、トレーニングとデプロイのための環境の作成と管理に関する記事を参照してください。For more information on environments, see Create and manage environments for training and deployment.

推論構成の詳細については、InferenceConfig クラスのドキュメントを参照してください。For more information on inference configuration, see the InferenceConfig class documentation.

推論構成を利用したカスタム 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.

InferenceConfig の CLI の例CLI example of InferenceConfig

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

JSON エンティティJSON entity メソッド パラメーターMethod parameter 説明Description
entryScript entry_script イメージに対して実行するコードを含むローカル ファイルのパス。Path to a local file that contains the code to run for the image.
sourceDirectory source_directory 省略可能。Optional. イメージを作成するためのすべてのファイルを含むフォルダーへのパス。パスにより、このフォルダーまたはサブ フォルダー内の任意のファイルへのアクセスが簡単になります。Path to folders that contain all files to create the image, which makes it easy to access any files within this folder or subfolder. ローカル コンピューターから Webservice の依存関係として、フォルダー全体をアップロードできます。You can upload an entire folder from your local machine as dependencies for the Webservice. 注: entry_script、conda_file、および extra_docker_file_steps パスは、source_directory パスへの相対パスです。Note: your entry_script, conda_file, and extra_docker_file_steps paths are relative paths to the source_directory path.
environment environment 省略可能。Optional. Azure Machine Learning 環境Azure Machine Learning environment.

Azure Machine Learning 環境の完全な仕様を、推論構成ファイルに含めることができます。You can include full specifications of an Azure Machine Learning environment in the inference configuration file. この環境がワークスペースに存在しない場合は、Azure Machine Learning によって作成されます。If this environment doesn't exist in your workspace, Azure Machine Learning will create it. それ以外の場合は、必要に応じて Azure Machine Learning によって環境が更新されます。Otherwise, Azure Machine Learning will update the environment if necessary. 次の JSON は例です。The following JSON is an example:

{
    "entryScript": "score.py",
    "environment": {
        "docker": {
            "arguments": [],
            "baseDockerfile": null,
            "baseImage": "mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04",
            "enabled": false,
            "sharedVolumes": true,
            "shmSize": null
        },
        "environmentVariables": {
            "EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
        },
        "name": "my-deploy-env",
        "python": {
            "baseCondaEnvironment": null,
            "condaDependencies": {
                "channels": [
                    "conda-forge"
                ],
                "dependencies": [
                    "python=3.6.2",
                    {
                        "pip": [
                            "azureml-defaults",
                            "azureml-telemetry",
                            "scikit-learn",
                            "inference-schema[numpy-support]"
                        ]
                    }
                ],
                "name": "project_environment"
            },
            "condaDependenciesFile": null,
            "interpreterPath": "python",
            "userManagedDependencies": false
        },
        "version": "1"
    }
}

また、分離された CLI パラメーターで既存の Azure Machine Learning 環境を使用し、推論構成ファイルから "環境" キーを削除することもできます。You can also use an existing Azure Machine Learning environment in separated CLI parameters and remove the "environment" key from the inference configuration file. 環境名には -e を使用し、環境のバージョンには --ev を使用します。Use -e for the environment name, and --ev for the environment version. --ev を指定しない場合は、最新バージョンが使用されます。If you don't specify --ev, the latest version will be used. 推論構成ファイルの例を次に示します。Here is an example of an inference configuration file:

{
    "entryScript": "score.py",
    "sourceDirectory": null
}

次のコマンドは、前述の推論構成ファイル (myInferenceConfig.json という名前) を使用してモデルをデプロイする方法を示しています。The following command demonstrates how to deploy a model using the previous inference configuration file (named myInferenceConfig.json).

また、既存の Azure Machine Learning 環境 (AzureML-Minimal という名前) の最新バージョンも使用します。It also uses the latest version of an existing Azure Machine Learning environment (named AzureML-Minimal).

az ml model deploy -m mymodel:1 --ic myInferenceConfig.json -e AzureML-Minimal --dc deploymentconfig.json

次のコマンドでは、CLI を使用してモデルをデプロイする方法を示します。The following command demonstrates how to deploy a model by using the CLI:

az ml model deploy -n myservice -m mymodel:1 --ic inferenceconfig.json

この例では、構成で次の設定が指定されています。In this example, the configuration specifies the following settings:

  • このモデルには Python が必要であるということ。That the model requires Python.
  • エントリ スクリプト。デプロイされたサービスに送信される Web 要求の処理に必要です。The entry script, which is used to handle web requests sent to the deployed service.
  • 推論を行うために必要な Python パッケージを記述する Conda ファイル。The Conda file that describes the Python packages needed for inference.

推論構成を利用したカスタム 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.

4.(オプション) モデルをプロファイルしてリソース使用状況を判断する4. (Optional) Profile your model to determine resource utilization

モデルを登録して、そのデプロイに必要な他のコンポーネントを準備したら、デプロイされたサービスで必要とされる CPU とメモリを決定できます。Once you have registered your model and prepared the other components necessary for its deployment, you can determine the CPU and memory the deployed service will need. モデルを実行して CPU 使用率、メモリ使用率、応答の待機時間などの情報を返す、サービスのプロファイル テストを行います。Profiling tests the service that runs your model and returns information such as the CPU usage, memory usage, and response latency. また、リソースの使用状況に基づいて CPU とメモリに関する推奨事項も提示されます。It also provides a recommendation for the CPU and memory based on resource usage.

モデルをプロファイリングするには、以下が必要になります。In order to profile your model, you will need:

  • 登録済みのモデル。A registered model.
  • エントリ スクリプトと推論環境の定義に基づく推論構成。An inference configuration based on your entry script and inference environment definition.
  • 単一列の表形式のデータセット。各行には、サンプルの要求データを表す文字列が含まれています。A single column tabular dataset, where each row contains a string representing sample request data.

重要

現時点では、要求データが文字列であることを期待するサービスのプロファイリングのみがサポートされています。たとえば、文字列のシリアル化された JSON、テキスト、文字列のシリアル化された画像などです。データセット (文字列) の各行の内容は、HTTP 要求の本文に置かれ、スコアリングのためにモデルをカプセル化するサービスに送信されます。At this point we only support profiling of services that expect their request data to be a string, for example: string serialized json, text, string serialized image, etc. The content of each row of the dataset (string) will be put into the body of the HTTP request and sent to the service encapsulating the model for scoring.

以下に、入力データセットを作成して、受信する要求データにシリアル化された JSON が含まれていることを想定するサービスをプロファイルできる方法の例を示します。Below is an example of how you can construct an input dataset to profile a service that expects its incoming request data to contain serialized json. ここでは、要求データの内容が同じである 100 個のインスタンスに基づくデータセットを作成しました。In this case, we created a dataset based one hundred instances of the same request data content. 実際のシナリオでは、モデル リソースの使用状況/動作が入力に依存している場合は特に、さまざまな入力を含むより規模の大きいデータセットを使用することをお勧めします。In real world scenarios we suggest that you use larger datasets containing various inputs, especially if your model resource usage/behavior is input dependent.

import json
from azureml.core import Datastore
from azureml.core.dataset import Dataset
from azureml.data import dataset_type_definitions

input_json = {'data': [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                       [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]}
# create a string that can be utf-8 encoded and
# put in the body of the request
serialized_input_json = json.dumps(input_json)
dataset_content = []
for i in range(100):
    dataset_content.append(serialized_input_json)
dataset_content = '\n'.join(dataset_content)
file_name = 'sample_request_data.txt'
f = open(file_name, 'w')
f.write(dataset_content)
f.close()

# upload the txt file created above to the Datastore and create a dataset from it
data_store = Datastore.get_default(ws)
data_store.upload_files(['./' + file_name], target_path='sample_request_data')
datastore_path = [(data_store, 'sample_request_data' +'/' + file_name)]
sample_request_data = Dataset.Tabular.from_delimited_files(
    datastore_path, separator='\n',
    infer_column_types=True,
    header=dataset_type_definitions.PromoteHeadersBehavior.NO_HEADERS)
sample_request_data = sample_request_data.register(workspace=ws,
                                                   name='sample_request_data',
                                                   create_new_version=True)

サンプル要求データを含むデータセットを準備したら、推論構成を作成します。Once you have the dataset containing sample request data ready, create an inference configuration. 推論構成は、score.py と環境定義に基づきます。Inference configuration is based on the score.py and the environment definition. 次の例に、推論構成を作成してプロファイリングを実行する方法を示します。The following example demonstrates how to create the inference configuration and run profiling:

from azureml.core.model import InferenceConfig, Model
from azureml.core.dataset import Dataset


model = Model(ws, id=model_id)
inference_config = InferenceConfig(entry_script='path-to-score.py',
                                   environment=myenv)
input_dataset = Dataset.get_by_name(workspace=ws, name='sample_request_data')
profile = Model.profile(ws,
            'unique_name',
            [model],
            inference_config,
            input_dataset=input_dataset)

profile.wait_for_completion(True)

# see the result
details = profile.get_details()

次のコマンドでは、CLI を使用してモデルをプロファイルする方法を示します。The following command demonstrates how to profile a model by using the CLI:

az ml model profile -g <resource-group-name> -w <workspace-name> --inference-config-file <path-to-inf-config.json> -m <model-id> --idi <input-dataset-id> -n <unique-name>

ヒント

プロファイリングによって返された情報を保持するには、モデルのタグまたはプロパティを使用します。To persist the information returned by profiling, use tags or properties for the model. タグまたはプロパティを使用すると、データがモデルと共にモデル レジストリに格納されます。Using tags or properties stores the data with the model in the model registry. 次の例は、requestedCpu および requestedMemoryInGb 情報を含む新しいタグを追加する方法を示しています。The following examples demonstrate adding a new tag containing the requestedCpu and requestedMemoryInGb information:

model.add_tags({'requestedCpu': details['requestedCpu'],
                'requestedMemoryInGb': details['requestedMemoryInGb']})
az ml model profile -g <resource-group-name> -w <workspace-name> --i <model-id> --add-tag requestedCpu=1 --add-tag requestedMemoryInGb=0.5

ターゲットにデプロイするDeploy to target

デプロイでは、推論構成のデプロイ構成を使用して、モデルをデプロイします。Deployment uses the inference configuration deployment configuration to deploy the models. デプロイ プロセスは、コンピューティング ターゲットに関係なく類似しています。The deployment process is similar regardless of the compute target. AKS へのデプロイは、AKS クラスターへの参照を指定する必要があるため、少し異なります。Deploying to AKS is slightly different because you must provide a reference to the AKS cluster.

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

次のコンピューティング ターゲット、またはコンピューティング リソースを使用して、Web サービスのデプロイをホストできます。You can use the following compute targets, or compute resources, to host your web service deployment:

コンピューティング ターゲット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 Machine Learning コンピューティング インスタンス Web サービスAzure Machine Learning compute instance web service テスト/デバッグTesting/debugging     制限付きのテストとトラブルシューティングに使用。Use for limited testing and troubleshooting.
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. AKS は、デザイナーで使用できる唯一のオプションです。AKS is the only option available for 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.
Azure Machine Learning コンピューティング クラスターAzure Machine Learning compute clusters (プレビュー) バッチ  推論(Preview) Batch inference はい (機械学習パイプライン)Yes (machine learning pipeline)   サーバーレス コンピューティングでバッチ スコアリングを実行します。Run batch scoring on serverless compute. 優先順位が中程度または低い VM をサポートします。Supports normal and low-priority VMs.
Azure FunctionsAzure Functions (プレビュー) リアルタイムの推論(Preview) Real-time inference      
Azure IoT EdgeAzure IoT Edge (プレビュー) IoT  モジュール(Preview) IoT module     IoT デバイスに ML モデルをデプロイし、サービスを提供します。Deploy and serve ML models on IoT devices.
Azure Data Box EdgeAzure Data Box Edge IoT Edge を使用Via IoT Edge   はいYes IoT デバイスに ML モデルをデプロイし、サービスを提供します。Deploy and serve ML models on IoT devices.

注意

ローカル、Azure Machine Learning コンピューティング インスタンス、Azure Machine Learning コンピューティング クラスターなどのコンピューティング先では、トレーニングと実験のために GPU をサポートしていますが、Web サービスとしてデプロイされる場合 に、推論に GPU を使用することは、Azure Kubernetes Service でのみサポートされています。Although compute targets like local, Azure Machine Learning compute instance, 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 Azure Kubernetes Service.

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

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

モデルをデプロイする前にデプロイ構成を定義する必要があります。Before deploying your model, you must define the deployment configuration. デプロイ構成は、Web サービスがホストされるコンピューティング ターゲットに固有となりますThe deployment configuration is specific to the compute target that will host the web service. たとえば、モデルをローカルでデプロイするときに、サービスが要求を受け入れるポートを指定する必要があります。For example, when you deploy a model locally, you must specify the port where the service accepts requests. デプロイ構成は、エントリ スクリプトの一部ではありません。The deployment configuration isn't part of your entry script. これは、モデルとエントリ スクリプトをホストするコンピューティング先の特性を定義するために使用されます。It's used to define the characteristics of the compute target that will host the model and entry script.

また、たとえば、ワークスペースに関連付けられている Azure Kubernetes Service (AKS) インスタンスがまだない場合などにも、コンピューティング リソースを作成する必要があります。You might also need to create the compute resource, if, for example, you don't already have an Azure Kubernetes Service (AKS) instance associated with your workspace.

次の表には、コンピューティング ターゲット別にデプロイ構成を作成する例があります。The following table provides an example of creating a deployment configuration for each compute target:

コンピューティング ターゲットCompute target デプロイ構成の例Deployment configuration example
ローカルLocal deployment_config = LocalWebservice.deploy_configuration(port=8890)
Azure Container InstancesAzure Container Instances deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
Azure Kubernetes ServiceAzure Kubernetes Service deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)

これらのローカル、Azure Container Instances、および AKS Web サービスのクラスは、azureml.core.webservice からインポートできます。The classes for local, Azure Container Instances, and AKS web services can be imported from azureml.core.webservice:

from azureml.core.webservice import AciWebservice, AksWebservice, LocalWebservice

TLS を使用したデプロイのセキュリティ保護Securing deployments with TLS

Web サービスのデプロイをセキュリティで保護する方法の詳細については、「TLS を有効にしてデプロイする」を参照してください。For more information on how to secure a web service deployment, see Enable TLS and deploy.

ローカル デプロイLocal deployment

モデルをローカルにデプロイするには、お使いのローカル コンピューターに Docker がインストールされている必要があります。To deploy a model locally, you need to have Docker installed on your local machine.

SDK を使用するUsing the SDK

from azureml.core.webservice import LocalWebservice, Webservice

deployment_config = LocalWebservice.deploy_configuration(port=8890)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config)
service.wait_for_deployment(show_output = True)
print(service.state)

詳細については、LocalWebserviceModel.deploy()、および Webservice のドキュメントを参照してください。For more information, see the documentation for LocalWebservice, Model.deploy(), and Webservice.

CLI の使用Using the CLI

CLI を使用してモデルをデプロイするには、次のコマンドを使用します。To deploy a model by using the CLI, use the following command. 登録されているモデルの名前とバージョンに mymodel:1 を置き換えます。Replace mymodel:1 with the name and version of the registered model:

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

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
}

詳細については、az ml model deploy のドキュメントを参照してください。For more information, see the az ml model deploy documentation.

サービスの状態について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

コンピューティング インスタンス Web サービス (開発/テスト)Compute instance web service (dev/test)

Azure Machine Learning コンピューティング インスタンスへのモデルのデプロイに関する記事を参照してください。See Deploy a model to Azure Machine Learning compute instance.

Azure Container Instances (開発/テスト)Azure Container Instances (dev/test)

Azure Container Instances へのデプロイに関する記事を参照してください。See Deploy to Azure Container Instances.

Azure Kubernetes Service (開発/テストおよび運用)Azure Kubernetes Service (dev/test and production)

Azure Kubernetes Service へのデプロイに関する記事を参照してください。See Deploy to Azure Kubernetes Service.

A/B テスト (制御ロールアウト)A/B Testing (controlled rollout)

詳細については、「ML モデルの制御ロールアウト」を参照してください。See Controlled rollout of ML models for more information.

Web サービスを使用するConsume web services

デプロイされた Web サービスはすべて、REST エンドポイントを提供します。そのため、任意のプログラミング言語でクライアント アプリケーションを作成できます。Every deployed web service provides a REST endpoint, so you can create client applications in any programming language. サービスに対してキーベースの認証を有効にしている場合、要求ヘッダーでトークンとしてサービス キーを指定する必要があります。If you've enabled key-based authentication for your service, you need to provide a service key as a token in your request header. サービスに対してトークンベースの認証を有効にしている場合、要求ヘッダーでベアラー トークンとして Azure Machine Learning JSON Web トークン (JWT) を指定する必要があります。If you've enabled token-based authentication for your service, you need to provide an Azure Machine Learning JSON Web Token (JWT) as a bearer token in your request header.

主な違いは、キーは静的であり、手動で再生成することができトークンは有効期限に更新する必要があることですThe primary difference is that keys are static and can be regenerated manually, and tokens need to be refreshed upon expiration. キーベースの認証は、Azure Container Instance と Azure Kubernetes Service でデプロイされた Web サービスでサポートされています。また、トークンベースの認証は Azure Kubernetes サービスのデプロイでのみ使用できます。Key-based auth is supported for Azure Container Instance and Azure Kubernetes Service deployed web-services, and token-based auth is only available for Azure Kubernetes Service deployments. 詳細および具体的なコード サンプルについては、認証に関する方法を参照してください。See the how-to on authentication for more information and specific code samples.

ヒント

サービスをデプロイした後、スキーマ JSON ドキュメントを取得できます。You can retrieve the schema JSON document after you deploy the service. ローカル Web サービスの Swagger ファイルへの URI を取得するには、デプロイされた Web サービスの swagger_uri プロパティを使用します (例: service.swagger_uri)。Use the swagger_uri property from the deployed web service (for example, service.swagger_uri) to get the URI to the local web service's Swagger file.

要求 - 応答の使用量Request-response consumption

Python でサービスを呼び出す方法の例を以下に示します。Here's an example of how to invoke your service in Python:

import requests
import json

headers = {'Content-Type': 'application/json'}

if service.auth_enabled:
    headers['Authorization'] = 'Bearer '+service.get_keys()[0]
elif service.token_auth_enabled:
    headers['Authorization'] = 'Bearer '+service.get_token()[0]

print(headers)

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

response = requests.post(
    service.scoring_uri, data=test_sample, headers=headers)
print(response.status_code)
print(response.elapsed)
print(response.json())

詳細については、Web サービスを使用するクライアント アプリケーションの作成に関するページを参照してください。For more information, see Create client applications to consume web services.

Web サービスのスキーマ (OpenAPI 仕様)Web service schema (OpenAPI specification)

デプロイで自動スキーマ生成を使用した場合は、swagger_uri プロパティを使用して、サービスに対する OpenAPI 仕様のアドレスを取得できます。If you used automatic schema generation with your deployment, you can get the address of the OpenAPI specification for the service by using the swagger_uri property. (例: print(service.swagger_uri))。仕様を取得するには、GET 要求を使用するか、ブラウザーで URI を開きます。(For example, print(service.swagger_uri).) Use a GET request or open the URI in a browser to retrieve the specification.

次の JSON ドキュメントは、デプロイに対して生成されるスキーマ (OpenAPI 仕様) の例です。The following JSON document is an example of a schema (OpenAPI specification) generated for a deployment:

{
    "swagger": "2.0",
    "info": {
        "title": "myservice",
        "description": "API specification for Azure Machine Learning myservice",
        "version": "1.0"
    },
    "schemes": [
        "https"
    ],
    "consumes": [
        "application/json"
    ],
    "produces": [
        "application/json"
    ],
    "securityDefinitions": {
        "Bearer": {
            "type": "apiKey",
            "name": "Authorization",
            "in": "header",
            "description": "For example: Bearer abc123"
        }
    },
    "paths": {
        "/": {
            "get": {
                "operationId": "ServiceHealthCheck",
                "description": "Simple health check endpoint to ensure the service is up at any given point.",
                "responses": {
                    "200": {
                        "description": "If service is up and running, this response will be returned with the content 'Healthy'",
                        "schema": {
                            "type": "string"
                        },
                        "examples": {
                            "application/json": "Healthy"
                        }
                    },
                    "default": {
                        "description": "The service failed to execute due to an error.",
                        "schema": {
                            "$ref": "#/definitions/ErrorResponse"
                        }
                    }
                }
            }
        },
        "/score": {
            "post": {
                "operationId": "RunMLService",
                "description": "Run web service's model and get the prediction output",
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "parameters": [
                    {
                        "name": "serviceInputPayload",
                        "in": "body",
                        "description": "The input payload for executing the real-time machine learning service.",
                        "schema": {
                            "$ref": "#/definitions/ServiceInput"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The service processed the input correctly and provided a result prediction, if applicable.",
                        "schema": {
                            "$ref": "#/definitions/ServiceOutput"
                        }
                    },
                    "default": {
                        "description": "The service failed to execute due to an error.",
                        "schema": {
                            "$ref": "#/definitions/ErrorResponse"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "ServiceInput": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                }
            },
            "example": {
                "data": [
                    [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
                ]
            }
        },
        "ServiceOutput": {
            "type": "array",
            "items": {
                "type": "number",
                "format": "double"
            },
            "example": [
                3726.995
            ]
        },
        "ErrorResponse": {
            "type": "object",
            "properties": {
                "status_code": {
                    "type": "integer",
                    "format": "int32"
                },
                "message": {
                    "type": "string"
                }
            }
        }
    }
}

詳細については、OpenAPI の仕様をご覧ください。For more information, see OpenAPI specification.

仕様からクライアント ライブラリを作成できるユーティリティについては、swagger-codegen を参照してください。For a utility that can create client libraries from the specification, see swagger-codegen.

バッチ推論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.

Web サービスを更新するUpdate web services

Web サービスを更新するには、update メソッドを使用します。To update a web service, use the update method. 推論の構成で指定できる新しいモデル、新しいエントリ スクリプト、または新しい依存関係を使用するように Web サービスを更新することができます。You can update the web service to use a new model, a new entry script, or new dependencies that can be specified in an inference configuration. 詳細については、Webservice.update のドキュメントを参照してください。For more information, see the documentation for Webservice.update.

重要

新しいバージョンのモデルを作成するときは、それを使用したい各サービスを手動で更新する必要があります。When you create a new version of a model, you must manually update each service that you want to use it.

Azure Machine Learning デザイナーから発行された Web サービスを、SDK を使用して更新することはできません。You can not use the SDK to update a web service published from the Azure Machine Learning designer.

SDK を使用するUsing the SDK

次のコードは、SDK を使用して Web サービスのモデル、環境、エントリ スクリプトを更新する方法を示しています。The following code shows how to use the SDK to update the model, environment, and entry script for a web service:

from azureml.core import Environment
from azureml.core.webservice import Webservice
from azureml.core.model import Model, InferenceConfig

# Register new model.
new_model = Model.register(model_path="outputs/sklearn_mnist_model.pkl",
                           model_name="sklearn_mnist",
                           tags={"key": "0.1"},
                           description="test",
                           workspace=ws)

# Use version 3 of the environment.
deploy_env = Environment.get(workspace=ws,name="myenv",version="3")
inference_config = InferenceConfig(entry_script="score.py",
                                   environment=deploy_env)

service_name = 'myservice'
# Retrieve existing service.
service = Webservice(name=service_name, workspace=ws)



# Update to new model(s).
service.update(models=[new_model], inference_config=inference_config)
print(service.state)
print(service.get_logs())

CLI を使用するUsing the CLI

ML CLI を使用して Web サービスを更新することもできます。You can also update a web service by using the ML CLI. 次の例では、新しいモデルを登録し、この新しいモデルを使用するように Web サービスを更新する方法を示します。The following example demonstrates registering a new model and then updating a web service to use the new model:

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --output-metadata-file modelinfo.json
az ml service update -n myservice --model-metadata-file modelinfo.json

ヒント

この例では、JSON ドキュメントを使用して、登録コマンドから更新コマンドにモデル情報を渡します。In this example, a JSON document is used to pass the model information from the registration command into the update command.

新しいエントリ スクリプトまたは環境を使用するようにサービスを更新するには、推論構成ファイルを作成し、それを ic パラメーターで指定します。To update the service to use a new entry script or environment, create an inference configuration file and specify it with the ic parameter.

詳細については、az ml service update のドキュメントを参照してください。For more information, see the az ml service update documentation.

モデルを継続的にデプロイするContinuously deploy models

Azure DevOps 用の Machine Learning 拡張機能を使用して、モデルを継続的にデプロイできます。You can continuously deploy models by using the Machine Learning extension for Azure DevOps. Azure DevOps 用の Machine Learning 拡張機能を使用して、新しい機械学習モデルが Azure Machine Learning ワークスペースに登録されたときにデプロイ パイプラインをトリガーできます。You can use the Machine Learning extension for Azure DevOps to trigger a deployment pipeline when a new machine learning model is registered in an Azure Machine Learning workspace.

  1. Azure Pipelines にサインアップします。そうすると、任意のプラットフォームや任意のクラウドへのご自分のアプリケーションの継続的インテグレーションとデリバリーを実現できます。Sign up for Azure Pipelines, which makes continuous integration and delivery of your application to any platform or cloud possible. (Azure Pipelines は Machine Learning パイプラインとは異なることに注意してください)。(Note that Azure Pipelines isn't the same as Machine Learning pipelines.)

  2. Azure DevOps プロジェクトを作成します。Create an Azure DevOps project.

  3. Azure Pipelines 用の Machine Learning 拡張機能をインストールします。Install the Machine Learning extension for Azure Pipelines.

  4. ご自分のすべての成果物にアクセスするために、サービス接続を使用して、ご自分の Azure Machine Learning ワークスペースへのサービス プリンシパル接続を設定します。Use service connections to set up a service principal connection to your Azure Machine Learning workspace so you can access your artifacts. プロジェクト設定に移動し、 [サービス接続] を選択して、 [Azure Resource Manager] を選択します。Go to project settings, select Service connections, and then select Azure Resource Manager:

    Azure Resource Manager の選択Select Azure Resource Manager

  5. [スコープ レベル] の一覧で、 [AzureMLWorkspace] を選択し、残りの値を入力します。In the Scope level list, select AzureMLWorkspace, and then enter the rest of the values:

    AzureMLWorkspace の選択

  6. Azure Pipelines を使用してご自分の機械学習モデルを継続的にデプロイするために、パイプラインの下で [リリース] を選択します。To continuously deploy your machine learning model by using Azure Pipelines, under pipelines, select release. 新しい成果物を追加し、 [AzureML Model] 成果物と前の手順で作成したサービス接続を選択します。Add a new artifact, and then select the AzureML Model artifact and the service connection that you created earlier. デプロイをトリガーするモデルとバージョンを選択します。Select the model and version to trigger a deployment:

    AzureML モデルの選択Select AzureML Model

  7. ご自分のモデル成果物に対してモデル トリガーを有効にします。Enable the model trigger on your model artifact. トリガーを有効にすると、そのモデルの指定したバージョン (最新バージョン) がワークスペースに登録されるたびに、Azure DevOps リリース パイプラインがトリガーされます。When you turn on the trigger, every time the specified version (that is, the newest version) of that model is registered in your workspace, an Azure DevOps release pipeline is triggered.

    モデル トリガーを有効にするEnable the model trigger

他のサンプル プロジェクトと例については、GitHub の次のサンプル リポジトリを参照してください。For more sample projects and examples, see these sample repos in GitHub:

モデルをダウンロードDownload a model

モデルをダウンロードし、独自の実行環境でそれを使用する場合、次の SDK / CLI コマンドでそれを行うことができます。If you want to download your model to use it in your own execution environment, you can do so with the following SDK / CLI commands:

SDK:SDK:

model_path = Model(ws,'mymodel').download()

CLI:CLI:

az ml model download --model-id mymodel:1 --target-dir model_folder

(プレビュー) コードなしのモデル デプロイ(Preview) No-code model deployment

コードなしのモデル デプロイは現在プレビュー段階で、次の機械学習フレームワークをサポートしています。No-code model deployment is currently in preview and supports the following machine learning frameworks:

Tensorflow SavedModel 形式Tensorflow SavedModel format

コードなしのモデル デプロイを使用するには、TensorFlow モデルが SavedModel 形式で登録されている必要があります。Tensorflow models need to be registered in SavedModel format to work with no-code model deployment.

SavedModel の作成方法については、このリンクを参照してください。Please see this link for information on how to create a SavedModel.

from azureml.core import Model

model = Model.register(workspace=ws,
                       model_name='flowers',                        # Name of the registered model in your workspace.
                       model_path='./flowers_model',                # Local Tensorflow SavedModel folder to upload and register as a model.
                       model_framework=Model.Framework.TENSORFLOW,  # Framework used to create the model.
                       model_framework_version='1.14.0',            # Version of Tensorflow used to create the model.
                       description='Flowers model')

service_name = 'tensorflow-flower-service'
service = Model.deploy(ws, service_name, [model])

ONNX モデルONNX models

ONNX モデルの登録とデプロイは、任意の ONNX 推論グラフでサポートされています。ONNX model registration and deployment is supported for any ONNX inference graph. 前処理および後処理のステップは、現在サポートされていません。Preprocess and postprocess steps are not currently supported.

MNIST ONNX モデルを登録してデプロイする方法の例を次に示します。Here is an example of how to register and deploy an MNIST ONNX model:

from azureml.core import Model

model = Model.register(workspace=ws,
                       model_name='mnist-sample',                  # Name of the registered model in your workspace.
                       model_path='mnist-model.onnx',              # Local ONNX model to upload and register as a model.
                       model_framework=Model.Framework.ONNX ,      # Framework used to create the model.
                       model_framework_version='1.3',              # Version of ONNX used to create the model.
                       description='Onnx MNIST model')

service_name = 'onnx-mnist-service'
service = Model.deploy(ws, service_name, [model])

Pytorch を使用している場合は、モデルを PyTorch から ONNX にエクスポートすると、変換および制限に関する詳細が得られます。If you're using Pytorch, Exporting models from PyTorch to ONNX has the details on conversion and limitations.

Scikit-learn モデルScikit-learn models

コードなしのモデル デプロイは、全種類の組み込み Scikit-learn モデルでサポートされています。No code model deployment is supported for all built-in scikit-learn model types.

追加コードなしの sklearn モデルの登録とデプロイの例を次に示します。Here is an example of how to register and deploy a sklearn model with no extra code:

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = Model.register(workspace=ws,
                       model_name='my-sklearn-model',                # Name of the registered model in your workspace.
                       model_path='./sklearn_regression_model.pkl',  # Local file to upload and register as a model.
                       model_framework=Model.Framework.SCIKITLEARN,  # Framework used to create the model.
                       model_framework_version='0.19.1',             # Version of scikit-learn used to create the model.
                       resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5),
                       description='Ridge regression model to predict diabetes progression.',
                       tags={'area': 'diabetes', 'type': 'regression'})
                       
service_name = 'my-sklearn-service'
service = Model.deploy(ws, service_name, [model])

注:predict_proba をサポートするモデルは、既定でそのメソッドを使用します。NOTE: Models which support predict_proba will use that method by default. これをオーバーライドして predict を使用するには、次のように POST の本文を変更します。To override this to use predict you can modify the POST body as below:

import json


input_payload = json.dumps({
    'data': [
        [ 0.03807591,  0.05068012,  0.06169621, 0.02187235, -0.0442235,
         -0.03482076, -0.04340085, -0.00259226, 0.01990842, -0.01764613]
    ],
    'method': 'predict'  # If you have a classification model, the default behavior is to run 'predict_proba'.
})

output = service.run(input_payload)

print(output)

注:事前構築済みの sklearn 推論コンテナーには次の依存関係が含まれています。NOTE: These dependencies are included in the prebuilt sklearn inference container:

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

モデルのパッケージ化Package models

場合によっては、モデルをデプロイせずに Docker イメージを作成することが必要になることがあります (たとえば、Azure App Service にデプロイする予定がある場合)。In some cases, you might want to create a Docker image without deploying the model (if, for example, you plan to deploy to Azure App Service). または、イメージをダウンロードして、ローカルの Docker インストールで実行することが必要な場合もあります。Or you might want to download the image and run it on a local Docker installation. さらに、イメージのビルドに使用するファイルをダウンロードし、それらを検査および変更して、手動でビルドすることが必要な場合もあります。You might even want to download the files used to build the image, inspect them, modify them, and build the image manually.

モデルのパッケージ化により、これらを行うことができます。Model packaging enables you to do these things. モデルを Web サービスとしてホストするために必要なすべてのアセットをパッケージ化し、完全にビルドされた Docker イメージ、またはイメージのビルドに必要なファイルのいずれかをダウンロードできます。It packages all the assets needed to host a model as a web service and allows you to download either a fully built Docker image or the files needed to build one. モデルのパッケージ化を使用するには、次の 2 つの方法があります。There are two ways to use model packaging:

パッケージ化されたモデルをダウンロードする: モデルと、それを Web サービスとしてホストするために必要なその他のファイルを含む Docker イメージをダウンロードします。Download a packaged model: Download a Docker image that contains the model and other files needed to host it as a web service.

Dockerfile を生成する: Docker イメージをビルドするために必要な Dockerfile、モデル、エントリ スクリプト、およびその他のアセットをダウンロードします。Generate a Dockerfile: Download the Dockerfile, model, entry script, and other assets needed to build a Docker image. その後、イメージをローカルでビルドする前に、それらのファイルを検査するか、変更を加えることができます。You can then inspect the files or make changes before you build the image locally.

どちらのパッケージも、ローカルの Docker イメージを取得するために使用できます。Both packages can be used to get a local Docker image.

ヒント

パッケージの作成は、モデルのデプロイに似ています。Creating a package is similar to deploying a model. 登録済みのモデルと推論構成を使用します。You use a registered model and an inference configuration.

重要

完全にビルドされたイメージをダウンロードするか、ローカルでイメージをビルドするには、開発環境に Docker をインストールしておく必要があります。To download a fully built image or build an image locally, you need to have Docker installed in your development environment.

パッケージ化されたモデルをダウンロードするDownload a packaged model

次の例では、ワークスペースの Azure Container Registry に登録されているイメージをビルドします。The following example builds an image, which is registered in the Azure container registry for your workspace:

package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)

パッケージを作成した後、package.pull() を使用して、ローカルの Docker 環境にイメージをプルできます。After you create a package, you can use package.pull() to pull the image to your local Docker environment. このコマンドの出力には、イメージの名前が表示されます。The output of this command will display the name of the image. 次に例を示します。For example:

Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338.

モデルをダウンロードした後、docker images コマンドを使用してローカル イメージを一覧表示します。After you download the model, use the docker images command to list the local images:

REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
myworkspacef78fd10.azurecr.io/package    20190822181338      7ff48015d5bd        4 minutes ago       1.43 GB

このイメージに基づいてローカル コンテナーを開始するには、次のコマンドを使用して、シェルまたはコマンド ラインから名前付きコンテナーを開始します。To start a local container based on this image, use the following command to start a named container from the shell or command line. <imageid> 値を、docker images コマンドから返されたイメージ ID に置き換えます。Replace the <imageid> value with the image ID returned by the docker images command.

docker run -p 6789:5001 --name mycontainer <imageid>

このコマンドは、myimage という名前のイメージの最新バージョンを起動します。This command starts the latest version of the image named myimage. これはローカル ポート 6789 を、Web サービスがリッスンしているコンテナー内のポート (5001) にマップします。It maps local port 6789 to the port in the container on which the web service is listening (5001). また、コンテナーに mycontainer という名前を割り当てます。これにより、コンテナーの停止が簡単になります。It also assigns the name mycontainer to the container, which makes the container easier to stop. コンテナーが開始したら、http://localhost:6789/score に要求を送信できます。After the container is started, you can submit requests to http://localhost:6789/score.

Dockerfile および依存関係を生成するGenerate a Dockerfile and dependencies

次の例では、イメージをローカルでビルドするために必要な Dockerfile、モデル、およびその他のアセットをダウンロードする方法を示します。The following example shows how to download the Dockerfile, model, and other assets needed to build an image locally. generate_dockerfile=True パラメーターは、完全にビルドされたイメージではなく、それらのファイルが必要であることを示します。The generate_dockerfile=True parameter indicates that you want the files, not a fully built image.

package = Model.package(ws, [model], inference_config, generate_dockerfile=True)
package.wait_for_creation(show_output=True)
# Download the package.
package.save("./imagefiles")
# Get the Azure container registry that the model/Dockerfile uses.
acr=package.get_container_registry()
print("Address:", acr.address)
print("Username:", acr.username)
print("Password:", acr.password)

このコードは、イメージをビルドするために必要なファイルを imagefiles ディレクトリにダウンロードします。This code downloads the files needed to build the image to the imagefiles directory. 保存ファイルに含まれている Dockerfile は、Azure Container Registry に格納されている基本イメージを参照します。The Dockerfile included in the saved files references a base image stored in an Azure container registry. ローカルの Docker インストールでイメージをビルドする場合、アドレス、ユーザー名、およびパスワードを使用して、このレジストリに対して認証を行う必要があります。When you build the image on your local Docker installation, you need to use the address, user name, and password to authenticate to the registry. ローカルの Docker インストールを使用してイメージをビルドするには、次の手順に従います。Use the following steps to build the image by using a local Docker installation:

  1. シェルまたはコマンド ライン セッションから、次のコマンドを使用して Azure Container Registry で Docker を認証します。From a shell or command-line session, use the following command to authenticate Docker with the Azure container registry. <address><username>、および <password> を、package.get_container_registry() によって取得した値に置き換えます。Replace <address>, <username>, and <password> with the values retrieved by package.get_container_registry().

    docker login <address> -u <username> -p <password>
    
  2. イメージをビルドするには、次のコマンドを使用します。To build the image, use the following command. <imagefiles> を、package.save() でファイルを保存したディレクトリへのパスに置き換えます。Replace <imagefiles> with the path of the directory where package.save() saved the files.

    docker build --tag myimage <imagefiles>
    

    このコマンドは、イメージ名を myimage に設定します。This command sets the image name to myimage.

イメージがビルドされたことを確認するには、docker images コマンドを使用します。To verify that the image is built, use the docker images command. myimage イメージが一覧に表示されます。You should see the myimage image in the list:

REPOSITORY      TAG                 IMAGE ID            CREATED             SIZE
<none>          <none>              2d5ee0bf3b3b        49 seconds ago      1.43 GB
myimage         latest              739f22498d64        3 minutes ago       1.43 GB

このイメージに基づいて新しいコンテナーを開始するには、次のコマンドを使用します。To start a new container based on this image, use the following command:

docker run -p 6789:5001 --name mycontainer myimage:latest

このコマンドは、myimage という名前のイメージの最新バージョンを起動します。This command starts the latest version of the image named myimage. これはローカル ポート 6789 を、Web サービスがリッスンしているコンテナー内のポート (5001) にマップします。It maps local port 6789 to the port in the container on which the web service is listening (5001). また、コンテナーに mycontainer という名前を割り当てます。これにより、コンテナーの停止が簡単になります。It also assigns the name mycontainer to the container, which makes the container easier to stop. コンテナーが開始したら、http://localhost:6789/score に要求を送信できます。After the container is started, you can submit requests to http://localhost:6789/score.

ローカル コンテナーをテストするクライアントの例Example client to test the local container

次のコードは、コンテナーで使用できる Python クライアントの例です。The following code is an example of a Python client that can be used with the container:

import requests
import json

# URL for the web service.
scoring_uri = 'http://localhost:6789/score'

# Two sets of data to score, so we get two results back.
data = {"data":
        [
            [ 1,2,3,4,5,6,7,8,9,10 ],
            [ 10,9,8,7,6,5,4,3,2,1 ]
        ]
        }
# Convert to JSON string.
input_data = json.dumps(data)

# Set the content type.
headers = {'Content-Type': 'application/json'}

# Make the request and display the response.
resp = requests.post(scoring_uri, input_data, headers=headers)
print(resp.text)

他のプログラミング言語でのクライアントの例については、Web サービスとしてデプロイされたモデルの使用に関する記事を参照してください。For example clients in other programming languages, see Consume models deployed as web services.

Docker コンテナーを停止するStop the Docker container

コンテナーを停止するには、別のシェルまたはコマンド ラインから次のコマンドを使用します。To stop the container, use the following command from a different shell or command line:

docker kill mycontainer

リソースをクリーンアップするClean up resources

デプロイされた Web サービスを削除するには、service.delete() を使用します。To delete a deployed web service, use service.delete(). 登録済みのモデルを削除するには、model.delete() を使用します。To delete a registered model, use model.delete().

詳細については、WebService.delete()Model.delete() のドキュメントを参照してください。For more information, see the documentation for WebService.delete() and Model.delete().

高度なエントリ スクリプトの作成Advanced entry script authoring

Binary DataBinary data

モデルがバイナリ データ (画像など) を受け入れる場合は、デプロイで使用される score.py ファイルを生の HTTP 要求を受け入れるように変更する必要があります。If your model accepts binary data, like an image, you must modify the score.py file used for your deployment to accept raw HTTP requests. 生データを受け入れるには、エントリ スクリプトで AMLRequest クラスを使用して、@rawhttp デコレーターを run() 関数に追加します。To accept raw data, use the AMLRequest class in your entry script and add the @rawhttp decorator to the run() function.

バイナリ データを受け付ける score.py の例を次に示します。Here's an example of a score.py that accepts binary data:

from azureml.contrib.services.aml_request import AMLRequest, rawhttp
from azureml.contrib.services.aml_response import AMLResponse


def init():
    print("This is init()")


@rawhttp
def run(request):
    print("This is run()")
    print("Request: [{0}]".format(request))
    if request.method == 'GET':
        # For this example, just return the URL for GETs.
        respBody = str.encode(request.full_path)
        return AMLResponse(respBody, 200)
    elif request.method == 'POST':
        reqBody = request.get_data(False)
        # For a real-world solution, you would load the data from reqBody
        # and send it to the model. Then return the response.

        # For demonstration purposes, this example just returns the posted data as the response.
        return AMLResponse(reqBody, 200)
    else:
        return AMLResponse("bad request", 500)

重要

AMLRequest クラスは azureml.contrib 名前空間にあります。The AMLRequest class is in the azureml.contrib namespace. この名前空間内のエンティティは、このサービスが改善されるに従って頻繁に変更されます。Entities in this namespace change frequently as we work to improve the service. この名前空間内のものはすべて、Microsoft によって完全にはサポートされていないプレビューとして見なす必要があります。Anything in this namespace should be considered a preview that's not fully supported by Microsoft.

これをローカルの開発環境でテストする必要がある場合は、次のコマンドを使用して、コンポーネントをインストールできます。If you need to test this in your local development environment, you can install the components by using the following command:

pip install azureml-contrib-services

AMLRequest クラスからは、score.py の未加工の投稿データにのみアクセスできます。クライアント側コンポーネントはありません。The AMLRequest class only allows you to access the raw posted data in the score.py, there is no client-side component. クライアントからは、通常どおりにデータを投稿します。From a client, you post data as normal. たとえば、次の Python コードを使用すると、イメージ ファイルを読み取り、データを投稿することができます。For example, the following Python code reads an image file and posts the data:

import requests
# Load image data
data = open('example.jpg', 'rb').read()
# Post raw data to scoring URI
res = request.post(url='<scoring-uri>', data=data, headers={'Content-Type': 'application/octet-stream'})

クロスオリジン リソース共有 (CORS)Cross-origin resource sharing (CORS)

クロスオリジン リソース共有を使用すると、Web ページ上のリソースを他のドメインから要求することができます。Cross-origin resource sharing is a way to allow resources on a webpage to be requested from another domain. CORS は、クライアント要求で送信され、サービス応答で返される HTTP ヘッダーを使用して機能します。CORS works via HTTP headers sent with the client request and returned with the service response. CORS と有効なヘッダーについて詳しくは、Wikipedia のクロスオリジン リソース共有に関する説明を参照してください。For more information on CORS and valid headers, see Cross-origin resource sharing in Wikipedia.

CORS をサポートするようにモデル デプロイを構成するには、エントリ スクリプトで AMLResponse クラスを使用します。To configure your model deployment to support CORS, use the AMLResponse class in your entry script. このクラスを使用すると、応答オブジェクトにヘッダーを設定できます。This class allows you to set the headers on the response object.

次の例では、エントリ スクリプトから応答に対して Access-Control-Allow-Origin ヘッダーを設定しています。The following example sets the Access-Control-Allow-Origin header for the response from the entry script:

from azureml.contrib.services.aml_request import AMLRequest, rawhttp
from azureml.contrib.services.aml_response import AMLResponse

def init():
    print("This is init()")

@rawhttp
def run(request):
    print("This is run()")
    print("Request: [{0}]".format(request))
    if request.method == 'GET':
        # For this example, just return the URL for GETs.
        respBody = str.encode(request.full_path)
        return AMLResponse(respBody, 200)
    elif request.method == 'POST':
        reqBody = request.get_data(False)
        # For a real-world solution, you would load the data from reqBody
        # and send it to the model. Then return the response.

        # For demonstration purposes, this example
        # adds a header and returns the request body.
        resp = AMLResponse(reqBody, 200)
        resp.headers['Access-Control-Allow-Origin'] = "http://www.example.com"
        return resp
    else:
        return AMLResponse("bad request", 500)

重要

AMLResponse クラスは azureml.contrib 名前空間にあります。The AMLResponse class is in the azureml.contrib namespace. この名前空間内のエンティティは、このサービスが改善されるに従って頻繁に変更されます。Entities in this namespace change frequently as we work to improve the service. この名前空間内のものはすべて、Microsoft によって完全にはサポートされていないプレビューとして見なす必要があります。Anything in this namespace should be considered a preview that's not fully supported by Microsoft.

これをローカルの開発環境でテストする必要がある場合は、次のコマンドを使用して、コンポーネントをインストールできます。If you need to test this in your local development environment, you can install the components by using the following command:

pip install azureml-contrib-services

警告

Azure Machine Learning では、スコア付けサービスを実行しているコンテナーに POST 要求と GET 要求のみがルーティングされます。Azure Machine Learning will route only POST and GET requests to the containers running the scoring service. これにより、ブラウザーではプレフライト CORS 要求に対して OPTIONS 要求が使用されるため、エラーが発生する可能性があります。This can cause errors due to browsers using OPTIONS requests to pre-flight CORS requests.

次のステップNext steps