MLflowトレースをUnity Catalogに保存する
ベータ版
この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。「Databricks プレビューの管理」を参照してください。
Databricks 、OpenTelemetry 互換形式 (OTEL) を使用してMLflowトレースをUnity Catalogテーブルに保存することをサポートしています。 安心により、 MLflow経験ごとに整理されたトレースをMLflowコントロール プレーン サービスに保存します。 ただし、OTEL 形式を使用してUnity Catalogにトレースを保存すると、次の利点があります。
-
アクセス制御は、エクスペリメント レベルの ACL ではなく、 Unity Catalogスキーマとテーブル権限を通じて管理されます。 Unity Catalogテーブルにアクセスできるユーザーは、トレースがどの expperiment に属しているかに関係なく、それらのテーブルに保存されているすべてのトレースを表示できます。
-
トレース ID は
tr-<UUID>形式ではなく URI 形式を使用するため、外部システムとの互換性が向上します。 -
Delta テーブルに無制限のトレースを保存し、トレース データの長期保持と分析を可能にします。パフォーマンスに関する考慮事項を参照してください。
-
Databricks SQLウェアハウスを通じてSQLを使用してトレース データを直接クエリし、高度なアナリティクスとカスタム レポートを可能にします。
-
OTEL形式は他のOpenTelemetryクライアントおよびツールとの互換性を保証します
前提条件
-
Unity カタログ対応のワークスペース。
-
Unity Catalog でカタログとスキーマを作成する権限。
-
「OpenTelemetry on Databricks」プレビューが有効になっていることを確認します。「Databricks プレビューの管理」を参照してください。
-
Databricks SQL ウェアハウス。後で参照できるようにウェアハウス ID を保存します。
-
この機能がベータ版である間は、ワークスペースは次のいずれかのリージョンにある必要があります。
us-east-1us-west-2
-
お使いの環境に MLflow Python ライブラリ バージョン 3.8.0 以降がインストールされている:
Bashpip install mlflow[databricks]>=3.8.0 --upgrade --force-reinstall
セットアップ: UC テーブルを作成し、エクスペリメントをリンクする
トレースを保存するためのUnity Catalogテーブルを作成します。 次に、テーブルを含むUnity CatalogスキーマをMLflowエクスペリメントにリンクし、そのトレースを確実にテーブルに書き込みます。
# Example values for the placeholders below:
# MLFLOW_TRACING_SQL_WAREHOUSE_ID: "abc123def456" (found in SQL Warehouse URL)
# experiment_name: "/Users/user@company.com/traces"
# catalog_name: "main" or "my_catalog"
# schema_name: "mlflow_traces" or "production_traces"
import os
import mlflow
from mlflow.exceptions import MlflowException
from mlflow.entities import UCSchemaLocation
from mlflow.tracing.enablement import set_experiment_trace_location
mlflow.set_tracking_uri("databricks")
# Specify the ID of a SQL warehouse you have access to.
os.environ["MLFLOW_TRACING_SQL_WAREHOUSE_ID"] = "<SQL_WAREHOUSE_ID>"
# Specify the name of the MLflow Experiment to use for viewing traces in the UI.
experiment_name = "<MLFLOW_EXPERIMENT_NAME>"
# Specify the name of the Catalog to use for storing traces.
catalog_name = "<UC_CATALOG_NAME>"
# Specify the name of the Schema to use for storing traces.
schema_name = "<UC_SCHEMA_NAME>"
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}")
# To link an experiment to a trace location
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)
テーブルを検証する
セットアップ コードを実行すると、カタログ エクスプローラー UI のスキーマに 3 つの新しいUnity Catalogテーブルが表示されます。
mlflow_experiment_trace_otel_logsmlflow_experiment_trace_otel_metricsmlflow_experiment_trace_otel_spans
権限を付与する
DatabricksユーザーまたはサービスプリンシパルがUnity CatalogテーブルからMLflowトレースを読み書きするには、次の権限が必要です。
- カタログに対する USE_CATALOG 権限。
- スキーマに対する USE_SCHEMA 権限。
- 各
mlflow_experiment_trace_<type>テーブルに対する MODIFY および SELECT 権限。
ALL_PRIVILEGES Unity Catalogトレース テーブルにアクセスするには不十分です。 MODIFY 権限 と SELECT 権限を明示的に付与する必要があります。
Unity Catalogテーブルへのトレースのログ
テーブルを作成した後、トレースの保存先を指定して、さまざまなソースからテーブルにトレースを書き込むことができます。これをどのように行うかは、トレースのソースによって異なります。
- MLflow SDK
- Databricks App
- Model Serving endpoint
- 3rd party OTEL client
カタログとスキーマは、 mlflow.tracing.set_destination Python API を使用するか、 MLFLOW_TRACING_DESTINATION環境変数を設定することによって指定できます。
import mlflow
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
import os
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100)
mlflow >= 3.5.0を実行しているDatabricksアプリは、 DatabricksアプリのサービスプリンシパルがUnity Unity Catalog Unity Catalogにトレースを書き込むことができます。
トレース取り込みのためにDatabricksアプリのサービスプリンシパルにUnity Catalogテーブルへのアクセスを許可するには:
-
アプリの「 認証」 タブでアプリのサービスプリンシパル名を見つけます。
-
サービスプリンシパル
MODIFYとSELECTにlogsテーブルとspansテーブルへのアクセスを許可します。 -
トレース取り込み用のカタログとスキーマを設定するには、Databricks アプリ コードを更新します。
Pythonimport mlflow
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
import os
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100) -
Databricks アプリをデプロイします。
Databricksモデルサービング エンドポイントからUnity Catalogテーブルにトレースを書き込むには、パーソナル アクセス トークン (PAT) を構成する必要があります。
- ユーザーまたはサービスプリンシパル
MODIFYとSELECTに、logsテーブルとspansテーブルへのアクセスを許可します。 - ユーザーまたはサービスプリンパルシのPAT を生成します。
- PAT をDatabricksモデルサービング エンドポイントの環境変数構成に追加し、環境変数名として
DATABRICKS_TOKENを指定します。 - 書き込むトレースの場所を、環境変数名として
MLFLOW_TRACING_DESTINATIONを使用して、 Databricksモデルサービング エンドポイントの環境変数構成に"{catalog}.{schema}"文字列として追加します。
import mlflow
import os
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100)
トレースを OTEL 形式で保存する利点の 1 つは、OTEL をサポートするサードパーティのクライアントを使用してUnity Catalogテーブルに書き込むことができることです。 この方法で記述されたトレースは、ルート スパンがある限り、テーブルにリンクされたMLflowエクスペリメントに表示されます。 次の例は、OpenTelemetry OTLP エクスポーターを示しています。
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
# Span exporter configuration
otlp_trace_exporter = OTLPSpanExporter(
# Databricks hosted OTLP traces collector endpoint
endpoint="https://myworkspace.databricks.com/api/2.0/otel/v1/traces",
headers={
"content-type": "application/x-protobuf",
"X-Databricks-UC-Table-Name": "cat.sch.mlflow_experiment_trace_otel_spans",
"Authorization: Bearer MY_API_TOKEN"
},
)
UIでトレースを表示する
他のトレースを表示するのと同じ方法で、OTEL 形式で保存されたトレースを表示します。
-
ワークスペースで、 「体験」 に移動します。
-
トレースが記録されているエクスペリメントを見つけます。 たとえば、
mlflow.set_experiment("/Shared/my-genai-app-traces")によって設定されたエクスペリメント。 -
「Traces」 タブをクリックすると、そのエクスペリメントに記録されたすべてのトレースのリストが表示されます。

-
トレースをUnity Catalogテーブルに保存した場合、 Databricks SQLウェアハウスを使用してトレースを取得します。 ドロップダウン メニューからSQLウェアハウスを選択します。
-
別のスキーマを選択することもできます。代替スキーマを選択するときは、そのスキーマに OpenTelemetry テーブルがすでに含まれていることを確認してください。ドロップダウン メニューではテーブルは作成されません。

UI を使用してトレースを検索する方法の詳細については、 「 Databricks MLflow UI でトレースを表示する」を参照してください。
Unity Catalogスキーマのリンクを解除する
MLflowエクスペリメントからUnity Catalogスキーマのリンクを解除するには、 MLflowエクスペリメント UI から [Storage UC Schema] ドロップダウンをクリックし、 [Unlink schema] を選択します。
トレースはUnity Catalogスキーマに引き続き存在し、スキーマはいつでもMLflowエクスペリメントに再リンクできます。

制限事項
-
トレースの取り込みは、ワークスペースごとに 1 秒あたり 100 トレース、テーブルごとに 1 秒あたり 100 MB に制限されます。
-
2TB を超えるトレース データがテーブルに保存されると、UI パフォーマンスが低下する可能性があります。パフォーマンスに関する考慮事項を参照してください。
-
Unity Catalogに保存されているトレースの個々のトレースの削除はサポートされていません。 トレースを削除するには、 SQLを使用して、基礎となるUnity Catalogテーブルから行を直接削除する必要があります。 これは、 MLflow UI またはAPIを使用して削除できるエクスペリメント トレースと異なります。
-
MLflowエクスペリメントをUnity Catalogスキーマに接続する場合、エクスペリメントにリンクされているUnity Catalogスキーマに保存されているトレースのみにアクセスできます。 エクスペリメント内の既存のトレースは、 MLflowクライアントPython >= 3.5.0 からの検索では アクセスでき なくなります。 MLflow UI からも行えます。これらのトレースはエクスペリメントに保存されたままですが、エクスペリメントがUnity Catalogにリンクされている間は表示したり検索したりすることはできません。
MLflowエクスペリメントからスキーマのリンクを解除すると、既存のトレースにアクセスできるようになります。
-
取り込みスループットの制限は 1 秒あたり 200 クエリ (QPS) です