Netflix开源面向稀疏数据优化的轻量级神经网络库Vectorflow

简介: 在Netflix公司,我们的机器学习科学家在多个不同的领域处理着各种各样的问题:从根据你的爱好来定制电视和推荐电影,到优化编码算法。我们有一小部分问题涉及到处理极其稀疏的数据;手头问题的总维度数很容易就能达到数千万个特征,即使每次要看的可能只是少数的非零项。

1.png

介绍

随着过去几年来深度学习库和软件创新的蓬勃发展,研究机器学习是一个激动人心的时刻。大多数机器学习的库都是从相当专业的计算代码演变而来的,这些计算代码一般用于解决大密集度问题,例如为稀疏模型提供边缘支持的基于神经网络的图像分类通用框架。

在Netflix公司,我们的机器学习科学家在多个不同的领域处理着各种各样的问题:从根据你的爱好来定制电视和推荐电影,到优化编码算法。我们有一小部分问题涉及到处理极其稀疏的数据;手头问题的总维度数很容易就能达到数千万个特征,即使每次要看的可能只是少数的非零项。对于这些情况,我们认为需要有一个经过专门优化的轻量级的库,这个库用于在单一设备、多核环境下对稀疏数据进行浅层前馈神经网络的训练。我们想要一些小巧而又易用的工具,所以我们构建了Vectorflow,它是目前机器学习科学家使用的众多工具之一。

设计注意事项

  • 敏捷性。我们希望数据科学家能够在完全自主的情况下轻松地运行和迭代他们的模型。所以我们用D语言写了Vectorflow。D语言是一种并不难学的现代系统语言,它具备快速的编译器和函数编程功能,为初学者提供了类似Python的使用体验,但在运行时通常具有多个数量级的性能提升,同时让经验丰富的开发人员能够利用其优秀的模板引擎、编译时功能和低级别特性(C接口、内联汇编器、手动内存管理、自动向量化等等)。Vectorflow没有任何第三方的依赖,从而简化了其部署。它提供了一个基于回调的API,可轻松接入自定义的损失函数来进行训练。
  • 稀疏感知。在设计稀疏数据库与浅层架构库的过程中,运行时瓶颈往往是在IO方面:例如,与大密集度矩阵上的卷积层不同,其运行每一行的操作极少。Vectorflow能够尽可能地避免在正向与反向传递过程中的内存复制或分配操作。矩阵向量操作同时拥有稀疏与密集两种实现方式,其中密集型是SIMD向量化的。Vectorflow还提供了一种在处理稀疏输出梯度时进行稀疏反向传递的方式。
  • IO未知。如果是IO绑定,那么根据定义,训练器的运行速度由IO层的速度决定。Vectorflow对底层数据模式的要求非常宽松(仅需提供一个具有“features”属性的行迭代器),以便可以根据数据源编写高效的数据适配器,以及在使用同一编程语言的时候避免任何预处理或数据转换步骤。这样,你就能根据数据来移动代码,而不是根据代码移动数据。
  • 单一设备。分布式系统难以调试,而且还会引入固定成本,例如作业调度。基于新型机器学习技术的分布式优化则更加困难。因此,我们基于单机设置建立了一个高效的解决方案,以此来降低了建模的迭代时间,并且不会牺牲中小规模任务(1亿行)的可扩展性。我们选择使用Hogwild的通用异步SGD解算器作为免锁定方案,以使得在没有通信成本的情况下将负载分散到各个不同的内核上。只要数据足够稀疏,这就适用于大多数的线性或浅层网络模型。由于从用户的角度来看,所有的一切都运行在非分布式的环境下,这样就避免了在算法分布方面花过多的精力。

应用程序

在项目启动后的几个月里,我们看到了很多基于该库的用例,同时也有多个研究项目及生产系统开始利用Vectorflow进行因果推论、生存回归、密度估算和推荐排名算法。事实上,我们正在使用 Vectorflow对Netflix主页的部分用户体验进行测试。Vectorflow也被包含在Netflix机器学习从业者所使用的基础实例内的默认工具箱中。

例如,我们基于Netflix在营销工作当中遇到的一项宣传问题对该库的性能进行了调查。在这个案例中,我们要用生存指数分布执行加权最大似然估计。要实现这个目标,需要向Vectorflow传递出以下自定义的回调函数:

2.png

利用此回调进行训练,我们可以轻松比较这三种模型:

  • 模型 1:基于小型稀疏特征的线性模型(需要学习约 500 个参数)
  • 模型 2:基于大型稀疏特征的线性模型(需要学习 100 万个参数)
  • 模型 3:基于稀疏特征的浅层神经网络(需要学习 1000 万个参数),训练数据量翻倍

5.png

3.png

这里的数据源是存储在S3上的一个Hive表,其中的列式数据格式是Parquet。另外,我们通过将该数据流传入c4.4xlarge实例并构建内存内训练集的方式进行直接训练。结果如下所示:

4.png

解压缩和特征编码都是在单线程上实现的,因此这还有改进的空间,但根据其端到端的运行时来看,并不需要使用针对中等规模稀疏数据集和浅层架构的分布式解决方案。请注意,训练时间与数据的稀疏度以及行数存在线性关系。阻止线性可扩展性的一个原因是,当多个异步SGD线程的权重相同时,CPU存储器内在结构创建的缓存将会无效,因此如果模型参数访问模式不够稀疏的话,会破坏Hogwild的理论结果(详细内容请参见这篇文章)。

未来的工作

接下来,除了简单线性、多项式或者前馈架构之外,我们计划进一步开发更加专业的层以扩大拓扑支持能力,并在维持Vectorflow项目“极简”设计理念的前提下探索新的并行策略。

文章原标题《Introducing Vectorflow》,作者:Benoît Rostykus, Netflix Technology,译者:夏天,审校:主题曲哥哥。

文章为简译,更为详细的内容,请查看原文

相关文章
|
1月前
|
机器学习/深度学习 存储
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
97 15
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
1月前
|
人工智能 网络协议 IDE
使用通义灵码AI高效学习muduo网络库开发指南
Muduo 是一个基于 C++11 的高性能网络库,支持多线程和事件驱动,适用于构建高效的服务器和应用程序。它提供 TCP/IP 协议支持、异步非阻塞 I/O、定时器、异步日志等功能,并具备跨平台特性。通过 Git 克隆 muduo 仓库并切换至 C++17 分支可开始使用。借助 AI 工具如 Deepseak-v3,用户可以更便捷地学习和理解 Muduo 的核心模块及编写测试用例,提升开发效率。
|
2月前
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
665 19
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
1月前
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
58 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
PaSa:字节跳动开源学术论文检索智能体,自动调用搜索引擎、浏览相关论文并追踪引文网络
PaSa 是字节跳动推出的基于强化学习的学术论文检索智能体,能够自动调用搜索引擎、阅读论文并追踪引文网络,帮助用户快速获取精准的学术文献。
260 15
|
1月前
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
|
4月前
|
机器学习/深度学习
NeurIPS 2024:标签噪声下图神经网络有了首个综合基准库,还开源
NoisyGL是首个针对标签噪声下图神经网络(GLN)的综合基准库,由浙江大学和阿里巴巴集团的研究人员开发。该基准库旨在解决现有GLN研究中因数据集选择、划分及预处理技术差异导致的缺乏统一标准问题,提供了一个公平、用户友好的平台,支持多维分析,有助于深入理解GLN方法在处理标签噪声时的表现。通过17种代表性方法在8个常用数据集上的广泛实验,NoisyGL揭示了多个关键发现,推动了GLN领域的进步。尽管如此,NoisyGL目前主要适用于同质图,对异质图的支持有限。
103 7
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
122 9

热门文章

最新文章