メインコンテンツまでスキップ

エクスペリメント トレースをUnity Catalogに移行する

MLflowにトレースが保存されている場合は、それらをUnity Catalog Deltaテーブルに移行できます。 トレースをUnity Catalogに保存することで、トレースの保存制限がなくなり、 Unity Catalogガバナンスを通じてきめ細かなアクセス制御が可能になり、トレースをダイアログボックス、 SQL 、 Genie 、 AI/BIダッシュボード、およびあらゆるSparkベースのツールからクエリできるようになります。

移行により、トレース、スパン、評価、タグ、メタデータがソース エクスペリメントからUnity Catalogテーブルにコピーされます。 ソース体験は変更されません。

新規に開始し、移行する既存のトレースがない場合は、 Unity Catalogにトレースを保存する」を参照して、トレースをUnity Catalogに直接書き込むための新しい拡張機能を構成してください。

注記

この移行では、アーカイブまたは削除されたトレース、データセットレコード、ラベル付けセッション、実行、またはトレース以外のエンティティはコピーされません。

前提条件

  • Unityカタログ対応のワークスペース。

  • Databricks Runtime 15.3 以降を実行しているDatabricksクラスター。

  • databricks-agents Pythonパッケージ:

    Bash
    pip install "databricks-agents>=1.10.1"
  • 以下の権限:

    • ソース エクスペリメントへの読み取りアクセス。
    • USE_CATALOG宛先カタログとスキーマ上のUSE_SCHEMA 、およびMODIFY

ステップ 1: 目的地のエクスペリメントを作成する

宛先は、 Unity Catalogトレースの場所にバインドされた新しいMLflowエクスペリメントです。

トレース位置は3つの部分からなるパスです( catalog.schema.table_prefix )。テーブル接頭辞は、拡張を支える4つのDeltaテーブルに適用されます。

  • <prefix>_otel_spans
  • <prefix>_otel_annotations
  • <prefix>_otel_logs
  • <prefix>_otel_metrics

以下を実行して宛先エクスペリメントを作成します。 セットアップの詳細については、 「セットアップ: Unity Catalogトレース場所を使用して拡張機能を作成する」を参照してください。

Python
import mlflow
from mlflow.entities.trace_location import UnityCatalog

experiment = mlflow.set_experiment(
experiment_name="/Workspace/Users/<user>/<experiment_name>",
trace_location=UnityCatalog(
catalog_name="<destination_catalog>",
schema_name="<destination_schema>",
table_prefix="<table_prefix>",
),
)

print(f"Destination experiment ID: {experiment.experiment_id}")

上記のコードによって出力されたエクスペリメント ID を保存します。 次の 2 つのステップでこれを使用します。ステップ 2 では、ノートブック、ジョブ、およびデプロイされたモデルを新しい Unity カタログに基づくエクスペリメントに指定し、ステップ 3では、移行コマンドの宛先エクスペリメント ID として使用します。

続行する前に、いくつかのテスト トレースを新しいエクスペリメントに取り込んで、 Unity Catalogトレースがワークフローで機能することを確認できます。 例として、 Unity Catalogテーブルへのログトレースを参照してください。

ステップ 2: トレースログを切り替え、ソースエクスペリメントへの書き込みを停止します

移行を実行する前に、トレース ログをステップ 1 で作成した宛先エクスペリメントにリダイレクトし、ソース エクスペリメントへの書き込みを停止します。 これにより、新しいトレースが宛先テーブルに確実に書き込まれ、移行の実行中にトレースが失われることがなくなります。

  1. ソース エクスペリメントへのすべての書き込みを停止します。 移行中にソース エクスペリメントに書き込まれたトレースはコピーされない場合があります。 ノートブック、ジョブ、またはデプロイされたモデルがソース エクスペリメントにアクティブにログを記録していないことを確認します。

  2. ソース エクスペリメントを指す既存のset_experiment呼び出しを、名前または ID で宛先エクスペリメントを指す呼び出しに置き換えます。

    Python
    import mlflow

    # By experiment name
    mlflow.set_experiment(
    experiment_name="/Workspace/Users/<user>/<destination_experiment_name>",
    )

    # Or by experiment ID
    mlflow.set_experiment(experiment_id="<destination_experiment_id>")
注記

トレースの場所は、デプロイされたアプリケーション、コンテナ化されたサービス、モデルサービング エンドポイント構成、IDE またはローカル開発セットアップによって使用される、 MLFLOW_EXPERIMENT_NAMEMLFLOW_EXPERIMENT_ID環境変数などの他のメカニズムを通じて構成することもできます。 本番運用におけるトレース宛先の設定の詳細については、 Databricksにデプロイされたトレース エージェント」およびDatabricks外にデプロイされたトレース エージェント」を参照してください。

ステップ 3: 移行を実行する

クラスター上の Databricks ノートブックで、以下を実行します。

Python
from databricks.migrations.migrate_traces_to_uc import run

run(
source_experiment_id="<source_experiment_id>",
target_experiment_id="<destination_experiment_id>",
)

プレースホルダーを置き換えてください。

  • <source_experiment_id>: 移行するトレースを含む既存のエクスペリメントのエクスペリメント ID。
  • <destination_experiment_id>: ステップ 1 で作成した Unity カタログに基づくエクスペリメントのエクスペリメント ID。

この移行は冪等である。(クラスターのタイムアウトなどにより) 中断された場合でも、同じコマンドを安全に再実行できます。 移行は中断したところから自動的に再開されます。既に移行済みの行はスキップされます。

特定の時間後に作成されたトレースのみを移行するには、 start_time_ms問題 (エポック ミリ秒) を渡します。 この移行処理では、指定されたタイムスタンプ以降のリクエスト時刻を持つすべてのトレースが取り込まれ、既に移行済みのトレースはスキップされます。

Python
import time

from databricks.migrations.migrate_traces_to_uc import run

one_week_ago_ms = int((time.time() - 7 * 24 * 60 * 60) * 1000)

run(
source_experiment_id="<source_experiment_id>",
target_experiment_id="<destination_experiment_id>",
start_time_ms=one_week_ago_ms, # Only migrate traces from the last 7 days
)

移行が完了すると、トレースは新しい移行先で利用可能になります。 ソース エクスペリメントは移行によって変更されず、バックアップとして保持できます。