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加速:宽深度推理的更多相关文章

  1. 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?

    深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...

  2. mxnet:结合R与GPU加速深度学习(转)

    近年来,深度学习可谓是机器学习方向的明星概念,不同的模型分别在图像处理与自然语言处理等任务中取得了前所未有的好成绩.在实际的应用中,大家除了关心模型的准确度,还常常希望能比较快速地完成模型的训练.一个 ...

  3. supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境

    开发环境介绍 在SuperVessel云上,我们为大家免费提供当前火热的caffe深度学习开发环境.SuperVessel的Caffe有如下优点: 1) 免去了繁琐的Caffe环境的安装配置,即申请即 ...

  4. mxnet:结合R与GPU加速深度学习

    转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...

  5. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

  6. GPU加速计算

    GPU加速计算 NVIDIA A100 Tensor Core GPU 可针对 AI.数据分析和高性能计算 (HPC),在各种规模上实现出色的加速,应对极其严峻的计算挑战.作为 NVIDIA 数据中心 ...

  7. GPU—加速数据科学工作流程

    GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...

  8. NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架

    NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架 Introducing NVIDIA Jarvis: A Framework for GPU-Accelerated Conversa ...

  9. Keras学习环境配置-GPU加速版(Ubuntu 16.04 + CUDA8.0 + cuDNN6.0 + Tensorflow)

    本文是个人对Keras深度学习框架配置的总结,不周之处请指出,谢谢! 1. 首先,我们需要安装Ubuntu操作系统(Windows下也行),这里使用Ubuntu16.04版本: 2. 安装好Ubunt ...

随机推荐

  1. 【aws-系统】简单的SNS到电报通知机器人

    动机 我已经使用此设置几个月了,这是我的用例: 预定的提醒.我有一些安排好的CloudWatch Events,以提醒我有关各种日常活动以及我从文章和书籍中保存的想法数据库中的随机推销的信息. 应用程 ...

  2. POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)

    题意:       给你一个无向图,然后给了一个起点s和终点e,然后问从s到e的最短路是多少,中途有一个限制,那就是必须走k条边,路径可以反复走. 思路:       感觉很赞的一个题目,据说证明是什 ...

  3. SqlServer数据库主从同步

    分发/订阅模式实现SqlServer主从同步 在文章开始之前,我们先了解一下几个关键的概念: 分发服务器分发服务器是负责存储在同步过程中所用复制信息的服务器.可以比喻成报刊发行商. 分发数据库分发数据 ...

  4. Mac TouchBar 自定义工具-MTMR

    Github Install brew cask install mtmr 官网

  5. 设计一个对象池(Anno.XObjectPool)

    设计一个.net对象池   对象池对于创建开销比较大的对象来说很有意义,为了优化程序的运行速度.避免频繁创建销毁开销比较大的对象,我们可以通过对象池来复用创建开销大的对象.对象池的思路比较简单,事先创 ...

  6. 通过Python将监控数据由influxdb写入到MySQL

    一.项目背景 我们知道InfluxDB是最受欢迎的时序数据库(TSDB).InfluxDB具有 持续高并发写入.无更新:数据压缩存储:低查询延时 的特点.从下面这个权威的统计图中,就可以看出Influ ...

  7. MindSpore模型验证

    技术背景 在前面一篇博客中,我们介绍了MindSpore在机器学习过程中保存和加载模型的方法.这种将模型存储为静态文件的做法,使得我们可以更灵活的使用训练出来的模型,比如用于各种数据集的验证,或者是迁 ...

  8. 图扑软件正式加入腾讯智维生态发展计划,智能 IDC 开启数字经济新征程

    4 月 23 日,主题为<智汇科技,维新至善>的腾讯数据中心智维技术研讨会在深圳胜利召开,发布了腾讯智维 2.0 技术体系,深度揭秘了智维 2.0 新产品战略和技术规划.图扑软件(High ...

  9. Pytorch_Part6_正则化

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  10. foreign key 多对一 多对对 一对一

    使用foreign key 要清除先有哪张表再有哪张表,后表对应前表 例如现有部门再有员工,所以员工对应部门 现有作者后有书,所以书对应作者 现有潜在顾客后有顾客,所以顾客对应潜在顾客 多对多建立3张 ...