ML リネージトレース: ML データフロー¶
注釈
ML リネージは snowflake-ml-python
パッケージバージョン1.6.0以降で利用可能。
ML リネージは、機械学習パイプラインを流れるデータの包括的なトレースを提供します。この機能により、ソーステーブル/ビュー/ステージング、フィーチャービュー、データセット、登録済みモデル、デプロイ済みモデルサービスなど、さまざまなデータアーティファクト間のリネージを追跡することができます。さらに、 ML Lineage は、クローン化されたアーティファクトと類似タイプのアーティファクト間の関係をキャプチャし、パイプライン内のデータ変換と依存関係を完全に表示します。可能なパイプラインを以下に示します:

パイプラインのノードのタイプ間で追跡できるリネージ関係は、以下の表にまとめられています。各行は依存関係のソースを表し、各列はターゲットを表します。行または列の交点には、その関係が ML Lineage でキャプチャされているかどうかを示すアイコンが表示されます。
表/表示/ステージング |
特徴ビュー |
データセット |
モデル |
展開モデルサービス |
|
---|---|---|---|---|---|
表/表示/ステージング |
✔ |
✔ |
✔ |
✔ |
- |
特徴ビュー |
✔ (テーブルのみ) |
✔ |
✔ |
- |
- |
データセット |
✔ |
- |
✔ |
✔ |
- |
モデル |
❌ |
- |
- |
✔ |
✔ |
展開モデルサービス |
❌ |
- |
- |
- |
- |
✔:この関係は、 ML Lineageによって捉えられています。
❌:この関係は、 ML Lineageではまだ把握されていませんが、ロードマップにはあります。
-: このオブジェクトの組み合わせは関係を表しません。
ML Lineageを使用すると、機械学習の成果物が互いにどのように関連しているかを理解し、次のような質問に答えることができます。
モデルを訓練するためのデータはどこから来たのですか?
私のデータセットはどの 機能表示に依存していますか?
私のデータセットからどのようなモデルを学習させたのですか?
どのサービスが私のモデルを使用していますか?
クイックスタートノートブック で ML Lineage APIs の使い方をご覧ください。より完全な エンドツーエンド ML クイックスタート のある完全な ML ワークフローに ML Lineage を組み込んだ Feature Store と Modeling Registry をフォローアップします。
制限事項¶
モデル予測から作成されたテーブルや表示では、現在のところ、モデルに遡るリネージ関係は把握できません。
リネージ情報は現時点では複製されていません。
Snowflakeは、 ML リネージの今後のリリースでこれらの制限に対処する予定です。
必要な権限¶
Python APIs からの系譜を調べるには、ユーザーには VIEW LINEAGE 権限が必要です。この権限は自動的に ACCOUNTADMIN ロールに付与され、 ロールはこの権限をアカウントレベルで他のロールに付与することができます。例:
USE ROLE ACCOUNTADMIN;
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE test_role;
ML リネージの作成¶
通常、Snowflakeはオブジェクトが作成されたときにリネージ情報を記録します。モデルのリネージは、モデルがモデルレジストリにログ記録されるときに取得されます。Snowpark ML を使用してモデルをトレーニングすると、Snowpark DataFrame からモデルをトレーニングした場合、リネージ記録が自動的に生成されます。
以下にリストされているような他のシナリオでも、少し手間をかければリネージ記録を作成することができます。
Snowpark MLfrom を使用したモデルのトレーニングは、他の種類のデータソース(pandas DataFrame など)を使用します。
Snowpark ML または Snowpark DataFrame を使用せずにモデルをトレーニングします。
Snowflake以外のモデルをトレーニングします。
このようなシナリオでも、以下のようにソースデータオブジェクトにバックされた Snowpark DataFrame をモデルレジストリの log_model
メソッドに sample_data
として渡すことで、ソースデータオブジェクトと学習済みモデルを関連付けることができます。
registry.log_model(...,
sample_input_data=df_backed_by_source_table)
注釈
アカウントで ML リネージ機能が有効になった後に作成されたオブジェクトだけが、リネージ情報を含んでいます。
ML リネージのクエリ¶
ML アーティファクトのリネージは、いくつかの方法でクエリできます。
Snowsight UI¶
すべてのアーティファクトのランディングページには、 Lineage タブがあります。デフォルトの表示では、選択したオブジェクトから一歩離れた上流および下流のオブジェクトが表示されます。Snowsight UI 内のリネージの詳細については、 Snowsight のデータ系統 をご参照ください。
Snowsightによる血統データの表示サンプルを以下に示します。

Snowpark ML ライブラリ¶
Snowpark ML ライブラリ(snowflake-ml-python
パッケージ)は、ユーザーフレンドリーな API をすべての Snowflake ML アーティファクトオブジェクトに提供し、上流と下流の両方向のリネージを探索します。接続されたアーティファクトオブジェクトを返すので、 API の呼び出しを連鎖させて、目的の方向にさらに探索を進めることができます。この API は、Snowflake ML Python オブジェクトで直接動作します。詳細については、 Snowpark ML リネージ API をご参照ください。
Snowpark Pythonライブラリ¶
Snowparkライブラリは、サポートされているSnowflakeアーティファクトのデータと ML リネージを、より深く、お好みの方向で探索するための柔軟な API を提供します。ドメインと完全修飾名を受け付け、接続アーティファクトの詳細を DataFrame に返します。詳細情報については、Snowpark Python API リファレンスの snowflake.snowpark.lineage.Lineage.trace をご参照ください。
Snowflake SQL¶
SQL 関数 SNOWFLAKE.CORE.GET_LINEAGE
を使って、Snowpark ライブラリと同様にリネージ情報をクエリできます。詳細については、 GET_LINEAGE (SNOWFLAKE.CORE) をご参照ください。
Snowpark ML リネージ API¶
FeatureView
、 ModelVersion
、 Dataset
オブジェクトで可用性メソッド lineage
は、現在のオブジェクトのリネージリレーションを取得します。これにより、Snowflake Feature StoreやModel Registryから取得したデータオブジェクトのリネージをトレースすることができます。
サポートされているすべてのオブジェクトについて、 lineage
メソッドは以下の引数を受け付けます。
direction
、UPSTREAM
またはDOWNSTREAM
、DOWNSTREAM
がデフォルトです。domain_filter
、 リネージを取得するターゲットオブジェクトタイプのリスト。デフォルトでは、すべてのリネージ関係を返します。可用性ドメインは"feature_view"
,"dataset"
,"model"
,"table"
,"view"
です。
このメソッドは、接続されたリネージノードのリストを返します。これらのクラスが Python セッションにインポートされている場合、これらのノードは Dataset
、 FeatureView
、または ModelVersion
のインスタンスになります。それ以外の場合、各ノードは一般的な LineageNode
インスタンスで表されます。
例¶
以下の例では、Snowpark ML lineage API を使用して、よくある質問に回答する方法を示しています。
モデルのバージョンが与えられたとき、そのトレーニングデータはどこから来たのでしょうか?
model_version.lineage(direction="upstream")
特定のデータセットがどのフィーチャービューに依存していますか?
my_dataset.lineage(direction="upstream", domain_filter=["feature_view"])
あるデータセットのデータに対して、どのモデルを学習させましたか?
my_dataset.lineage(direction="downstream", domain_filter=["model"])
より完全な例については、以下のリソースをご覧ください。