ML 沿袭:跟踪 ML 数据流¶
备注
ML 沿袭在 1.6.0 及更高版本的 snowflake-ml-python
包中可用。
ML 沿袭在数据流经您的机器学习管道时提供全面的数据跟踪。此功能使您能够跟踪各种数据工件之间的沿袭,包括源表/视图/暂存区、特征视图、数据集、已注册模型和已部署的模型服务。此外,ML 沿袭还捕获克隆工件和类似类型工件之间的关系,从而确保您可以完整地了解管道内的数据转换和依赖关系。可能的管道如下所示:

下表汇总了管道中节点类型之间可以跟踪的沿袭关系。每行代表依赖关系的源,每列代表目标。行或列的交叉点包含一个图标,指示 ML 沿袭是否捕获了该关系。
表/视图/暂存区 |
特征视图 |
数据集 |
模型 |
部署的模型服务 |
|
---|---|---|---|---|---|
表/视图/暂存区 |
✔ |
✔ |
✔ |
✔ |
- |
特征视图 |
|cm|(仅限表) |
✔ |
✔ |
- |
- |
数据集 |
✔ |
- |
✔ |
✔ |
- |
模型 |
❌ |
- |
- |
✔ |
✔ |
部署的模型服务 |
❌ |
- |
- |
- |
- |
✔:此关系由 ML 沿袭捕获。
❌:此关系尚未由 ML 沿袭捕获,但已在路线图中。
-:这种对象组合不代表关系。
借助 ML 沿袭,可以了解机器学习工件是如何相互关联的,并可以回答以下问题:
训练我的模型的数据来自哪里?
我的数据集依赖哪些特征视图?
哪些模型是根据我的数据集中的数据训练的?
哪些服务使用我的模型?
深入 快速入门笔记本 (https://github.com/Snowflake-Labs/sfguide-getting-started-with-snowflake-ml-lineage/blob/main/notebooks/0_start_here.ipynb?_fsi=EwgOAmF4&_fsi=EwgOAmF4&_fsi=EwgOAmF4&_fsi=EwgOAmF4),了解如何使用 ML 沿袭 APIs。接下来使用将 ML 沿袭纳入完整 ML 工作流程的特征商店和模型注册表进行更完整的 端到端 ML 快速入门 (https://quickstarts.snowflake.com/guide/develop-and-manage-ml-models-with-feature-store-and-model-registry/index.html?index=..%2F..index#0)。
限制¶
根据模型预测创建的表和视图目前无法捕获返回模型的沿袭关系。
目前不复制沿袭信息。
Snowflake 打算在未来发布的 ML 沿袭中消除这些限制。
所需权限¶
用户需要 VIEW LINEAGE 权限才能从 Python APIs 中探索沿袭。此权限会自动授予 ACCOUNTADMIN 角色,然后该角色可以在账户级别将其授予其他角色。例如:
USE ROLE ACCOUNTADMIN;
GRANT VIEW LINEAGE ON ACCOUNT TO ROLE test_role;
创建 ML 沿袭¶
通常,Snowflake 会在对象创建时记录沿袭信息。将模型记录到模型注册表时,会捕获模型的沿袭。如果模型是通过 Snowpark DataFrame 训练的,则使用 Snowpark ML 训练模型会自动生成沿袭记录。
在其他场景(例如下面列出的场景)下,只需少许额外操作也可生成沿袭记录。
使用 Snowpark MLfrom 其他类型的数据源(例如 Pandas DataFrame)训练模型。
在不使用 Snowpark ML 或 Snowpark DataFrame 的情况下训练模型。
在 Snowflake 之外训练模型。
在这些场景中,仍然可以通过将源数据对象支持的 Snowpark DataFrame 作为 sample_data
传递给模型注册表的 log_model
方法,将源数据对象和经过训练的模型关联起来,如下所示。
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
包)为所有 Snowflake ML 工件对象提供了用户友好的 API,可以从上游和下游方向探索沿袭。该库返回连接的工件对象,可以链接 API 调用以朝所需的方向进一步探索。此 API 直接适用于 Snowflake ML Python 对象。有关更多信息,请参阅 Snowpark ML 沿袭 API。
Snowpark Python 库¶
Snowpark 库提供灵活的 API,可以按照选择的方向,更深入地探索支持的 Snowflake 工件的数据和 ML 沿袭。该库接受域和完全限定名称,返回 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 特征平台或模型注册表检索到的数据对象的沿袭。
对于所有支持的对象,lineage
方法接受以下实参:
direction
,UPSTREAM
或DOWNSTREAM
。DOWNSTREAM
是默认值。domain_filter
,将检索沿袭的目标对象类型的列表。默认为返回所有沿袭关系。可用域为"feature_view"
、"dataset"
、"model"
、"table"
和"view"
。
该方法返回连接的沿袭节点列表。如果已将这些类导入到 Python 会话中,则这些节点可以是 Dataset
、FeatureView
或 ModelVersion
的实例。否则,每个节点都由一个通用 LineageNode
实例表示。
示例¶
以下示例演示如何使用 Snowpark ML 沿袭 API 回答常见问题。
给定模型版本,其训练数据来自哪里?
model_version.lineage(direction="upstream")
特定数据集依赖哪些特征视图?
my_dataset.lineage(direction="upstream", domain_filter=["feature_view"])
哪些模型是根据给定数据集的数据训练的?
my_dataset.lineage(direction="downstream", domain_filter=["model"])
有关更完整的示例,请参阅以下资源:
ML 沿袭概述笔记本 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/ML%20Lineage%20Workflows/ML%20Lineage%20Workflows.ipynb)
端到端 ML 快速入门 (https://quickstarts.snowflake.com/guide/develop-and-manage-ml-models-with-feature-store-and-model-registry/index.html?index=..%2F..index#0)