トレーシングに関する FAQ
Q: トレーシングによって生じるレイテンシーのオーバーヘッドはどれくらいですか?
トレースは、パフォーマンスへの影響を最小限に抑えるために非同期的に書き込まれます。ただし、トレースでは、特にトレース・サイズが大きい場合に、遅延が最小限に抑えられます。MLflow では、アプリケーションをテストして、レイテンシの影響のトレースを理解してから、本番運用にデプロイすることをお勧めします。
次の表は、トレース サイズによる待機時間の影響の概算を示しています。
要求あたりのトレース サイズ | 応答速度の遅延 (ミリ秒) への影響 |
---|---|
~10キロバイト | ~1ミリ秒 |
~1メガバイト | 50 ~ 100 ミリ秒 |
10MB | 150ミリ秒~ |
Q:MLflow Tracing のDatabricks のレート制限とクォータとは何ですか?
MLflow TracingDatabricksワークスペース内で を使用する場合、サービスの安定性と公正な使用を確保するために、次のクォータとレート制限が適用されます。これらの制限はワークスペースごとです。
-
エクスペリメントあたりのトレースの最大数 :
- デフォルト: 100,000 トレース。
- この制限は、要求に応じて大幅に引き上げることができます(たとえば、エクスペリメントあたり100万トレースを超えるなど)。 Databricksサポートに連絡して、増額をリクエストしてください。
-
トレース作成率 :
- 制限: ワークスペースあたり 200 クエリ/秒 (QPS)。
- これは、新しいトレース (およびその初期スパン) を作成してログに記録できる速度です。
-
トレースのダウンロード速度 :
- 制限: ワークスペースあたり 200 QPS。
- これは、
mlflow.get_trace()
などの完全なトレース・データをフェッチする操作に適用されます。
-
トレース検索速度 :
- 制限: ワークスペースあたり 25 QPS。
- これは、フィルター条件に基づいてトレースのリストをクエリする
mlflow.search_traces()
などの操作に適用されます。
これらの制限を超えると、要求が調整されたり、エラーが発生したりする可能性があります。本番運用ワークロードの上限を引き上げることが予想される場合は、 Databricks サポートに要件についてご相談ください。
Q: MLflow UI でトレースを開くことができません。どうしたらいいでしょう。
MLflow UI でトレースが表示されない理由は複数考えられます。
-
トレースがまだ完了していない : トレースがまだ収集されている場合、MLflow は UI にスパンを表示できません。すべてのスパンが「OK」または「ERROR」ステータスで適切に終了していることを確認します。
-
ブラウザーのキャッシュが古い : MLflow を新しいバージョンにアップグレードすると、ブラウザーのキャッシュに古いデータが含まれ、UI にトレースが正しく表示されない可能性があります。ブラウザのキャッシュをクリアし (Shift+F5)、ページを更新します。
Q: モデルの実行が停止し、トレースが永遠に「進行中」になります。
モデルまたはエージェントが長時間実行される操作や無限ループに陥り、トレースが「進行中」状態のままになることがあります。
これを防ぐには、 MLFLOW_TRACE_TIMEOUT_SECONDS
環境変数を使用してトレースのタイムアウトを設定します。トレースがタイムアウトを超えた場合、MLflow は ERROR
ステータスでトレースを自動的に停止し、バックエンドにエクスポートするため、スパンを分析して問題を特定できます。デフォルトでは、タイムアウトは設定されていません。
タイムアウトは MLflow トレースにのみ適用されます。メイン・プログラム、モデル、またはエージェントは、トレースが停止しても実行を続けます。
たとえば、次のコードでは、タイムアウトを 5 秒に設定し、MLflow が実行時間の長い操作を処理する方法をシミュレートします。
import mlflow
import os
import time
# Set the timeout to 5 seconds for demonstration purposes
os.environ["MLFLOW_TRACE_TIMEOUT_SECONDS"] = "5"
# Simulate a long-running operation
@mlflow.trace
def long_running():
for _ in range(10):
child()
@mlflow.trace
def child():
time.sleep(1)
long_running()
MLflow は、バックグラウンド スレッドでトレースの実行時間と有効期限を監視します。デフォルトでは、このチェックは毎秒実行され、リソースの消費はごくわずかです。間隔を調整する場合は、 MLFLOW_TRACE_TIMEOUT_CHECK_INTERVAL_SECONDS
環境変数を設定できます。
Q: マルチスレッドを実行すると、トレースが複数のトレースに分割されます。それらを 1 つのトレースに結合するにはどうすればよいですか?
MLflow Tracingは PythonContextVar に依存するため、各スレッドには デフォルト by 独自のトレース コンテキストがありますが、いくつかの追加の手順でマルチスレッド アプリケーション用の単一のトレースを生成することができます。詳細については、 マルチスレッド のセクションを参照してください。
Q: トレースを一時的に無効にするにはどうすればいいですか?
トレース を無効にする ために、 mlflow.tracing.disable
API は MLflow 内からのトレース データの収集を停止し、ログを記録しません
トレースに関する MLflow 追跡サービスへのデータ。
トレース を有効にする ために (一時的に無効になっていた場合)、 mlflow.tracing.enable
API はインストルメント化されたモデルのトレース機能を再度有効にします
が呼び出されます。
次のステップ
これらの推奨アクションとチュートリアルで旅を続けてください。
- トレースを使用してアプリを計測可能にする - アプリケーションにトレースを追加する方法について説明します
- トレースによる本番運用 observability - 本番運用環境のトレースを設定する
- アプリのデバッグと監視 - トレースを使用して問題のトラブルシューティングを行う
リファレンスガイド
関連する概念に関する詳細なドキュメントをご覧ください。
- トレーシングデータモデル - トレースとスパンの構造を理解する
- トレーシングの概念 - MLflow Tracingの基礎を学ぶ
- 手動トレースAPIs - 高度なトレース手法を探る