次の方法で共有


Azure Machine Learning Studio を使用してデザイナーでトレーニングされたモデルをデプロイする

重要

この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は、2025 年 3 月 31 日の時点で非推奨です。 サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。

2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning CLI と Python SDK v2 とは」 および SDK v2 リファレンスを参照してください

この記事では、Azure Machine Learning Studio でリアルタイムのオンライン エンドポイントにデザイナー モデルをデプロイする方法について説明します。

登録またはダウンロードしたら、他のモデルと同様に、デザイナーでトレーニングされたモデルを使用できます。 エクスポートされたモデルは、モノのインターネット (IoT) やローカルのデプロイなどのユース ケースでデプロイできます。

スタジオでのデプロイは、次の手順で構成されています。

  1. トレーニングされたモデルを登録します。
  2. モデルのエントリ スクリプトと Conda 依存関係ファイルをダウンロードします。
  3. (省略可能) エントリ スクリプトを構成します。
  4. コンピューティング先にモデルをデプロイします。

モデルをデザイナーに直接デプロイして、モデルの登録とファイルダウンロードの手順をスキップすることもできます。 これは、迅速なデプロイに役立ちます。 詳細については、「 チュートリアル: デザイナーを使用して機械学習モデルをデプロイする」を参照してください

デザイナーでトレーニングされたモデルは、SDK またはコマンド ライン インターフェイス (CLI) を使用してデプロイすることもできます。 詳細については、「機械学習モデルを Azure にデプロイする」を参照してください。

前提条件

モデルを登録する

トレーニング パイプラインが完了したら、トレーニングされたモデルを Azure Machine Learning ワークスペースに登録して、他のプロジェクトのモデルにアクセスできるようにします。

  1. Azure Machine Learning Studio にサインインし、完成したパイプラインを選択します。

  2. [モデルのトレーニング] コンポーネントをダブルクリックして、詳細ウィンドウを開きます。

  3. 詳細ウィンドウ で [出力 + ログ ] タブを選択します。

  4. [ モデルの登録] を選択します

    Train Modelコンポーネント右ペインのスクリーンショット。

  5. モデルの名前を入力し、 [保存] を選択します。

モデルを登録した後は、スタジオの [モデル] アセット ページで確認できます。

[モデル資産] ページの登録済みモデルのスクリーンショット。

エントリ スクリプト ファイルと Conda 依存関係ファイルをダウンロードする

Azure Machine Learning スタジオにモデルをデプロイするには、次のファイルが必要です。

  • エントリ スクリプト ファイル: トレーニング済みのモデルを読み込み、要求からの入力データを処理し、リアルタイムの推論を行い、結果を返します。 score.py コンポーネントが完了すると、デザイナーによって エントリ スクリプト ファイルが自動的に生成されます。

  • Conda 依存関係ファイル: Web サービスが依存する pip パッケージと conda パッケージを指定します。 conda_env.yaml コンポーネントが完了すると、デザイナーによって ファイルが自動的に作成されます。

これら 2 つのファイルは、モデルのトレーニング コンポーネントの右側のウィンドウでダウンロードできます。

  1. [Train Model](モデルのトレーニング) コンポーネントを選択します。

  2. [出力 + ログ] タブでフォルダー trained_model_outputs を選択します。

  3. conda_env.yaml ファイルと score.py ファイルをダウンロードします。

    右ペインのデプロイ用のダウンロード ファイルのスクリーンショット。

または、モデルを登録した後、 [モデル] アセット ページからファイルをダウンロードすることもできます。

  1. [モデル] アセット ページに移動します。

  2. デプロイするモデルを選択します。

  3. [成果物] タブを選択します。

  4. trained_model_outputs フォルダーを選択します

  5. conda_env.yaml ファイルと score.py ファイルをダウンロードします。

    モデルの詳細ページでのデプロイ用のダウンロード ファイルのスクリーンショット。

注意

score.py ファイルには、モデルのスコアリング コンポーネントとほぼ同じ機能が用意されています。 ただし、SVD レコメンダーのスコアリングワイドかつディープなレコメンダーのスコアリングVowpal Wabbit モデルのスコアリングのような一部のコンポーネントには、さまざまなスコアリング モード パラメーターがあります。 これらのパラメーターは、エントリ スクリプトで変更することもできます。

score.py ファイルでのパラメーターの設定の詳細については、エントリ スクリプトの構成に関するセクションを参照してください。

モデルをデプロイする

必要なファイルをダウンロードしたら、モデルをデプロイする準備は完了です。

  1. [モデル] アセット ページで、登録されているモデルを選択します。

  2. [ このモデルを使用する] を選択し、ドロップダウン メニューから [Web サービス ] を選択します。

    モデル資産ページの [デプロイ] ボタンのスクリーンショット。

  3. [構成] メニューで、次の情報を入力します。

    • エンドポイントの名前を入力します。
    • AksCompute または Azure Container Instance コンピューティングの種類を選択します。
    • コンピュータ名を選択します。
    • score.py をアップロードします。
    • conda_env.yml をアップロードします。

    ヒント

    [詳細設定] では、デプロイ用の CPU/メモリ容量とその他のパラメーターを設定できます。 これらの設定は、大量のメモリ (約 4 GB) を消費する PyTorch モデルなどの特定のモデルにとって重要です。

  4. [デプロイ] を選択して、モデルをオンライン エンドポイントとしてデプロイします。

    モデル資産ページでのモデルのデプロイのスクリーンショット。

オンライン エンドポイントを使用する

デプロイが成功した後は、[エンドポイント] アセット ページでエンドポイントを見つけることができます。 そこには、クライアントがエンドポイントにリクエストを送信するために使用できる REST エンドポイントがあります。

注意

また、デザイナーによってテスト用のサンプル データ json ファイルも生成されます。_samples.json は、trained_model_outputs フォルダーからダウンロードできます。

オンライン エンドポイントを使用するには、次のコード サンプルを使用します。


import json
from pathlib import Path
from azureml.core.workspace import Workspace, Webservice
 
service_name = 'YOUR_SERVICE_NAME'
ws = Workspace.get(
    name='WORKSPACE_NAME',
    subscription_id='SUBSCRIPTION_ID',
    resource_group='RESOURCEGROUP_NAME'
)
service = Webservice(ws, service_name)
sample_file_path = '_samples.json'
 
with open(sample_file_path, 'r') as f:
    sample_data = json.load(f)
score_result = service.run(json.dumps(sample_data))
print(f'Inference result = {score_result}')

Web サービスの入力として受け入れられるのは文字列だけなので、コンピューター ビジョンに関連するオンライン エンドポイントを使用する場合は、イメージをバイトに変換する必要があります。 サンプル コードを次に示します:

import base64
import json
from copy import deepcopy
from pathlib import Path
from azureml.studio.core.io.image_directory import (IMG_EXTS, image_from_file, image_to_bytes)
from azureml.studio.core.io.transformation_directory import ImageTransformationDirectory

# image path
image_path = Path('YOUR_IMAGE_FILE_PATH')

# provide the same parameter setting as in the training pipeline. Just an example here.
image_transform = [
    # format: (op, args). {} means using default parameter values of torchvision.transforms.
    # See https://pytorch.org/docs/stable/torchvision/transforms.html
    ('Resize', 256),
    ('CenterCrop', 224),
    # ('Pad', 0),
    # ('ColorJitter', {}),
    # ('Grayscale', {}),
    # ('RandomResizedCrop', 256),
    # ('RandomCrop', 224),
    # ('RandomHorizontalFlip', {}),
    # ('RandomVerticalFlip', {}),
    # ('RandomRotation', 0),
    # ('RandomAffine', 0),
    # ('RandomGrayscale', {}),
    # ('RandomPerspective', {}),
]
transform = ImageTransformationDirectory.create(transforms=image_transform).torch_transform

# download _samples.json file under Outputs+logs tab in the right pane of Train PyTorch Model component
sample_file_path = '_samples.json'
with open(sample_file_path, 'r') as f:
    sample_data = json.load(f)

# use first sample item as the default value
default_data = sample_data[0]
data_list = []
for p in image_path.iterdir():
    if p.suffix.lower() in IMG_EXTS:
        data = deepcopy(default_data)
        # convert image to bytes
        data['image'] = base64.b64encode(image_to_bytes(transform(image_from_file(p)))).decode()
        data_list.append(data)

# use data.json as input of consuming the endpoint
data_file_path = 'data.json'
with open(data_file_path, 'w') as f:
    json.dump(data_list, f)

エントリ スクリプトを構成する

SVD レコメンダーのスコアリングワイドかつディープなレコメンダーのスコアリングVowpal Wabbit モデルのスコアリングのようなデザイナーの一部のコンポーネントには、さまざまなスコアリング モード パラメーターがあります。

このセクションでは、エントリ スクリプト ファイルでこれらのパラメーターを更新する方法について説明します。

次の例では、トレーニング済みの Wide および Deep Recommender モデルの既定の動作を更新します。 既定では、score.py ファイルは、ユーザーと項目間の評価を予測するように Web サービスに指示します。

recommender_prediction_kind パラメーターを変更することで、エントリ スクリプト ファイルを変更して項目の推奨事項を作成し、推奨される項目を返すことができます。

import os
import json
from pathlib import Path
from collections import defaultdict
from azureml.studio.core.io.model_directory import ModelDirectory
from azureml.designer.modules.recommendation.dnn.wide_and_deep.score. \
    score_wide_and_deep_recommender import ScoreWideAndDeepRecommenderModule
from azureml.designer.serving.dagengine.utils import decode_nan
from azureml.designer.serving.dagengine.converter import create_dfd_from_dict

model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'trained_model_outputs')
schema_file_path = Path(model_path) / '_schema.json'
with open(schema_file_path) as fp:
    schema_data = json.load(fp)


def init():
    global model
    model = ModelDirectory.load(load_from_dir=model_path)


def run(data):
    data = json.loads(data)
    input_entry = defaultdict(list)
    for row in data:
        for key, val in row.items():
            input_entry[key].append(decode_nan(val))

    data_frame_directory = create_dfd_from_dict(input_entry, schema_data)

    # The parameter names can be inferred from Score Wide and Deep Recommender component parameters:
    # convert the letters to lower cases and replace whitespaces to underscores.
    score_params = dict(
        trained_wide_and_deep_recommendation_model=model,
        dataset_to_score=data_frame_directory,
        training_data=None,
        user_features=None,
        item_features=None,
        ################### Note #################
        # Set 'Recommender prediction kind' parameter to enable item recommendation model
        recommender_prediction_kind='Item Recommendation',
        recommended_item_selection='From All Items',
        maximum_number_of_items_to_recommend_to_a_user=5,
        whether_to_return_the_predicted_ratings_of_the_items_along_with_the_labels='True')
    result_dfd, = ScoreWideAndDeepRecommenderModule().run(**score_params)
    result_df = result_dfd.data
    return json.dumps(result_df.to_dict("list"))

Wide & Deep Recommender モデルと Vowpal Wabbit モデルの場合は、次の方法を使用してスコアリング モード パラメーターを構成できます。

  • パラメーター名は、 Score Vowpal Wabbit ModelScore Wide および Deep Recommender のパラメーター名の小文字とアンダースコアの組み合わせです。
  • Mode 型のパラメーター値は、対応するオプション名の文字列です。 前のコードの Recommender 予測の種類 を例として取ります。値は 'Rating Prediction'or 'Item Recommendation'できます。 その他の値は使用できません。

SVD Recommender のトレーニング済みモデルの場合、パラメーターの名前と値はわかりにくい場合があり、次の表を参照してパラメーターを設定する方法を決定できます。

SVD レコメンダーのスコアリングのパラメーター名 エントリ スクリプト ファイル内のパラメーター名
レコメンダーの予測の種類 予測タイプ
推奨項目の選択 推奨アイテム選択
1 人のユーザーの推奨プールの最小サイズ 最小推奨プールサイズ
ユーザーに推奨する項目の最大数 推奨アイテム数の最大値
項目の予測された評価をラベルと共に返すかどうか 評価を返す

次のコードは、SVD レコメンダーのパラメーターを設定する方法を示しています。これは、6 つのパラメーターすべてを使用して、予測された評価が添付された評価項目を推奨します。

score_params = dict(
        learner=model,
        test_data=DataTable.from_dfd(data_frame_directory),
        training_data=None,
        # RecommenderPredictionKind has 2 members, 'RatingPrediction' and 'ItemRecommendation'. You
        # can specify prediction_kind parameter with one of them.
        prediction_kind=RecommenderPredictionKind.ItemRecommendation,
        # RecommendedItemSelection has 3 members, 'FromAllItems', 'FromRatedItems', 'FromUndatedItems'.
        # You can specify recommended_item_selection parameter with one of them.
        recommended_item_selection=RecommendedItemSelection.FromRatedItems,
        min_recommendation_pool_size=1,
        max_recommended_item_count=3,
        return_ratings=True,
    )