写点什么

LinkedIn 开源 Avro2TF: TensorFlow 的开源特性转换引擎

  • 2019-04-29
  • 本文字数:1688 字

    阅读完需:约 6 分钟

LinkedIn开源Avro2TF: TensorFlow的开源特性转换引擎

2019 年 4 月 4 日,我们宣布开源一个新的项目Avro2TF。该项目提供了一种可伸缩的基于spark的机制,可以有效地将数据转换为供TensorFlow使用的格式。使用这种技术,开发人员可以更专注于构建模型而不是转换数据,从而提高生产率。

LinkedIn 的深度学习数据管道

在 LinkedIn,深度学习已成功应用于多个与推荐和搜索相关的人工智能系统。我们从这个项目中学到的重要经验之一是深深地感受到提供良好的深度学习平台的重要性,这有助于我们的建模工程师变得更加高效和多产。Avro2TF 是为了降低数据处理复杂性和提高高级建模速度这个目标做出的努力。除了推进深度学习技术,LinkedIn 多年来一直在分享很多领域关于机器学习(ML)方面的创新(例如,推荐系统、可伸缩的机器学习系统等)。因为效率和准确性至上,所以我们有许多不同的 ML 方法来处理每天产生的大量的数据。


为了有效地支持深度学习和推进机器学习民主化的愿景(通过Pro-ML这样的项目),我们必须首先解决数据处理步骤的问题。我们的 ML 算法(例如 LinkedIn 的大规模个性化引擎Photon-ML)使用的大部分数据集都是 Avro 格式的。Avro 数据集中的每个记录本质上都是一个稀疏向量,并且可以被大多数现代分类器轻松使用。然而,领先的深度学习库 TensorFlow 无法直接使用 Avro 这种格式。主要的阻碍因素是稀疏向量的格式与 TensorFlow 所期望的格式不同。我们相信这不是 LinkedIn 独有的问题。许多公司拥有大量类似稀疏向量格式的 ML 数据,而 Tensor(张量)格式对许多公司来说仍然相对较新。


LinkedIn 的数据通常很大,格式也与传统的深度学习库不同。这就带来了重大的挑战,因为许多管道都包含混合的数据处理逻辑和建模逻辑。它影响了构建新的深度学习模型的灵活性。根据用户对 LinkedIn ML 垂直团队的反馈,我们需要一个可伸缩的解决方案,专注于可伸缩的数据转换。更具体地说,我们需要一个将 LinkedIn 数据类型(例如稀疏向量、密集向量等)转换为深度学习格式(即张量)的机制。



Avro2TF 弥补了这一差距,为 ML 工程师提供了一个不错的解决方案,让他们可以专注于不同的深度学习算法。它为建模者提供了一个简单的配置,以便从现有的训练数据中获取张量。张量数据本身不是自包含的。为了加载到 TensorFlow,张量数据需要携带元数据。为了弥补这一差距,Avro2TF 还提供分布式元数据收集工作。在 LinkedIn 内部,Avro2TF 是一个名为 TensorFlowIn 的系统的组成部分,该系统可以帮助用户轻松地将数据输入到 TensorFlow 建模过程中。



TensorFlowIn 是一个与TonY、TensorFlow 和 Spark 兼容的深度学习训练库。它包含端到端训练相关的实用程序和框架。上面的图给出了 TensorFlowIn 的高级概览。由于大规模的数据处理是一个重要的步骤,这不仅对许多 LinkedIn 应用程序至关重要,而且对更大的人工智能社区也很有用,所以我们在收到积极的内部反馈后决定开放这个引擎的源代码。

Avro2TF 项目细节

下面简要介绍 Avro2TF 的一些实现特性。


  • 输入数据要求:我们支持 Spark 可以读取的所有数据格式,包括 LinkedIn、Avro 和 ORC 中最流行的格式。对于分类或稀疏特性,我们要求它们以 NTV (name-term-value)格式表示。

  • 输出张量支持的数据类型:在 Avro2TF 中,输出张量支持的数据类型(dtype)为:int、long、float、double、string、boolean 和 bytes。我们还提供了一个特殊的数据类型 sparseVector 来表示分类/稀疏特性。一个 sparseVector 的张量类型有两个字段:索引和值。

  • Avro2TF 配置:在顶层,配置文件包含关于张量的信息,这些张量将提供给深度学习训练框架使用。对于每个指定的张量,它包含两种信息:

  • 输入特征信息,判断应该使用哪些现有特征来构造张量。

  • 输出张量信息,包括期望输出张量的名称、类型和形状。


Avro2TF 数据管道:它处理特征提取、特征转换(在 LinkedIn,这仅在 Pro-ML 不涉及的有限用例中)、张量元数据和特征映射生成、将字符串转换为数值索引和张量序列化。

Avro2TF 现在是开源的

在 LinkedIn 成功使用 Avro2TF 之后,我们已经将该技术作为开源软件发布。你可以在这里找到 Avro2TF 的官方 GitHub 页面。


我们还发布了 Avro2TF 的官方教程,可以在项目wiki页面上找到。



2019-04-29 08:086713
用户头像

发布了 124 篇内容, 共 49.5 次阅读, 收获喜欢 177 次。

关注

评论 1 条评论

发布
用户头像
开源,让全世界的工程师抛弃文化等因素,去协作完成一个项目。
2019-08-02 10:42
回复
没有更多了
发现更多内容

模块七作业

Geek_ec866b

架构训练营

在不确定性中寻找确定性(28/100)

hackstoic

创业 创业心态

Linux驱动开发-编写MMA7660三轴加速度传感器

DS小龙哥

4月月更

智能足球裁判,能否突破专业运动的技术瓶颈​

这不科技

读《A Philosophy of Software Design》——(20)

术子米德

架构师成长笔记

一文扫清DDD核心概念理解障碍

慕枫技术笔记

后端 4月月更

如何使用阿里云容器服务保障容器的内存资源质量

阿里巴巴云原生

读《A Philosophy of Software Design》——(14)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(19)

术子米德

架构师成长笔记

王者荣耀(商城)异地多活架构模拟设计

随欣所遇

架构训练营5期

架构实战营 - 模块7 - 作业

凌波微步

「架构实战营」

「架构实战营」模块七 王者荣耀商城异地多活架构设计

hxb

「架构实战营」

读《A Philosophy of Software Design》——(15)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(18)

术子米德

架构师成长笔记

王者荣耀商城异地多活架构设计

浪飞

王者荣耀商城异地多活架构设计

tom

适合 Kubernetes 初学者的一些实战练习 (五)

汪子熙

postgresql Kubernetes Cloud Native statefulset 4月月更

Android C++系列:JNI中发送Http网络请求

轻口味

c++ android jni curl 4月月更

解读谷歌Pathways架构(一):Single-controller与Multi-controller

OneFlow

人工智能 机器学习 深度学习 架构 深度学习框架

团队在线协作文档工具推荐

小炮

团队协作 文档协作

读《A Philosophy of Software Design》——(13)

术子米德

架构师成长笔记

重学架构之王者荣耀商城异地多活架构设计

陈华英

架构实战营 「架构实战营」

web前端培训-ES6 教程:全面了解 ES6 模块

@零度

前端 ES6

模块七

Leo

架构实战营

读《A Philosophy of Software Design》——(12)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(16)

术子米德

架构师成长笔记

Springfox swagger2 API文档

Rubble

4月日更

读《A Philosophy of Software Design》——(10)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(11)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(17)

术子米德

架构师成长笔记

王者荣耀商城-异地多活设计

邹玉麒

架构训练营5期

LinkedIn开源Avro2TF: TensorFlow的开源特性转换引擎_AI&大模型_Xuhong Zhang_InfoQ精选文章