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

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. Pypi フィードから 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 サービスとしてデプロイします。

適用対象:Python SDK azureml v1

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

Note

スクリプトは、サービスによって使用される 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> の行が何度も表示されている場合、これはワーカーを起動するのに十分なメモリがないことを意味します。 このエラーを解決するには、deployment_config にある memory_gb の値を増やします

次のステップ

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