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 加速人工智能:新型计算模式

    纽约大学本周有一场探讨 "人工智能的未来" 的年度座谈会,Yann LeCun 邀请NVIDIA 联合创始人兼首席执行官黄仁勋 (Jen-Hsun Huang)先生在座谈会上发言. ...

  2. Colaboratory:手把手教你使用Google免费的云端IDE进行深度学习(免费的GPU加速)的详细攻略

    Colaboratory:手把手教你使用Google免费的云端IDE进行深度学习(免费的GPU加速)的详细攻略 目录 Colaboratory简介 Colaboratory使用步骤 (1).首先登陆谷 ...

  3. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  4. 深度神经网络移动终端GPU加速实践

    深度神经网络移动终端GPU加速实践 前言 AI无疑是近几年的超级风口,"All in AI"等押宝AI的口号层出不穷,AI的风头一时无两.实现AI有很多种途径方法,这其中深度学习神 ...

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

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

  6. Ubuntu16.04 安装配置深度学习配置:GPU加速 Cuda+cudnn+opencv+caffe

    目录 一. 电脑配置: 二. 安装过程 1.安装相关依赖项 2.安装NVIDIA驱动 一,下载安装驱动法 二.终端直接下载安装驱动法. 3.安装CUDA 4.配置cuDNN 5.安装opencv3.1 ...

  7. 利用多 GPU 加速深度学习模型训练

    01 - 前言 深度学习模型通常使用 GPU 训练,因为 GPU 具有相比 CPU 更高的计算能力,以 Tesla V100 为例,使用 Tensor Core 加速的半精度浮点计算能力达到 125 ...

  8. 【Stable Diffusion/NovelAI Diffusion的AMD GPU加速推理探索】

    测试机子配置: 1:AMD RX6600(显存8g)+i5 12600KF 16g内存 (台式机) 2:RTX 3070 laptop(显存8g)+i7 10870H 32g内存 (HP暗夜精灵笔记本 ...

  9. fpga深度学习gpu加速_TornadoVM:使用GPU和FPGA加速Java

    fpga深度学习gpu加速 重要要点 TornadoVM是一个编程和执行框架,用于在异构硬件(多核CPU,GPU和FPGA)上卸载和运行JVM应用程序 TornadoVM通过OpenCL的新后端扩展了 ...

最新文章

  1. java项目怎么定义异常_在Java项目中如何实现自定义异常
  2. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc
  3. linux环境下安装软件 快速,不超时
  4. c++不是类型安全的语言
  5. safari 获取视频流_如何在Safari中将RSS feed和社交媒体合并为一个流
  6. java实现关键词云_Java synchronized 关键词详细说明
  7. 操作页面元素WebElement—Selenium自动化测试指南(4)
  8. CRM Online Outlook Client Configuration Wizard
  9. win7+vs2008+windows mobile6.5.3
  10. pytorch如何将训练提速?
  11. kittito_rosbag入坑教程
  12. NYOJ 61:传纸条(一)(三维DP)
  13. 总结命令----tar
  14. java加入md5_javamd5加密解密
  15. 计算机硬盘怎么设置ntfs,如何把计算机硬盘文件系统fat32改为ntfs.doc
  16. A simple test
  17. 颜色列表 delphi中使用颜色
  18. newmultipartentity php,使用MultipartEntity图片上传
  19. 利用for循环打印实心棱形和空心棱形
  20. ExtJS快速入门学习指南

热门文章

  1. js异步提交form表单的解决方案
  2. Go 学习笔记(63)— Go 中的 for ... range 对切片和数组的差异
  3. Keras框架下的保存模型和加载模型
  4. logging.basicConfig函数
  5. NVIDIA GPUs上深度学习推荐模型的优化
  6. 深度学习模型轻量化(下)
  7. 2021年大数据Spark(二):四大特点
  8. zookeeper原理特点案例
  9. VMware14安装CentOS7的详细教程
  10. 实用的Linux 安装 zip unzip