モデルをプロファイルしてリソース使用状況を判断する

適用対象:Azure CLI ml 拡張機能 v1Python SDK azureml v1

この記事では、モデルに機械学習をプロファイルして、Web サービスとしてモデルをデプロイするときにモデルに割り当てる必要がある CPU とメモリの量を判断する方法について説明します。

重要

この記事は、CLI v1 と SDK v1 に適用されます。 このプロファイル手法は、CLI または SDK の v2 では使用できません。

重要

この記事の Azure CLI コマンドの一部では、Azure Machine Learning 用に azure-cli-ml、つまり v1 の拡張機能を使用しています。 v1 拡張機能のサポートは、2025 年 9 月 30 日に終了します。 その日付まで、v1 拡張機能をインストールして使用できます。

2025 年 9 月 30 日より前に、ml (v2) 拡張機能に移行することをお勧めします。 v2 拡張機能の詳細については、Azure ML CLI 拡張機能と Python SDK v2 に関するページを参照してください。

前提条件

この記事では、Azure Machine Learning でモデルをトレーニングして登録したことを想定しています。 Azure Machine Learning での scikit-learn モデルのトレーニングと登録の例については、こちらのサンプル チュートリアルを参照してください。

制限事項

  • お使いのワークスペースの Azure Container Registry (ACR) が仮想ネットワーク内にある場合、プロファイルは機能しません。

プロファイラーの実行

モデルを登録して、そのデプロイに必要な他のコンポーネントを準備したら、デプロイされたサービスで必要とされる CPU とメモリを決定できます。 モデルを実行して CPU 使用率、メモリ使用率、応答の待機時間などの情報を返す、サービスのプロファイル テストを行います。 また、リソースの使用状況に基づいて CPU とメモリに関する推奨事項も提示されます。

モデルをプロファイリングするには、以下が必要になります。

  • 登録済みのモデル。
  • エントリ スクリプトと推論環境の定義に基づく推論構成。
  • 単一列の表形式のデータセット。各行には、サンプルの要求データを表す文字列が含まれています。

重要

現時点では、要求データが文字列であることを期待するサービスのプロファイリングのみがサポートされています。たとえば、文字列のシリアル化された JSON、テキスト、文字列のシリアル化された画像などです。データセット (文字列) の各行の内容は、HTTP 要求の本文に置かれ、スコアリングのためにモデルをカプセル化するサービスに送信されます。

重要

ChinaEast2 リージョンと USGovArizona リージョンでは、最大 2 つの CPU のプロファイルのみがサポートされています。

以下に、入力データセットを作成して、受信する要求データにシリアル化された JSON が含まれていることを想定するサービスをプロファイルできる方法の例を示します。 ここでは、要求データの内容が同じである 100 個のインスタンスに基づくデータセットを作成しました。 実際のシナリオでは、モデル リソースの使用状況/動作が入力に依存している場合は特に、さまざまな入力を含むより規模の大きいデータセットを使用することをお勧めします。

適用対象: Python SDK azureml v1

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)

サンプル要求データを含むデータセットを準備したら、推論構成を作成します。 推論構成は、score.py と環境定義に基づきます。 次の例に、推論構成を作成してプロファイリングを実行する方法を示します。

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()

適用対象: Azure CLI ml 拡張機能 v1

次のコマンドでは、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>

ヒント

プロファイリングによって返された情報を保持するには、モデルのタグまたはプロパティを使用します。 タグまたはプロパティを使用すると、データがモデルと共にモデル レジストリに格納されます。 次の例は、requestedCpu および requestedMemoryInGb 情報を含む新しいタグを追加する方法を示しています。

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

次のステップ