次の方法で共有


ローカルでのモデル デプロイを使用したトラブルシューティング

重要

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

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

重要

この記事では、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 Python SDK v2SDK v2 リファレンスとは」を参照してください。

Azure Container Instances (ACI) または Azure Kubernetes Service (AKS) へのデプロイのトラブルシューティングの最初の手順として、ローカルでのモデル デプロイを試してください。 ローカルの Web サービスを使用すると、Azure Machine Learning の一般的な Docker Web サービスのデプロイ エラーを見つけて修正することがより簡単にできます。

前提条件

  • Azure サブスクリプション無料版または有料版の Azure Machine Learning をお試しください。
  • オプション A (推奨) - Azure Machine Learning コンピューティング インスタンスでローカルにデバッグする
  • オプション B - お使いのコンピューティングでローカルにデバッグする
  • オプション C - Azure Machine Learning 推論 HTTP サーバーを使用したローカル デバッグを有効にします。
    • Azure Machine Learning 推論 HTTP サーバーは、ローカルの開発環境で入力スクリプト (score.py) を簡単に検証できる Python パッケージです。 スコアリング スクリプトに問題がある場合、サーバーからエラーが返されます。 また、エラーが発生した場所も返されます。
    • サーバーは、継続的インテグレーションとデプロイ パイプラインで検証ゲートを作成するときにも使用できます。 たとえば、候補のスクリプトでサーバーを起動し、ローカル エンドポイントに対してテスト スイートを実行します。

Azure Machine Learning 推論 HTTP サーバー

ローカル推論サーバーを使用すると、エントリ スクリプト (score.py) をすばやくデバッグできます。 基になるスコア スクリプトにバグがある場合、サーバーはモデルの初期化やサービスの提供に失敗します。 代わりに、例外と、問題が発生した場所がスローされます。 Azure Machine Learning 推論 HTTP サーバーの詳細

  1. azureml-inference-server-http フィードから パッケージをインストールします。

    python -m pip install azureml-inference-server-http
    
  2. サーバーを起動し、エントリ スクリプトとして score.py を設定します。

    azmlinfsrv --entry_script score.py
    
  3. curl を使用して、スコアリング要求をサーバーに送信します。

    curl -p 127.0.0.1:5001/score
    

注意

Azure machine learning 推論 HTTP サーバーに関する「よく寄せられる質問」をご覧ください。

ローカル デバッグ

MachineLearningNotebooks リポジトリにあるサンプルのローカル展開ノートブックから、実行可能な例を探索します。

警告

ローカル Web サービスのデプロイは、運用シナリオではサポートされていません。

ローカルにデプロイするには、LocalWebservice.deploy_configuration() を使用してデプロイ構成を作成するようにコードを変更します。 次に、Model.deploy() を使用して、サービスをデプロイします。 次の例では、モデル (モデル変数に含まれる) をローカル Web サービスとしてデプロイします。

適用対象:Azure Machine Learning SDK v1 for Python

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice


# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
    ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)

独自の conda 仕様 YAML を定義する場合、pip の依存関係として 1.0.45 以降のバージョンの azureml-defaults を列挙します。 このパッケージは、Web サービスとしてモデルをホストするために必要です。

この時点で、通常どおりにサービスを操作できます。 次のコードは、サービスにデータを送信する方法を示しています。

import json

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]
]})

test_sample = bytes(test_sample, encoding='utf8')

prediction = service.run(input_data=test_sample)
print(prediction)

Python 環境のカスタマイズの詳細については、トレーニングとデプロイのための環境の作成と管理に関するページを参照してください。

サービスの更新

ローカル テスト中に、ログ記録を追加したり、発見した問題の解決を試みるために、score.py ファイルを更新することが必要な場合があります。 変更を score.py ファイルに再度読み込むには、reload() を使用します。 たとえば、次のコードは、サービスのスクリプトを再度読み込み、サービスにデータを送信します。 データは、更新された score.py ファイルを使用してスコア付けされます。

重要

reload メソッドは、ローカル デプロイでのみ使用できます。 デプロイを別のコンピューティング先に更新する方法については、Web サービスを更新する方法に関する記事を参照してください。

service.reload()
print(service.run(input_data=test_sample))

注意

スクリプトは、サービスによって使用される InferenceConfig オブジェクトによって指定された場所から再度読み込まれます。

モデル、Conda の依存関係、またはデプロイ構成を変更するには、update() を使用します。 次の例では、サービスで使用されるモデルを更新します。

service.update([different_model], inference_config, deployment_config)

サービスの削除

サービスを削除するには、delete() を使用します。

Docker ログを確認する

サービス オブジェクトから詳細な Docker エンジン ログ メッセージを出力できます。 ACI、AKS、およびローカル デプロイのログを表示できます。 次の例は、ログを出力する方法を示しています。

# if you already have the service object handy
print(service.get_logs())

# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())

ログに Booting worker with pid: <pid> の行が何度も表示されている場合、これはワーカーを起動するのに十分なメモリがないことを意味します。 このエラーを解決するには、memory_gb にある deployment_config の値を増やします

次のステップ

デプロイの詳細については、以下を参照してください。