次の方法で共有


Model Serving のデバッグ ガイド

この記事では、モデル提供エンドポイントを使用するときにユーザーが遭遇する可能性がある一般的な問題のデバッグ手順について説明します。 一般的な問題には、エンドポイントの初期化または開始に失敗したときにユーザーが遭遇するエラー、コンテナーに関連するビルド エラー、エンドポイントでのモデルの操作中または実行中の問題などがあります。

:::tip デバッグ前に検証デプロイに問題がありますか? デプロイ前の検証から始めて、発生する前に一般的な問題をキャッチします。 :::

コンテナー ビルドをデバッグする

Databricks では、ワークロードに対応するモデルのエラーのデバッグとトラブルシューティングのためにログを確認することをお勧めします。 ログとその表示方法については、「モデルの品質とエンドポイントの正常性を監視する」を参照してください。

ワークスペース UI のイベント ログ ([ イベント ] タブをクリック) には、コンテナー ビルドの進行状況に関する情報が含まれています。 成功したコンテナーのビルドは、メッセージ SERVED_ENTITY_CONTAINER_EVENTと共にContainer image creation finished successfullyイベントの種類によって強調表示されます。 エンドポイントの作成が 1 時間後にビルド イベントまたはメッセージが表示されない場合は、Databricks のサポートにお問い合わせください。

ビルドが成功したが、他のエラーが発生した場合は、「 コンテナーのビルドが成功した後のデバッグ」を参照してください。 ビルドが失敗した場合は、「 コンテナービルドの失敗後のデバッグ」を参照してください。

コンテナーのビルドが成功した後のデバッグ

コンテナーが正常にビルドされた場合でも、モデルを実行するとき、またはエンドポイント自体の操作中に、問題が発生する可能性があります。 次のサブセクションでは、一般的な問題とそのトラブルシューティング方法について詳しく説明します。

モデル コードが MlflowException エラーを返す場合は、応答コードが 4xx 応答にマップされることを想定してください。 Databricks では、これらのモデル コード エラーは、結果のエラー メッセージに基づいて解決できるため、顧客が原因で発生したエラーと見なされます。 5xx エラー コードは、Databricks に障害が発生しているエラーを伝えるために予約されています。

依存関係が不足しています

An error occurred while loading the model. No module named <module-name>.のようなエラーが発生する可能性があります。これは、依存関係がコンテナーに存在しない可能性があることを示している可能性があります。 コンテナーのビルドに含める必要があるすべての依存関係が正しく示されていることを確認してください。 カスタム ライブラリに特に注意し、.whl ファイルがアーティファクトとして含まれていることを確認してください。

モデルが失敗するか、要求がエンドポイントに送信されたときにタイムアウトする

モデルで Encountered an unexpected error while evaluating the model. Verify that the input is compatible with the model for inference. が呼び出されると、predict() のようなエラーが発生する場合があります。

このエラーは、 predict() 関数のコードの問題を示している可能性があります。 Databricks では、モデルをノートブックで MLflow から読み込んで呼び出すことを推奨しています。 こうすることで、predict() 関数の問題が明確になり、メソッド内でエラーが発生している場所を確認できます。

失敗した要求の根本原因分析

エンドポイントへの要求が失敗した場合は、推論テーブルを使用して根本原因分析を実行できます。 有効にした場合、推論テーブルでは、クエリを実行するために、エンドポイントへのすべての要求と応答が Unity カタログ テーブルに自動的に記録されます。

推論テーブルにクエリを実行するには:

  1. ワークスペースで、[ サービス ] タブに移動し、エンドポイント名を選択します。
  2. [ 推論テーブル ] セクションで、推論テーブルの完全修飾名を見つけます。 たとえば、my-catalog.my-schema.my-table のようにします。
  3. Databricks ノートブックで次を実行します。
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    
  4. requestresponserequest_timestatus_codeなどの列を表示およびフィルター処理して、要求を理解し、結果を絞り込みます。
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    WHERE status_code != 200
    
  5. AI エージェントのエージェント トレースを有効にした場合は、 応答 列を参照して詳細なトレースを表示します。 AI エージェントの推論テーブルを有効にするを参照してください。

ワークスペースがプロビジョニングされたコンカレンシーを超えている

Workspace exceeded provisioned concurrency quota エラーが表示される場合があります。 これは、プロビジョニングされたコンカレンシーのワークスペース クォータに達したことを示します。 コンカレンシーの制限の詳細については、「 モデル サービスの制限とリージョン 」を参照してください。

このクォータを解放するには、未使用 のエンドポイントを削除 または 停止 します。

この制限は、リージョンの可用性に応じて増やすことができます。 Databricks アカウント チームに連絡し、ワークスペース ID を提示してコンカレンシーの増加を要求してください。

ワークスペースが並列要求の制限を超えています

次の 429 エラーが表示される場合があります: Exceeded max number of parallel requests. Please contact your Databricks representative to increase the limit。 この制限は、並列で送信できる要求の最大数でワークスペースの制限に達したことを示します。 この制限の詳細については、「 モデル サービスの制限とリージョン 」を参照してください。

Databricks では、この制限が削除 されたルート最適化エンドポイントに移行することをお勧めします。 最適化されたエンドポイントのルーティングに移行できない場合は、推論要求を送信するクライアントの数を減らすか、Databricks 担当者に連絡してクォータの引き上げを依頼できます。

同時要求が多すぎます

次の 429 エラーが発生する可能性があります。 Too many concurrent requests. Consider increasing the provisioned concurrency of the served entity. このエラーは、エンドポイントの現在のプロビジョニングされたコンカレンシーが受信トラフィック ボリュームを処理できないことを示します。 エンドポイントの自動スケールを有効にした場合、システムは、負荷の増加を処理するために、エンドポイントの構成された制限まで追加のコンカレンシーを自動的にプロビジョニングします。 自動スケールが有効になっていない場合は、プロビジョニングされたコンカレンシーを手動で増やすか、トラフィックの急増を処理するための自動スケールを有効にすることを検討してください。

コンテナーのビルドエラー後のデバッグ

このセクションでは、ビルドが失敗したときに発生する可能性がある問題について詳しく説明します。

OSError: [Errno 28] No space left on device

No space left エラーは、大量のアーティファクトがモデルと共に不必要にログに記録されていることが原因である可能性があります。 MLflow で、無関係なアーティファクトがモデルと共にログに記録されていないことを確認し、スリム化されたパッケージを再デプロイしてみてください。

Unity Catalog からのモデルの提供に関する Azure Firewall の問題

次のエラーが表示される場合があります: Build could not start due to an internal error. If you are serving a model from UC and Azure Firewall is enabled, this is not supported by default.

解決のお手伝いが必要な場合は、Databricks アカウント チームにお問い合わせください。

GPU の可用性がないためにビルドが失敗する

GPU の供給と可用性の制限により、GPU ビルドは次のエラーで失敗する可能性があります: Build could not start due to an internal error - please contact your Databricks representative.

解決のお手伝いが必要な場合は、Databricks アカウント チームにお問い合わせください。 リージョンの可用性に応じて、チームはより多くの GPU リソースをプロビジョニングできます。

インストールされているライブラリ パッケージのバージョン

Databricks では、すべての重要なライブラリをモデルの依存関係として定義し、環境間で一貫性のある再現可能なモデル動作を保証することをお勧めします。 ビルド ログでは、正しくインストールされているパッケージのバージョンを確認できます。

  • MLflow バージョンの場合、バージョンが指定されていない場合、Model Serving は最新バージョンを使用します。
  • カスタム GPU サービスの場合、Model Serving は、パブリック PyTorch と Tensorflow のドキュメントに従って、推奨されるバージョンの cudacuDNN をインストールします。

flash-attnを必要とするログモデル

flash-attnが必要なモデルをログに記録する場合、Databricks ではカスタム ホイール バージョンのflash-attnを使用することをお勧めします。 そうしないと、 ModuleNotFoundError: No module named 'torch' などのビルド エラーが発生する可能性があります。

flash-attnのカスタム ホイール バージョンを使用するには、すべての pip 要件をリストとして指定し、パラメーターとして mlflow.transformers.log_model 関数に渡します。 また、 flash attn ホイールで指定されている CUDA バージョンと互換性のある pytorch、torch、torchvision のバージョンも指定する必要があります。

たとえば、Databricks では、CUDA 11.8 に次のバージョンとホイールを使用することをお勧めします。


logged_model=mlflow.transformers.log_model(
transformers_model=test_pipeline,
       artifact_path="artifact_path",
       pip_requirements=["--extra-index-url https://download.pytorch.org/whl/cu118", "mlflow==2.13.1", "setuptools<70.0.0", "torch==2.0.1+cu118", "accelerate==0.31.0", "astunparse==1.6.3", "bcrypt==3.2.0", "boto3==1.34.39", "configparser==5.2.0", "defusedxml==0.7.1", "dill==0.3.6", "google-cloud-storage==2.10.0", "ipython==8.15.0", "lz4==4.3.2", "nvidia-ml-py==12.555.43", "optree==0.12.1", "pandas==1.5.3", "pyopenssl==23.2.0", "pytesseract==0.3.10", "scikit-learn==1.3.0", "sentencepiece==0.1.99", "torchvision==0.15.2+cu118", "transformers==4.41.2", "https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.8/flash_attn-2.5.8+cu118torch2.0cxx11abiFALSE-cp311-cp311-linux_x86_64.whl"],
       input_example=input_example,
       registered_model_name=registered_model_name)