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月前
|
机器学习/深度学习 计算机视觉 iOS开发
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
64 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
|
1月前
|
机器学习/深度学习 存储
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
84 15
YOLOv11改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
3月前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
237 80
|
24天前
|
人工智能 网络协议 IDE
使用通义灵码AI高效学习muduo网络库开发指南
Muduo 是一个基于 C++11 的高性能网络库,支持多线程和事件驱动,适用于构建高效的服务器和应用程序。它提供 TCP/IP 协议支持、异步非阻塞 I/O、定时器、异步日志等功能,并具备跨平台特性。通过 Git 克隆 muduo 仓库并切换至 C++17 分支可开始使用。借助 AI 工具如 Deepseak-v3,用户可以更便捷地学习和理解 Muduo 的核心模块及编写测试用例,提升开发效率。
|
1月前
|
机器学习/深度学习 计算机视觉 iOS开发
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
117 12
|
1月前
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
52 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
1月前
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
|
3月前
|
机器学习/深度学习 算法 PyTorch
基于图神经网络的大语言模型检索增强生成框架研究:面向知识图谱推理的优化与扩展
本文探讨了图神经网络(GNN)与大型语言模型(LLM)结合在知识图谱问答中的应用。研究首先基于G-Retriever构建了探索性模型,然后深入分析了GNN-RAG架构,通过敏感性研究和架构改进,显著提升了模型的推理能力和答案质量。实验结果表明,改进后的模型在多个评估指标上取得了显著提升,特别是在精确率和召回率方面。最后,文章提出了反思机制和教师网络的概念,进一步增强了模型的推理能力。
134 4
基于图神经网络的大语言模型检索增强生成框架研究:面向知识图谱推理的优化与扩展
|
3月前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
4月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
140 8

热门文章

最新文章