注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

基于数据集的模型

功能停用

以下文档描述了不再推荐在平台中使用的foundry_ml库。相反,请使用palantir_models库。您还可以通过一个示例学习如何将模型从foundry_ml迁移到palantir_models框架。

foundry_ml库将于2025年10月31日移除,这与计划淘汰Python 3.9相对应。

基于数据集的模型是在Foundry中使用foundry_ml Python库开发的模型。基于数据集的模型是能够在Foundry中序列化以进行推理的数据变换单元。

一个模型由一系列阶段组成,每个阶段包含一系列有状态的变换,通常使用机器学习算法进行训练。模型和阶段提供了一个标准化的接口,使得使用不同库和算法构建的模型可以具有一致的语义。这允许模型在Foundry的各种应用程序中互换使用。

要在Python中创建模型,请传递您想应用于模型构造函数的阶段。 例如:Model(stage1, stage2)将通过应用stage1到输入数据,然后将stage2应用到stage1的输出,最后返回stage2的输出。每个模型都保存一个API,技术上定义了模型期望的输入以及它将产生的输出。

模型详情

接口

由于模型可能封装来自不同且不兼容框架的阶段,Model接口使得所有模型能够透明地互换。

以下方法和属性可用于所有Foundry ML模型:

  • transform(data) 串行应用阶段以生成得分输出。
  • append_stage(stage) 在当前阶段之后向模型追加一个额外的阶段。
  • input_spec 描述预期输入的格式。
  • output_spec 描述输出的格式。
  • stages 获取模型中的阶段列表。

序列化

大多数建模框架都有其自己的序列化格式和方法。特别是,分布式和多语言框架通常具有难以理解的序列化方法。Foundry的模型接口通过Architecture V2简化了序列化过程。

Architecture V2

Architecture V2是一种序列化格式,增加了对许多新特性的支持:

  • 对非Python模型(例如容器化、typescript和外部)的类型安全序列化。
  • 对新模型阶段类型的类型安全支持。
  • 模型API的序列化以用于建模目标并确保数据输入安全。
  • 追踪模型的Conda依赖关系。
  • 改善文件大小以减少内存压力。
  • 移除遗留类型规范和自动转换器系统,避免无法解释的错误。

模板

Python Transforms中,您可以使用以下模板:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from transforms.api import transform, Input, Output from foundry_ml import Model @transform( training_data=Input("/path/to/input/training/data"), out_model = Output("/path/to/output/model"), ) def create_model(training_data, out_model): df = training_data.dataframe() # 在此处训练模型 model = Model(*model stages) # 创建模型对象,参数为模型的各个阶段 model.save(out_model) # 将训练好的模型保存到指定路径 @transform( in_model = Input("/path/to/output/model"), test_data = Input("/path/to/input/test/data" ), out_data = Output("/path/to/scores/output"), ) def apply_model(in_model, test_data, out_data): model = Model.load(in_model) # 加载训练好的模型 output_df = model.transform(test_data.dataframe()) # 使用模型对测试数据进行预测或变换 out_data.write_dataframe(output_df) # 将输出数据写入指定路径

代码工作簿中,返回一个 foundry_ml.Model 实例以保存模型,并通过将其定义为代码块的函数参数来加载它。

阶段

模型是一个由称为阶段的单个变换组成的线性管道。所有阶段均遵循一个通用接口来执行其变换。

阶段类型

基本的阶段契约是最小的,仅有单一类型。

通过 Stage() 调用的阶段表示模型管道的一个计算组件,它封装了一个外部对象(例如 sklearn 模型)。每次调用 transform() 都映射到托管模型上的某个注册函数。

阶段具有以下职责:

  • 托管外部模型对象并提供一致的接口(Stage.transform)。
  • 提升参数并创建其输入和输出规格的说明。
  • 将托管模型序列化和反序列化为文件。

支持的阶段

在大多数情况下,阶段的最小定制仅限于变换对象之外。Foundry 提供了一个阶段注册表,可以通过类型为支持的库自动创建阶段。

利用帮助函数查看 foundry_ml 当前支持的库类及其已注册的变换函数和序列化格式。

参数

阶段可以包含许多可配置参数。参数用于控制变换函数的应用。

为支持标准化模型和接口,可以使用参数在阶段之间传递相关信息。

对于 foundry_ml 支持的阶段,必需、默认和非必填参数是动态生成的。了解更多可用参数