次の方法で共有


Azure Machine Learning 推論 HTTP サーバーを使用してスコアリング スクリプトをデバッグする

Azure Machine Learning 推論 HTTP サーバーは、スコアリング関数を HTTP エンドポイントとして公開し、Flask サーバー コードと依存関係を単一のパッケージにラップしている Python パッケージです。 推論サーバーは、Azure Machine Learning でモデルをデプロイするときに使用される 推論用の事前構築済みの Docker イメージ に含まれています。 パッケージを単独で使用する場合は、運用環境用にモデルをローカルにデプロイできます。 また、ローカル開発環境でスコアリング (エントリ) スクリプトを簡単に検証することもできます。 スコアリング スクリプトに問題がある場合、推論サーバーはエラーとエラーの場所を返します。

また、推論サーバーを使用して、継続的インテグレーションとデプロイ パイプラインに検証ゲートを作成することもできます。 たとえば、候補スクリプトを使用して推論サーバーを起動し、ローカル エンドポイントに対してテスト スイートを実行できます。

この記事では、推論サーバーを使用してローカルでデバッグする開発者をサポートします。 この記事では、オンライン エンドポイントで推論サーバーを使用する方法について説明します。

前提条件

  • Python 3.8 以降
  • アナコンダ

推論サーバーは、Windows および Linux ベースのオペレーティング システムで実行されます。

オンライン エンドポイント用のローカル デバッグ オプションを調べる

クラウドにデプロイする前にエンドポイントをローカルでデバッグすることで、コードと構成のエラーを早期にキャッチできます。 ローカル環境でのエンドポイントのデバッグには、次のようないくつかのオプションがあります。

次の表は、各オプションがさまざまなデバッグ シナリオで提供するサポートの概要を示しています。

シナリオ 推論サーバー ローカル エンドポイント
Docker イメージをリビルドすることなく、ローカルの Python 環境を更新する はい いいえ
スコアリング スクリプトを更新する はい はい
デプロイ構成を更新する (デプロイ、環境、コード、モデル) いいえ はい
Microsoft Visual Studio Code (VS Code) デバッガーを統合する はい はい

この記事では、推論サーバーの使用方法について説明します。

推論サーバーをローカルで実行する場合は、デプロイ コンテナーの構成を気にせずにスコアリング スクリプトのデバッグに集中できます。

スコアリング スクリプトをローカルでデバッグする

スコアリング スクリプトをローカルでデバッグするには、推論サーバーの動作をテストするためのオプションがいくつかあります。

  • ダミー スコアリング スクリプトを使用します。
  • VS Code を使用して 、azureml-inference-server-http パッケージを使用してデバッグします。
  • サンプル リポジトリから実際のスコアリング スクリプト、モデル ファイル、環境ファイルを実行します。

次のセクションでは、各オプションに関する情報を提供します。

ダミー スコアリング スクリプトを使用して推論サーバーの動作をテストする

  1. server_quickstartという名前のディレクトリを作成して、ファイルを保持します。

    mkdir server_quickstart
    cd server_quickstart
    
  2. パッケージの競合を回避するには、 myenvなどの仮想環境を作成し、アクティブ化します。

    python -m virtualenv myenv
    

    Linux では、source myenv/bin/activate コマンドを実行して仮想環境をアクティブにします。

    推論サーバーをテストした後、 deactivate コマンドを実行して Python 仮想環境を非アクティブ化できます。

  3. Python パッケージ インデックス (PyPI) フィードから azureml-inference-server-http パッケージをインストールします。

    python -m pip install azureml-inference-server-http
    
  4. エントリ スクリプトを作成します。 次の例では、基本的なエントリ スクリプトを作成し、score.py という名前のファイルに保存します。

    echo -e 'import time\ndef init(): \n\ttime.sleep(1) \n\ndef run(input_data): \n\treturn {"message":"Hello, World!"}' > score.py
    
  5. azmlinfsrv コマンドを使用して推論サーバーを起動し、score.py ファイルをエントリ スクリプトとして設定します。

    azmlinfsrv --entry_script score.py
    

    推論サーバーは 0.0.0.0 でホストされています。つまり、ホスティング マシンのすべての IP アドレスをリッスンします。

  6. curl ユーティリティを使用して、スコアリング要求を推論サーバーに送信します。

    curl -p 127.0.0.1:5001/score
    

    推論サーバーは、次の応答を投稿します。

    {"message": "Hello, World!"}
    
  7. テストが完了したら、 Ctrl+C を選択して推論サーバーを停止します。

score.py スコアリング スクリプト ファイルを変更できます。 その後、 azmlinfsrv --entry_script score.py コマンドを使用して推論サーバーをもう一度実行することで、変更をテストできます。

VS Code との統合

VS Code では、Azureml-inference-server-http パッケージを使用したデバッグに Python 拡張機能を使用できます。 VS Code には、デバッグ用の 2 つのモード ( 起動とアタッチ) が用意されています。

いずれかのモードを使用する前に、次のコマンドを実行して azureml-inference-server-http パッケージをインストールします。

python -m pip install azureml-inference-server-http

パッケージの競合を回避するには、推論サーバーを仮想環境にインストールします。 pip install virtualenv コマンドを使用して、構成の仮想環境を有効にすることができます。

起動モード

起動モードの場合は、次の手順に従って VS Code launch.json 構成ファイルを設定し、VS Code 内で推論サーバーを起動します。

  1. VS Code を起動し、score.py スクリプトを含むフォルダーを開きます。

  2. VS Code のそのワークスペースに対して、launch.json ファイルに次の構成を追加します。

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug score.py",
                "type": "debugpy",
                "request": "launch",
                "module": "azureml_inference_server_http.amlserver",
                "args": [
                    "--entry_script",
                    "score.py"
                ]
            }
        ]
      }
    
  3. VS Code でデバッグセッションを開始するには、実行>メニューのデバッグの開始を選択するか、F5キーを押します。

アタッチ モード

アタッチ モードの場合は、次の手順を実行して、VS Code と Python 拡張機能を使用して推論サーバー プロセスにアタッチします。

Linux の場合は、最初に gdb コマンドを実行して、sudo apt-get install -y gdb パッケージをインストールします。

  1. VS Code を起動し、score.py スクリプトを含むフォルダーを開きます。

  2. VS Code のそのワークスペースに対して、launch.json ファイルに次の構成を追加します。

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Attach using Process ID",
                "type": "debugpy",
                "request": "attach",
                "processId": "${command:pickProcess}",
                "justMyCode": true
            }
        ]
      }
    
  3. コマンド ウィンドウで、 azmlinfsrv --entry_script score.py コマンドを実行して推論サーバーを起動します。

  4. VS Code でデバッグ セッションを開始するには、次の手順を実行します。

    1. [ 実行>デバッグの開始] を選択するか、 F5 キーを押します。

    2. コマンド ウィンドウで、推論サーバーからログを検索して、 azmlinfsrv プロセスのプロセス ID を見つけます。

      推論サーバー ログを示すコマンド ウィンドウのスクリーンショット。1 つのログ ステートメントで、azmlinfsrv コマンドのプロセス ID が強調表示されます。

      gunicorn プロセスではなく、azmlinfsrv プロセスの ID を確認してください。

    3. VS Code デバッガーで、 azmlinfsrv プロセスの ID を入力します。

      VS Code プロセス ピッカーが表示されない場合は、ワークスペースの launch.json ファイルの processId フィールドにプロセス ID を手動で入力します。

起動モードとアタッチ モードでは、 ブレークポイントを 設定し、スクリプトを段階的にデバッグできます。

エンド ツー エンドの例を使用する

次の手順では、Azure Machine Learning サンプル リポジトリの サンプル ファイル を使用して推論サーバーをローカルで実行します。 サンプル ファイルには、スコアリング スクリプト、モデル ファイル、環境ファイルが含まれます。 これらのサンプル ファイルの使用方法の他の例については、「オンライン エンドポイントを使用して機械学習モデルをデプロイおよびスコア付けする」をご覧ください。

  1. サンプル リポジトリを複製し、関連するサンプル ファイルを含むフォルダーに移動します。

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. conda を使用して、仮想環境を作成してアクティブ化します。

    この例では、azureml-inference-server-http パッケージが自動的にインストールされます。 パッケージは、conda.yaml ファイルに記載されている azureml-defaults パッケージの依存ライブラリとして含まれています。

    # Create the environment from the YAML file.
    conda env create --name model-env -f ./environment/conda.yaml
    # Activate the new environment.
    conda activate model-env
    
  3. スコアリング スクリプト、オンラインスコアリング/score.py を確認します。

    import os
    import logging
    import json
    import numpy
    import joblib
    
    
    def init():
        """
        This function is called when the container is initialized/started, typically after create/update of the deployment.
        You can write the logic here to perform init operations like caching the model in memory
        """
        global model
        # AZUREML_MODEL_DIR is an environment variable created during deployment.
        # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
        # Please provide your model's folder name if there is one
        model_path = os.path.join(
            os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
        )
        # deserialize the model file back into a sklearn model
        model = joblib.load(model_path)
        logging.info("Init complete")
    
    
    def run(raw_data):
        """
        This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
        In the example we extract the data from the json input and call the scikit-learn model's predict()
        method and return the result back
        """
        logging.info("model 1: request received")
        data = json.loads(raw_data)["data"]
        data = numpy.array(data)
        result = model.predict(data)
        logging.info("Request processed")
        return result.tolist()
    
  4. スコアリング スクリプトとモデル フォルダーへのパスを指定して、推論サーバーを実行します。

    デプロイ時に、モデル フォルダーへのパスを格納するために、 AZUREML_MODEL_DIR 変数が定義されます。 model_dir パラメーターでその値を指定します。 スコアリング スクリプトを実行すると、 AZUREML_MODEL_DIR 変数から値が取得されます。

    この場合、スコアリング スクリプトはサブディレクトリをmodel/sklearn_regression_model.pklとして指定するため、現在のディレクトリ./model_dir値として使用します。

    azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
    

    推論サーバーが起動し、スコアリング スクリプトが正常に呼び出されると、 サンプルのスタートアップ ログ が開きます。 そうでない場合は、ログでエラー メッセージが示されます。

  5. 次の手順を実行して、サンプル データを使用してスコアリング スクリプトをテストします。

    1. 別のコマンド ウィンドウを開き、 azmlinfsrv コマンドを実行したのと同じ作業ディレクトリに移動します。

    2. 次の curl ユーティリティを使用して、推論サーバーに要求の例を送信し、スコア付け結果を受け取ります。

      curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
      

      スコアリング スクリプトに問題がない場合、スクリプトはスコアリングの結果を返します。 問題が発生した場合は、スコアリング スクリプトを更新してから推論サーバーを再度起動して、更新されたスクリプトをテストできます。

推論サーバー ルートを確認する

推論サーバーは、既定では次のルートでポート 5001 でリッスンします。

名前 ルート
Liveness Probe 127.0.0.1:5001/
スコア 127.0.0.1:5001/score
OpenAPI (Swagger) 127.0.0.1:5001/swagger.json

推論サーバーのパラメーターを確認する

推論サーバーは、次のパラメーターを受け入れます。

パラメーター 必須 既定値 説明
entry_script 正しい 該当なし スコアリング スクリプトへの相対パスまたは絶対パスを識別します
model_dir いいえ 該当なし 推論に使用されるモデルを保持するディレクトリへの相対パスまたは絶対パスを識別します。
port いいえ 5001 推論サーバーのサービス ポートを指定します
worker_count いいえ 1 同時実行要求を処理するワーカー スレッドの数を提供します
appinsights_instrumentation_key いいえ 該当なし ログが発行される Application Insights のインスタンスのインストルメンテーション キーを提供します
access_control_allow_origins いいえ 該当なし 指定した配信元に対してクロスオリジン リソース共有 (CORS) を有効にします。複数の配信元はコンマ (,) で区切られます(例: microsoft.com, bing.com

推論サーバー要求の処理を調べる

次の手順では、推論サーバー ( azmlinfsrv) が受信要求を処理する方法を示します。

  1. Python CLI ラッパーは、推論サーバーのネットワーク スタックを囲み、推論サーバーを起動するために使用されます。

  2. クライアントが推論サーバーに要求を送信します。

  3. 推論サーバーは 、Web サーバー ゲートウェイ インターフェイス (WSGI) サーバーを介して要求を送信し、次のいずれかの Flask ワーカー アプリケーションに要求をディスパッチします。

  4. Flask ワーカー アプリは要求を処理します。これには、エントリ スクリプトとすべての依存関係の読み込みが含まれます。

  5. エントリ スクリプトが要求を受け取ります。 エントリ スクリプトは、読み込まれたモデルに対して推論呼び出しを行い、応答を返します。

推論サーバーがどのように開始され、要求が Flask ワーカー アプリに送信され、次にユーザー コードに送信されるかを示す図。

推論サーバー のログを調べる

推論サーバー テストのログ データを取得するには、次の 2 つの方法があります。

  • azureml-inference-server-http パッケージをローカルで実行し、ログ出力を表示します。
  • オンライン エンドポイントを使って、コンテナー ログを表示します。 推論サーバーのログには、Azure Machine Learning Inferencing HTTP server <バージョン> という 名前が付いています。

バージョン 0.8.0 以降、ログ形式が変更されています。 ログで想定とは異なるスタイルが使われている場合は、azureml-inference-server-http パッケージを最新バージョンに更新します。

スタートアップ ログを表示する

推論サーバーが起動すると、ログには次の初期サーバー設定が表示されます。

Azure ML Inferencing HTTP server <version>


Server Settings
---------------
Entry Script Name: <entry-script>
Model Directory: <model-directory>
Config File: <configuration-file>
Worker Count: <worker-count>
Worker Timeout (seconds): None
Server Port: <port>
Health Port: <port>
Application Insights Enabled: false
Application Insights Key: <Application-Insights-instrumentation-key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access-control-allow-origins>
Create dedicated endpoint for health: <health-check-endpoint>


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:<port>/
Score:          POST  127.0.0.1:<port>/score

<logs>

たとえば、エンドツーエンドの例の手順を実行して推論サーバー 実行すると、ログには次の情報が含まれます。

Azure ML Inferencing HTTP server v1.2.2


Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Config File: None
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Health Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/1.2.2
CORS for the specified origins: None
Create dedicated endpoint for health: None

Server Routes
---------------
Liveness Probe: GET   127.0.0.1:5001/
Score:          POST  127.0.0.1:5001/score

2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Scoring timeout is set to 3600000
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Worker with pid 32756 ready for serving traffic

ログのデータ形式を理解する

ランチャー スクリプトを除く推論サーバーのすべてのログは、次の形式でデータを表示します。

<UTC-time> <level> [<process-ID>] <logger-name> - <message>

各エントリは、次のコンポーネントで構成されます。

  • <UTC-time>: エントリがログに入力された時刻
  • <level>: エントリの ログ レベル の最初の文字 (ERROR の E 、INFO の I など)
  • <process-ID>: エントリに関連付けられているプロセスの ID
  • <logger-name>: ログ エントリに関連付けられているリソースの名前
  • <message>: ログ メッセージの内容

Python には 6 つのレベルのログ記録があります。 各レベルには、重大度に応じて割り当てられた数値があります。

ログ記録レベル 数値
危うい 50
エラー 40
警告 30
INFO 20
デバッグ 10
未設定 0

推論サーバーに関する問題のトラブルシューティング

次のセクションでは、推論サーバーの基本的なトラブルシューティングのヒントを示します。 オンライン エンドポイントのトラブルシューティングを行うには、「 オンライン エンドポイントのデプロイとスコアリングのトラブルシューティング」を参照してください。

インストールしたパッケージを確認する

インストールされているパッケージに関する問題に対処するには、次の手順に従います。

  1. Python 環境にインストールされているパッケージとバージョンに関する情報を収集します。

  2. 環境ファイルで、指定されている azureml-inference-server-http Python パッケージのバージョンを確認します。 Azure Machine Learning 推論 HTTP サーバー のスタートアップ ログで、表示されている推論サーバーのバージョンを確認します。 2 つのバージョンが一致することを確認します。

    場合によっては、pip 依存関係リゾルバーによって予期しないパッケージ バージョンがインストールされます。 インストールされているパッケージとバージョンを修正するには、pip を実行する必要がある場合があります。

  3. Flask またはその依存関係を環境内で指定した場合は、これらの項目を削除します。

    • 依存パッケージには、flaskjinja2itsdangerouswerkzeugmarkupsafeclick が含まれます。
    • flask パッケージは、推論サーバー パッケージの依存関係として一覧表示されます。 最適な方法は、推論サーバーが flask パッケージをインストールできるようにすることです。
    • 新しいバージョンの Flask をサポートするように推論サーバーが構成されている場合、推論サーバーはパッケージの更新プログラムが使用可能になると自動的に受信します。

推論サーバーのバージョンを確認する

サーバー パッケージ azureml-inference-server-http は PyPI に公開されています。 PyPI ページには、変更ログとパッケージのすべてのバージョンが一覧表示されます。

初期パッケージ バージョンを使用する場合は、構成を最新バージョンに更新します。 次の表は、安定したバージョン、よくある問題、推奨される調整をまとめたものです。

パッケージのバージョン 説明 問題 解決策
0.4.x 日付が 20220601 以前および azureml-defaults パッケージ バージョン 0.1.34 から 1.43 のトレーニング イメージにバンドルされています。 最新の安定バージョンは 0.4.13 です。 0.4.11 より前のバージョンのサーバーでは、 can't import name Markup from jinja2など、Flask の依存関係の問題が発生する可能性があります。 可能であれば、最新バージョンのバージョン 0.4.13 または 1.4.x にアップグレードします。
0.6.x 20220516 以前の日付の推論イメージにプレインストールされています。 最新の安定バージョンは 0.6.1 です。 該当なし 該当なし
0.7.x Flask 2 をサポートします。 最新の安定バージョンは 0.7.7 です。 該当なし 該当なし
0.8.x 更新されたログ形式を使用します。 Python 3.6 のサポートを終了します。 該当なし 該当なし
1.0.x Python 3.7 のサポートを終了します。 該当なし 該当なし
1.1.x pydantic 2.0 に移行します。 該当なし 該当なし
1.2.x Python 3.11 のサポートを追加しました。 gunicornバージョン 22.0.0 に更新されます。 werkzeugをバージョン 3.0.3 およびそれ以降のバージョンに更新します。 該当なし 該当なし
1.3.x Python 3.12 のサポートを追加しました。 certifiバージョン 2024.7.4 にアップグレードします。 flask-corsバージョン 5.0.0 にアップグレードします。 gunicornパッケージとpydantic パッケージをアップグレードします。 該当なし 該当なし
1.4.x waitressバージョン 3.0.1 にアップグレードします。 Python 3.8 のサポートを終了します。 Flask 2.0 のアップグレードで要求オブジェクト コードが中断されないようにする互換性レイヤーを削除します。 互換性レイヤーに依存している場合は、要求オブジェクト コードが機能しない可能性があります。 スコア スクリプトを Flask 2 に移行します。

パッケージの依存関係を確認する

サーバー パッケージ azureml-inference-server-http に最も関連のある依存パッケージには、次のものが含まれます。

  • flask
  • opencensus-ext-azure
  • inference-schema

Python 環境で azureml-defaults パッケージを指定した場合、 azureml-inference-server-http パッケージは依存パッケージです。 依存関係は自動的にインストールされます。

ヒント

Azure Machine Learning SDK for Python v1 を使用し、Python 環境で azureml-defaults パッケージを明示的に指定しない場合、SDK によってパッケージが自動的に追加される可能性があります。 ただし、パッケージのバージョンは SDK バージョンに対してロックされます。 たとえば、SDK バージョンが 1.38.0 の場合、 azureml-defaults==1.38.0 エントリは環境の pip 要件に追加されます。

推論サーバーの起動時の TypeError

推論サーバーの起動時に、次の TypeError が発生することがあります。

TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

このエラーは、Python 環境に Flask 2 がインストールされているが、azureml-inference-server-http パッケージ バージョンが Flask 2 をサポートしていない場合に発生します。 Flask 2 のサポートは、 azureml-inference-server-http 0.7.0 パッケージ以降のバージョンと、 azureml-defaults 1.44 パッケージ以降のバージョンで利用できます。

  • Azure Machine Learning Docker イメージで Flask 2 パッケージを使用しない場合は、最新バージョンの azureml-inference-server-http または azureml-defaults パッケージを使用します。

  • Azure Machine Learning Docker イメージで Flask 2 パッケージを使用する場合は、イメージビルドのバージョンが July 2022 以降であることを確認します。

    イメージのバージョンは、コンテナー ログで確認できます。 たとえば、次のログ ステートメントを参照してください。

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    イメージのビルド日は、Materialization Build 表記の後に表示されます。 前の例では、イメージのバージョンは 20220708(2022 年 7 月 8 日)です。 この例のイメージは Flask 2 と互換性があります。

    類似のメッセージがコンテナー ログ内にない場合、そのイメージは古く、更新する必要があります。 コンピューティング統合デバイス アーキテクチャ (CUDA) イメージを使用していて、新しいイメージが見つからない場合は、 AzureML-Containers リポジトリを確認して、イメージが非推奨かどうかを確認します。 非推奨のイメージに対し、指定された代替バージョンを見つけることができます。

    オンライン エンドポイントで推論サーバーを使用する場合は、Azure Machine Learning Studio でログを見つけることもできます。 エンドポイントのページで、[ ログ ] タブを選択します。

SDK v1 を使用してデプロイし、デプロイ構成でイメージを明示的に指定しない場合、推論サーバーはローカル SDK ツールセットに一致するバージョンで openmpi4.1.0-ubuntu20.04 パッケージを適用します。 ただし、インストールされているバージョンは、イメージの利用可能な最新バージョンではない可能性があります。

SDK バージョン 1.43 の場合、推論サーバーは既定で openmpi4.1.0-ubuntu20.04:20220616 パッケージ バージョンをインストールしますが、このパッケージ バージョンは SDK 1.43 と互換性がありません。 デプロイに最新の SDK を使用していることを確認します。

イメージを更新できない場合は、環境ファイルに azureml-defaults==1.43 エントリまたは azureml-inference-server-http~=0.4.13 エントリをピン留めすることで、一時的に問題を回避できます。 これらのエントリは、 flask 1.0.xを使用して古いバージョンをインストールするように推論サーバーに指示します。

推論サーバーの起動時に ImportError または ModuleNotFoundError が発生する

推論サーバーの起動時に、ImportErrorModuleNotFoundErroropencensusjinja2など、特定のモジュールでmarkupsafeまたはclickが発生する場合があります。 次の例は、エラー メッセージを示しています。

ImportError: cannot import name 'Markup' from 'jinja2'

インポートとモジュールのエラーは、Flask の依存関係を互換性のあるバージョンにピン留めしないバージョン 0.4.10 以前のバージョンの推論サーバーを使用すると発生します。 この問題を回避するには、新しいバージョンの推論サーバーをインストールします。