GPU加速:宽深度推理
GPU加速:宽深度推理
Accelerating Wide & Deep Recommender Inference on GPUs
推荐系统推动了许多最流行的在线平台的参与。随着为这些系统提供动力的数据量的快速增长,数据科学家正越来越多地从更传统的机器学习方法转向高度表达的深度学习模型,以提高其建议的质量。Google的广度和深度架构已经成为解决这些问题的一种流行的模型选择,既有其对信号稀疏性的鲁棒性,也有其通过DNN线性组合分类器API在TensorFlow中的用户友好实现。虽然这些深度学习模型的复杂性导致的成本和延迟最初对推理应用来说非常昂贵,但将证明,为NVIDIA gpu优化的加速、混合精度的实现可以显著减少延迟,同时在成本/推理方面获得显著的改进。这为快速、低成本、可扩展的推荐系统铺平了道路,推荐系统非常适合在线和离线部署,并使用简单而熟悉的TensorFlow api实现。 在本文中,描述了一个基于TensorFlow的DNN线性组合分类器API的广深结构的高度优化的GPU加速推理实现。提出的解决方案可以很容易地从训练的张量流宽深模型转换为混合精度推理部署。还基于一个有代表性的数据集给出了该解决方案的性能结果,并表明宽模型和深模型的GPU推理可以分别在在线和离线场景中产生高达13倍的延迟或11倍的吞吐量改进。
Background
The Recommendation Problem
虽然都可能对推荐的内容有一个直观的理解,但机器学习模型如何推荐的问题就不那么明显了。毕竟,对于推荐的概念,有一种非常规范的说法:“应该看电影a”,“应该在餐厅B吃tagliatelle”。模特怎么知道我该怎么做?
答案是,事实上,不是这样的。相反,使用机器学习来模拟用户与相关项目交互的方式。交互可能意味着点击广告、播放视频、在基于网络的商店购物、对餐厅的评论,或者应用程序可能感兴趣的任何数量的结果。机器学习模型使用以前交互的数据来预测新交互的可能性;推荐模型认为最有可能发生的交互。
模型如何进行这些预测将取决于拥有的数据类型。如果只知道过去发生过哪些交互,那么可能会对通过奇异值分解或变分自动编码等方式训练协作过滤模型感兴趣。如果有描述交互实体的数据(例如,用户年龄、餐厅菜肴的类别、电影的平均评论),那么可以根据当前这些属性对新交互的可能性进行建模。
Training vs. Inference
广义上讲,机器学习模型的生命周期可以分为两个阶段。在第一个例子中,通过展示过去用户和项目之间的交互(或非交互)的例子来训练模型,使其做出良好的预测。一旦学会了以足够的精度进行预测,就将模型部署为一个服务来推断新交互的可能性。 让举个例子让事情更具体。假设有一个应用程序,用户可以在该应用程序上查找餐厅并对其进行评级,希望构建一个推荐服务,以推荐用户可能喜欢的新餐厅。可以通过向模型展示一个用户的数据和一个被该用户评分的餐厅的数据来训练的模型,并要求在0-1的范围内评分用户评分高于10分之5的可能性有多大。然后,向展示答案,以便能够以这样一种方式进行自我更新:在经过数百万次的猜测之后答案可以得到相当好的结果。
一旦的教育完成模式是时候把新获得的技能很好地利用。需要找到一份工作,但所知道的只是告诉我,某个用户是否会喜欢某个餐馆。如果我感兴趣的是找到新的餐厅向用户展示,那么这项技能似乎没有特别的帮助,因为如果我事先知道哪些用户和餐厅要组合在一起,我就不需要模型了!
因此,重新表述了这个问题:将一个用户与成百上千个候选餐厅配对,收集用户喜欢其中每个餐厅的可能性,然后向用户展示最有可能喜欢的餐厅。这个推理阶段使用的数据消耗模式与在培训期间看到的不同,一个用户与多个广告配对,而不是一个用户与一个广告配对,因此需要不同的设计和数据表示考虑。
如何对这些模型进行有效的训练,本身就是一个丰富而有趣的问题,也是英伟达积极发展的一个领域。然而,经常发现,对于推荐空间中的数据科学家来说,推论是更为尖锐的痛点。深度学习模型虽然功能强大,但通常比机器学习模型需要更多的计算。这就意味着在部署模型进行推理时,延迟(等待建议的时间)更高,吞吐量(每秒可以提出多少建议,这与成本有关)更低。如果你的高技能模型需要很长时间来完成的工作,或者成本太高,你可能会完全放弃,而不是一些技术较低但速度更快、成本更低的东西。
除了计算需求之外,推断阶段还提出了其系统级的考虑,这些考虑会影响部署的延迟和吞吐量测量。生成推荐查询的站点(例如,智能手机)通常不具备在合理的时间内运行推荐模型的计算能力。解决此问题的标准方法是转到客户机-服务器模型,在该模型中,客户机生成一个建议查询,并将其发送到执行与该模型相关的所有计算任务并将结果发送回客户机的远程服务器。这会带来潜在的瓶颈,因为数据需要通过网络从客户端发送到服务器并返回。要从服务器中提取最高值,让多个客户端向单个服务器发送查询是很有用的。这又增加了在服务器上优化调度这些客户机查询的复杂性。此外,如果模型在GPU上运行,则到GPU的数据传输也会对性能产生影响。建议部署更为复杂,只需进行计算和完整的系统级分析就可以了解部署的端到端性能。
Wide & Deep
宽深网络的主要组成部分是一个稠密神经网络(DNN)和一个线性模型,其输出被求和以创建交互概率。分类变量被嵌入到连续向量空间中,然后通过学习的或用户确定的嵌入被输入到DNN中。使该模型在推荐任务中如此成功的是,提供了两种数据学习模式的途径,“深”和“浅”。复杂的非线性DNN能够学习数据中关系的丰富表示,但是需要看到这些关系的许多示例才能很好地实现。另一方面,线性部分能够“记忆”简单的关系,这些关系可能只在训练集中出现几次。
在组合中,这两个表示通道通常最终提供的建模能力比单独提供的任何一个都强。在Google关于架构的原始论文中,报告说,当使用Wide&Deep与DNN或单独回归相比时app store的收购率在统计学上有了显著的提高。NVIDIA与许多行业合作伙伴合作,通过使用Wide&Deep替代更传统的机器学习模型,报告了离线和在线指标的改进。
TensorFlow and DNNLinearCombinedClassifier
既然已经决定使用一个广度和深度的模型来提出建议,就产生了如何实现的问题。也就是说,如何在代码中定义从原始数据映射到正在寻找的0-1预测的所有小数学函数,更不用说定义更新和训练过程所需的所有微积分函数了。
虽然有很多流行的深度学习框架来实现这些模型,但是选择关注TensorFlow,特别是在DNNLinearCombinedClassifier类中预先构建的Wide&deep实现,这是的估计器API的一个实例。之所以选择将注意力集中在这里,并不是因为必然是一个更好的选择(尽管确实提供了强大的抽象功能,使数据科学家的工作更轻松),但由于看到被广泛应用于大型消费性互联网公司的生产规模推荐系统,有幸与之合作并从中学习。希望通过在用户熟悉和熟悉的框架内工作,可以降低实现快速和可扩展推荐系统的障碍。
GPU加速:宽深度推理的更多相关文章
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- mxnet:结合R与GPU加速深度学习(转)
近年来,深度学习可谓是机器学习方向的明星概念,不同的模型分别在图像处理与自然语言处理等任务中取得了前所未有的好成绩.在实际的应用中,大家除了关心模型的准确度,还常常希望能比较快速地完成模型的训练.一个 ...
- supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境
开发环境介绍 在SuperVessel云上,我们为大家免费提供当前火热的caffe深度学习开发环境.SuperVessel的Caffe有如下优点: 1) 免去了繁琐的Caffe环境的安装配置,即申请即 ...
- mxnet:结合R与GPU加速深度学习
转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...
- AI解决方案:边缘计算和GPU加速平台
AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...
- GPU加速计算
GPU加速计算 NVIDIA A100 Tensor Core GPU 可针对 AI.数据分析和高性能计算 (HPC),在各种规模上实现出色的加速,应对极其严峻的计算挑战.作为 NVIDIA 数据中心 ...
- GPU—加速数据科学工作流程
GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...
- NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架
NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架 Introducing NVIDIA Jarvis: A Framework for GPU-Accelerated Conversa ...
- Keras学习环境配置-GPU加速版(Ubuntu 16.04 + CUDA8.0 + cuDNN6.0 + Tensorflow)
本文是个人对Keras深度学习框架配置的总结,不周之处请指出,谢谢! 1. 首先,我们需要安装Ubuntu操作系统(Windows下也行),这里使用Ubuntu16.04版本: 2. 安装好Ubunt ...
随机推荐
- hdu3400 两重三分
题意: 题意给你两个公路 A-B C-D 和三个速度V(ab) V(cd) 和 V(两条公路之间) 问你从A到D的最短时间是多少. 思路: 一开始暴力了其中的一条边,每次加0.01,另 ...
- Windows下包管理工具Bower的安装和使用
目录 安装Bower Bower的使用 安装Bower Windows下安装Bower之前,先安装好 nodejs 和 msysgit 环境 然后我们就可以使用npm包管理工具下载并全局安装bower ...
- JavaScript 的入门学习案例,保证学会!
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【译】N 皇后问题 – 构造法原理与证明 时间复杂度O(1)
[原] E.J.Hoffman; J.C.Loessi; R.C.Moore The Johns Hopkins University Applied Physics Laboratory *[译]* ...
- PHP Excel文件导入数据到数据库
1.php部分(本例thinkphp5.1): 下载PHPExcel了扩展http://phpexcel.codeplex.com/ <?phpnamespace app\admin\contr ...
- Log4j讲解
讲解 通常,我们写代码的过程中,免不了要输出各种调试信息.在没有使用任何日志工具之前,都会使用 System.out.println 来做到. 这么做直观有效,但是有一系列的缺点:1. 不知道这句话是 ...
- docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群
题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...
- SQL Server强制使用特定索引 、并行度、锁
SQL Server强制使用特定索引 .并行度 修改或删除数据前先备份,先备份,先备份(重要事情说三遍) 很多时候你或许为了测试.或许为了规避并发给你SQL带来的一些问题,常常需要强制指定目标sql选 ...
- RTTI之typeid运算符
1 #include <iostream> 2 #include <cstdlib> 3 #include <ctime> 4 #include <typei ...
- Scanner, BufferedReader, InputStreamReader 与ACM模式输入
Scanner, BufferedReader, InputStreamReader 与ACM模式输入html { -webkit-print-color-adjust: exact } * { bo ...