1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MLflow 3のトレース長期保存: Unity Catalog保存 vs トレースアーカイブの違いを解説

1
Last updated at Posted at 2026-01-27

はじめに

MLflow 3では、GenAIアプリケーションのトレースを長期保存するための方法として、主に2つのアプローチが提供されています。

  1. Unity Catalogへのトレース保存(OTEL形式)
  2. トレースのアーカイブ(Production Monitoringの一部)

一見似たような機能に見えますが、目的や仕組みが異なります。本記事では、これらの違いを整理し、ユースケースに応じた使い分けを解説します。

注意

  • Unity Catalogへのトレース保存(OTEL形式)は執筆時点ではベータ版です。
  • 執筆時点でサポートされているリージョンはAWSの場合、us-east-1、us-west-2です。

機能比較

観点 Unity Catalogへのトレース保存 トレースのアーカイブ
目的 トレースの主保存先をUCに変更 エクスペリメントのトレースを長期保存用にコピー
データ形式 OpenTelemetry(OTEL)互換形式 MLflow標準トレース形式
取り込みタイミング リアルタイム バックグラウンドジョブ(約15分ごと)
テーブル構成 3テーブル(logs, metrics, spans) 1テーブル(指定したDeltaテーブル)
設定方法 mlflow.tracing.set_destination() enable_databricks_trace_archival()
主なユースケース OTELエコシステム統合、UCベースのアクセス制御 既存運用の長期保存、スコアラー結果の保存

データフローの違い

2つの機能は、トレースがどのように保存されるかという点で根本的に異なります。

Unity Catalog保存の場合:

アプリケーションからのトレースは、MLflowエクスペリメントを経由せず、直接Unity Catalogテーブルに書き込まれます。リアルタイムでの取り込みが可能で、OTELフォーマットを採用しているため、他のOpenTelemetryツールとの互換性があります。

トレースアーカイブの場合:

アプリケーションからのトレースは、まずMLflowエクスペリメントに保存されます。その後、バックグラウンドジョブが約15分ごとに実行され、トレースとその評価結果(スコアラーのアセスメント)をDeltaテーブルにコピーします。

Unity Catalogへのトレース保存

概要

この機能は、MLflowトレースをOpenTelemetry互換形式でUnity Catalogテーブルに直接保存します。主な利点は以下の通りです。

  • Unity Catalogのスキーマ・テーブル権限によるアクセス制御
  • OTEL形式による外部ツールとの互換性
  • Databricks SQLによる直接クエリが可能
  • 無制限のトレース保存(Deltaテーブルの容量まで)

前提条件

  • Unity Catalog対応のワークスペース
  • Databricks SQLウェアハウス
  • MLflow 3.8.0以降
  • 対応リージョン: us-east-1, us-west-2(ベータ期間中)

セットアップ手順

1. UCテーブルの作成とエクスペリメントのリンク

import os
import mlflow
from mlflow.entities import UCSchemaLocation
from mlflow.tracing.enablement import set_experiment_trace_location

mlflow.set_tracking_uri("databricks")

# SQLウェアハウスIDを指定
os.environ["MLFLOW_TRACING_SQL_WAREHOUSE_ID"] = "<SQL_WAREHOUSE_ID>"

# エクスペリメント名を指定
experiment_name = "/Workspace/Users/takaaki.yayoi@databricks.com/20260128_trace_uc/uc_trace"

# Unity Catalogのカタログ・スキーマを指定
catalog_name = "takaakiyayoi_catalog"
schema_name = "agent_trace"

# エクスペリメントの作成または取得
if experiment := mlflow.get_experiment_by_name(experiment_name):
    experiment_id = experiment.experiment_id
else:
    experiment_id = mlflow.create_experiment(name=experiment_name)
print(f"Experiment ID: {experiment_id}")

# エクスペリメントをUCスキーマにリンク
result = set_experiment_trace_location(
    location=UCSchemaLocation(catalog_name=catalog_name, schema_name=schema_name),
    experiment_id=experiment_id,
)
print(result.full_otel_spans_table_name)
Experiment ID: 3820355417699380
2026/01/27 20:46:18 INFO mlflow.tracing.enablement: Successfully configured storage location for experiment `3820355417699380` to Databricks storage at UCSchemaLocation(catalog_name='takaakiyayoi_catalog', schema_name='agent_trace', _otel_spans_table_name='mlflow_experiment_trace_otel_spans', _otel_logs_table_name='mlflow_experiment_trace_otel_logs')
takaakiyayoi_catalog.agent_trace.mlflow_experiment_trace_otel_spans

2. 作成されるテーブルの確認

セットアップが完了すると、指定したスキーマに以下の3つのテーブルが作成されます。また、これらのテーブルを対象としたビューも作成されています。

  • mlflow_experiment_trace_otel_logs
  • mlflow_experiment_trace_otel_metrics
  • mlflow_experiment_trace_otel_spans

Screenshot 2026-01-28 at 5.56.40.png

3. トレースの記録

import mlflow
from mlflow.entities import UCSchemaLocation

mlflow.set_tracking_uri("databricks")

catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"

# 保存先をUCスキーマに設定
mlflow.tracing.set_destination(
    destination=UCSchemaLocation(
        catalog_name=catalog_name,
        schema_name=schema_name,
    )
)

# トレースを記録するサンプル関数
@mlflow.trace
def sample_function(x):
    return x + 1

# 実行
result = sample_function(100)
print(f"Result: {result}")

4. UIでのトレース確認

MLflowエクスペリメントUIの「Traces」タブでトレースを確認できます。SQLウェアハウスを選択して、UCテーブルからトレースを取得します。

Screenshot 2026-01-28 at 5.58.11.png

5. SQLでのクエリ

Databricks SQLを使用して、トレースデータを直接クエリできます。

SELECT 
    trace_id,
    span_id,
    name,
    start_time_unix_nano,
    end_time_unix_nano,
    attributes
FROM takaakiyayoi_catalog.agent_trace.mlflow_experiment_trace_otel_spans
ORDER BY start_time_unix_nano DESC
LIMIT 10
trace_id span_id name start_time_unix_nano end_time_unix_nano attributes
2d97d5af119507f0b52838b451cfbe89 606f187d0ce4b55c test 1769546880948103313 1769546881282770989 {"mlflow.traceRequestId":"trace:/takaakiyayoi_catalog.agent_trace/2d97d5af119507f0b52838b451cfbe89","mlflow.spanFunctionName":"test","mlflow.spanInputs":"{"x":100}","mlflow.spanType":"UNKNOWN","mlflow.spanOutputs":"101"}

権限設定

UCテーブルへの読み書きには、以下の権限が必要です。

  • カタログに対する USE_CATALOG
  • スキーマに対する USE_SCHEMA
  • 各テーブルに対する MODIFY および SELECT

ALL_PRIVILEGESでは不十分です。MODIFYSELECTを明示的に付与する必要があります。

トレースのアーカイブ

概要

トレースのアーカイブは、Production Monitoringの一部として提供される機能です。MLflowエクスペリメントに記録されたトレースと、それに付随するスコアラーの評価結果を、Unity Catalog Deltaテーブルに長期保存します。

主な特徴:

  • MLflowエクスペリメントからのトレースを自動的にDeltaテーブルにコピー
  • スコアラーによる評価結果(アセスメント)も一緒に保存
  • 約15分ごとにバックグラウンドジョブで同期
  • トレースサイズの制限なし

セットアップ手順

アーカイブの有効化

from mlflow.tracing.archival import enable_databricks_trace_archival

# 特定のエクスペリメントのトレースをアーカイブ
enable_databricks_trace_archival(
    delta_table_fullname="my_catalog.my_schema.archived_traces",
    experiment_id="YOUR_EXPERIMENT_ID",
)

アーカイブの無効化

from mlflow.tracing.archival import disable_databricks_trace_archival

# アーカイブを停止
disable_databricks_trace_archival(experiment_id="YOUR_EXPERIMENT_ID")

Production Monitoringとの連携

トレースアーカイブは、Production Monitoringのスコアラー機能と組み合わせて使用することで真価を発揮します。

from mlflow.genai.scorers import Safety, ScorerSamplingConfig

# スコアラーを登録・開始
safety_judge = Safety().register(name="safety_check")
safety_judge = safety_judge.start(
    sampling_config=ScorerSamplingConfig(sample_rate=1.0)
)

# アーカイブを有効化
# → トレースとスコアラーの評価結果がDeltaテーブルに保存される

どちらを選ぶべきか?

Unity Catalogへのトレース保存が適しているケース

  • OpenTelemetryエコシステムの他ツールと連携したい
  • UCの権限管理でトレースへのアクセスを制御したい
  • リアルタイムでトレースをクエリ・分析したい
  • サードパーティのOTELクライアントからトレースを送信したい

トレースアーカイブが適しているケース

  • 既存のMLflowエクスペリメントベースの運用を維持したい
  • Production Monitoringのスコアラー評価結果も一緒に保存したい
  • 15分程度の遅延が許容できる
  • シンプルな1テーブル構成で管理したい

併用も可能

両方の機能は排他的ではありません。要件に応じて、以下のような構成も可能です。

  • 開発環境: MLflowエクスペリメント + トレースアーカイブ
  • 本番環境: Unity Catalog直接保存(OTEL形式)

制限事項

Unity Catalogへのトレース保存

  • 取り込みレート: ワークスペースあたり100トレース/秒、テーブルあたり100MB/秒
  • 2TB超のデータでUIパフォーマンスが低下する可能性
  • 個別トレースの削除はSQLで直接実行が必要
  • ベータ期間中は対応リージョンが限定

トレースアーカイブ

  • 同期間隔は約15分(リアルタイムではない)
  • Production Monitoringが有効なワークスペースが必要

まとめ

MLflow 3では、トレースの長期保存に2つのアプローチが用意されています。

選択基準 Unity Catalog保存 トレースアーカイブ
リアルタイム性重視 -
OTEL互換性重視 -
スコアラー結果も保存 -
シンプルな構成 -

ユースケースに応じて適切な方法を選択し、GenAIアプリケーションの可観測性を確保しましょう。

参考リンク

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?