ML 沿袭:跟踪 ML 数据流

备注

ML 沿袭在 1.6.0 及更高版本的 snowflake-ml-python 包中可用。

ML 沿袭在数据流经您的机器学习管道时提供全面的数据跟踪。此功能使您能够跟踪各种数据工件之间的沿袭,包括源表/视图/暂存区、特征视图、数据集、已注册模型和已部署的模型服务。此外,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;
Copy

创建 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)
Copy

备注

只有在账户中启用 ML 沿袭功能后创建的对象才包含沿袭信息。

查询 ML 沿袭

可以通过多种方式查询 ML 工件的沿袭。

Snowsight UI

每个工件的登录页面都有一个 Lineage 选项卡。默认视图显示距离选定对象仅一步的上游和下游对象。要更详细地探索 Snowsight UI 中的沿袭,请参阅 Snowsight 中的数据沿袭

沿袭数据的 Snowsight 视图示例如下所示。

Snowsight 中 ML 沿袭的屏幕截图示例

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

FeatureViewModelVersionDataset 对象上可用的 lineage 方法检索当前对象的沿袭关系,因此可以跟踪从 Snowflake 特征平台或模型注册表检索到的数据对象的沿袭。

对于所有支持的对象,lineage 方法接受以下实参:

  • directionUPSTREAMDOWNSTREAMDOWNSTREAM 是默认值。

  • domain_filter,将检索沿袭的目标对象类型的列表。默认为返回所有沿袭关系。可用域为 "feature_view""dataset""model""table""view"

该方法返回连接的沿袭节点列表。如果已将这些类导入到 Python 会话中,则这些节点可以是 DatasetFeatureViewModelVersion 的实例。否则,每个节点都由一个通用 LineageNode 实例表示。

示例

以下示例演示如何使用 Snowpark ML 沿袭 API 回答常见问题。

  • 给定模型版本,其训练数据来自哪里?

    model_version.lineage(direction="upstream")
    
    Copy
  • 特定数据集依赖哪些特征视图?

    my_dataset.lineage(direction="upstream", domain_filter=["feature_view"])
    
    Copy
  • 哪些模型是根据给定数据集的数据训练的?

    my_dataset.lineage(direction="downstream", domain_filter=["model"])
    
    Copy

有关更完整的示例,请参阅以下资源:

  • 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)

语言: 中文