LinkedIn 研究团队最近开源了功能商店Feathr,旨在简化机器学习 (ML) 功能管理并提高开发人员的工作效率。数十个 LinkedIn 应用程序使用 Feathr 来定义特性、计算它们以进行训练、将它们部署到生产中,并在消费者之间共享它们。与以前特定于应用程序的特征管道解决方案相比,Feathr 用户报告说,显着减少了向模型训练添加新特征所需的时间,并提高了运行时性能。
数百个 ML 模型在 LinkedIn 上的搜索、Feed 和广告应用程序中运行。经济图中有关实体的数千个特征,例如公司、职位发布和 LinkedIn 成员,为模型提供了动力。大规模处理 ML 应用程序最耗时的方面是准备和管理功能。
因为每个团队都有自己的管道,所以构建和维护特性管道的成本由许多团队分担。随着时间的推移,随着新特性和功能的增加,管道的复杂性也随之增加。团队特定的管道也使得跨项目重用功能变得不切实际。没有统一的方法来命名跨模型的部件,没有一致的特性类型系统,没有一致的方式在没有通用抽象的情况下在生产中部署和服务特性。自定义管道架构使工作共享变得异常棘手。
维护功能准备管道的成本不断上升,团队负担过重,这阻碍了他们在创新和改进应用程序方面的生产力。特征准备管道(将原始数据转换为特征以进行模型训练和推理的系统和工作流程)非常复杂。他们必须从多个来源收集对时间敏感的数据,以时间点的方式将特征加入训练标签,并将特征保存在存储中以实现低延迟在线服务。他们还必须确保为训练和推理上下文准备一致的特征,以避免训练服务偏差。
Feathr 解决了这些问题。Feathr 是一个层,它提供用于定义特征的统一特征命名空间和用于从 ML 工作流中“按名称”服务、计算和访问它们的统一平台。Feathr 消除了单个团队管理自定义功能管道的需要,并允许跨项目轻松共享功能,从而提高 ML 生产力。Feathr 是一个特征存储,这个术语最近出现,用于描述管理和服务 ML 特征数据的系统。虽然许多行业解决方案主要关注特征数据管理和服务,但Feathr 还为特征转换提供高级支持,允许用户基于原始数据集试验新特征。
Feathr 的抽象生成特征生产者和消费者角色。生产者创建特征并在 Feathr 中注册它们,而消费者访问/导入特征组到他们的 ML 模型工作流程中。同一位工程师经常同时扮演这两个角色,为自己的项目生产和使用功能。
从消费者的角度来看,Feathr 可以被认为是 ML 功能的软件包管理工具。现代软件开发中的工程师很少考虑如何获取依赖库工件、解析传递依赖项或将依赖库链接到代码以进行编译或执行。相反,工程师只需提供他们想要在代码中包含、包含或导入的依赖模块的名称列表,然后构建系统处理其余部分。类似地,Feathr 允许特征消费者指定他们想要“导入”到模型中的特征的名称,抽象出它们如何获取和计算的重要细节。
Feathr 弄清楚如何以所需格式提供所要求的特征数据,以便在后台进行模型训练和生产推理。计算特征并将其正确连接到模型训练的输入标签。功能已预先实现并部署到在线数据存储中,用于模型推理的低延迟在线服务。不同团队和项目定义的属性可以轻松组合,允许协作和重用。
在生产者方面,Feathr 允许使用简单的表达式基于原始数据源(包括时间序列数据)或其他 Feathr 特征定义和注册特征。对于更复杂的用例,支持用户定义的函数。聚合、转换、时间窗口和丰富的类型集(包括向量和张量)都由 Feathr 提供支持,从而可以轻松地根据基础数据定义许多不同类型的特征。Feathr 物化特征数据集并将其部署到在线数据存储中,以便快速访问模型推理。
LinkedIn 的一些最大的 ML 项目通过用 Feathr 替换特定于应用程序的功能准备管道来删除大量代码——这将添加和试验新功能所需的工程时间从几周减少到几天。
Feathr 的性能优于它所取代的自定义特征处理管道高达 50%,有效地摊销了对 Feathr 运行时优化的投资。Feathr 还允许类似的应用程序共享功能。例如,LinkedIn 有几个搜索和推荐系统来处理有关招聘信息的数据。以前,这些项目由于特定于应用程序的管道架构而难以传达功能,但使用 Feathr,它们可以轻松共享功能,从而显着改善业务指标。
Feathr 可以在大规模应用程序中处理 PB 级的特征数据。Feathr 为特征注册、计算和部署奠定了基础。最受欢迎的示例之一是为特征工程启用下一级 CI/CD,这将允许用户创建广泛共享的 ML 功能的升级版本,然后将针对依赖该功能的现有模型自动进行测试。
Feathr 最常用的核心组件现在都是开源的。查看GitHub 页面了解使用 Feathr 根据原始数据定义特征、计算特征值以进行训练以及将组件部署到生产以进行在线推理的示例。
Github:
https://github.com/linkedin/feathr