深度学习初学者经常会问到这些问题:开发深度学习系统,我们需要什么样的计算机?为什么绝大多数人会推荐英伟达 GPU?对于初学者而言哪种深度学习框架是最好的?如何将深度学习应用到生产环境中去?所有这些问题都可以归结为一个——搭建深度学习系统都需要些什么?(其中包含硬件、软件、环境与数据)在本文中,让我们将这些问题一并解决。

你需要的硬件

我们要感谢游戏行业

从收益来看,视频游戏行业比电影和音乐行业加起来还要大。过去 20 年中,视频游戏行业推动 GPU 出现了巨大进步,GPU 用于制作呈现图所需的矩阵运算。幸运的是,这些正是深度学习所需的计算类型。GPU 行业的发展是神经网络比几十年前更加强大的重要原因之一。大部分情况下不使用 GPU 训练深度学习模型会非常慢。

并非所有 GPU 都是一样的

大部分深度学习从业者不直接编写 GPU CUDA 代码,我们通常会使用软件库(如 PyTorch 或 TensorFlow)。但是,要想高效使用软件库,你需要选择合适的 GPU。在几乎所有情况下,这意味着你需要使用英伟达的产品。

CUDA 和 OpenCL 是进行 GPU 编程的两种主要方式。CUDA 目前是开发最好、具备最广泛生态系统、深度学习库最支持的方式。CUDA 是英伟达创建的专用语言,因此其他公司的 GPU 无法使用它。几乎可以肯定,英伟达 GPU 是目前执行深度学习任务最好的选择。

英伟达主导 GPU 市场,它最大的竞争对手是 AMD。今年夏天,AMD 发布了 ROCm 平台提供深度学习支持。该工具适用于主流深度学习库(如 PyTorch、TensorFlow、MxNet 和 CNTK)。目前,ROCm 仍然在不断开发中。虽然对于用户而言我们都希望看到另一个开源的替代方案崛起,但是我必须得承认目前的 ROCm 文档难以理解。我在阅读 ROCm 网站上「概述、快速上手和深度学习」的页面之后仍然无法用自己的语言复述出其中的内容——尽管我很希望把 AMD 的这部分内容包含进本文中(虽然我对于硬件的理解不深,但像我这样的数据科学家应该是这一项目的使用者)。

如果你没有 GPU

如果你的电脑没有 GPU 或者不是英伟达的 GPU,那么你有以下几个选择:

  • 通过浏览器使用 Crestle:Crestle 是 fast.ai 学生 Anurag Goel 开发的一项服务,提供云服务,所有流行的科学和深度学习框架都已经预安装和配置完成,便于在云端运行 GPU。你可以通过浏览器轻松获取。新用户可免费使用 10 小时,享受 1 GB 的存储空间。10 小时之后,每小时 59 美分。我推荐 AWS 新手或刚开始使用控制台的人选择该选项。

  • 通过控制台设置一个 AWS 云实例:你可以按照该说明创建一个 AWS 实例(http://course.fast.ai/lessons/aws.html)。AWS 收费是 90 美分/小时。我们的设置材料是关于 AWS 的,不过 fast.ai 的学生为设置适合深度学习的 Azure 虚拟机创建了一个教程(https://medium.com/@abhikprince/setting-up-an-azure-vm-for-deep-learning-bb76b453272b)。

  • 构建自己的深度学习机器。这里是 fast.ai 的论坛:http://forums.fast.ai/t/making-your-own-server/174,人们在这里提问,分享使用的组件,并发布一些有用的链接和贴士。最便宜的全新英伟达 GPU 需要 300 美元左右,很多学生发现这比在 eBay 或 Craigslist 上使用 GPU 便宜。fast.ai 的一些学生写了几篇博客记录他们如何配置自己的设备:

你需要的软件

深度学习是一个新兴领域,软件库和工具包每天都在快速地提升。例如我们常在课程和研究中使用的 Theano 刚刚退休,而现如今非常流行的 PyTorch 也只不过是今年才发布。可能正如 Jeremy 所说的那样,我们必须相信现在具体使用的函数库或深度学习框架在一两年后会有很大的变更,甚至有可能不复存在。因此更重要的是对深度学习底层概念的理解,所以我们在 PyTorch 上构建了自己的库,我们相信它能令深度学习概念更加清晰,并通过编写标准模型进一步在实践中理解这些概念。

因为 Python 的简洁和强大的软件包扩展体系,它目前是深度学习中最常见的语言。目前我们有很多深度学习库能够选择,例如 TensorFlow(谷歌)、PyTorch(Facebook)、MXNet(华盛顿大学和亚马逊)、CNTK(微软)、DeepLearning4j(Skymind)、Caffe2(Facebook)、Nnabla(索尼)、PaddlePaddle(百度)和 Keras(构建在前面部分库之上的高级 API)。当然,这些深度学习框架都支持 Python。

动态计算图 vs. 静态计算图

在很多教学和研究中,我们优先考虑开发者是否能快速进行实验与迭代,而不是考虑具体的理论性能或计算效率。这就要求深度学习框架具有更简洁的调试和更直观的设计等属性,而现如今流行的 PyTorch 正好符合这一点,它的动态计算图令深度学习模型的构建变得更加明了与简洁。

各深度学习库之间一个重要的区别就是它到底是使用动态计算图还是静态计算图,当然目前的 TensorFlow 和 MXNet 两者都支持。动态计算图表示程序将按照我们编写的顺序执行,这通常令模型或代码的调试更加方便,也使我们将创意从头到尾按贯序的方式更直观地实现。而对于静态计算图来说,我们首先要声明或构建一个计算图,并确定每一个结点和边的内容与定代码然后再执行该静态计算图以训练模型。从理论上来说,静态计算图允许编译器执行更多的优化,这也就导致我们声明的代码内容和编译器确切执行内容可能会有一些差别。不过即使理论上证明静态计算图要比动态计算图拥有更好的性能,但实际上很可能恰恰相反。

谷歌的 TensorFlow 可能是最常用的静态计算图框架,当然它也是我们最常用的深度学习框架。而 Facebook 的 PyTorch 是现在最常用的动态计算图框架。虽然 TensorFlow 目前也表明它能支持动态计算图(Eager Execution),但 Eager Execution 毕竟只是新生的库,TensorFlow 的文档也还是以静态计算图为主。在今年九月,fast.ai 就表明它们的课程会使用 PyTorch 而不是 TensorFlow,并且还会使用包装的高级 PyTorch 库来实现更好的实践体验。一般来说选择 PyTorch 有以下几个原因:

  • 易于调试

  • 动态计算图更适用于自然语言处理

  • 支持传统的面向对象编程风格

  • TensorFlow 的 上下文管理器和会话等机制需要我们花费额外的精力学习

fast.ai 认为谷歌在 TensorFlow 上做了大量的推广与营销,这也是 TensorFlow 如此出名的原因。对于很多深度学习门外汉来说,TensorFlow 可能是他们听过唯一的深度学习框架。不过虽然 TensorFlow 前几周发布了动态计算图,但对于很多人来说这一扩展库还是非常新的概念,它还远远不够完善与成熟。此外,TensorFlow 团队对于 fast.ai 的想法十分欢迎,因此我们也期待着把 fast.ai 库迁移到 TensorFlow 中。

生产所需:不需要 GPU

很多人过分复杂化在生产中使用深度学习的想法,并且认为他们需要比平时更复杂的系统才行。在生产中使用深度学习一块 CPU 就可以,服务器可任选。大多数使用案例我们都推荐这么做。以下是几个要点:

  • 在生产中进行训练的情况非常少见。即使你想每天都更新模型权重,也无需在生产中进行训练。这是一个好消息!因为这样你只需要在生产中进行推断(模型中的前向传递)就行了,比训练更快也更简单。

  • 你可以使用任意服务器(如 Flask),将推断设置为一个简单的 API 调用。

  • 如果你能够高效分批处理数据,GPU 仅提供加速。即使你每秒收到 32 个请求,使用 GPU 很可能降低速度,因为你必须等一秒:第一个请求先到达收集所有 32 个请求,然后执行计算,再返回结果。我们推荐在生产中使用 CPU,你可以按需要添加更多 CPU(比使用多个 GPU 简单一些)。

大公司在生产过程中使用 GPU 可能有意义,等你到那个规模时就知道了。过早尝试扩大规模只会增加不必要的复杂性,降低速度。

学习资源

目前网上有非常多的机器学习和深度学习资源,甚至各种各样的深度学习速成班也快速地成长了起来。因此,我们有必要了解优秀的学习资源到底有哪些。一般来说,学习资源可分为四部分,首先是如吴恩达 Machine Learning 或 Deep Learning Specialization 等课程视频,随后还有李航的统计学习方法或 Ian Goodfellow 的 DeepLearning 书籍,后面的机器学习或深度学习技术博客也不能错过。当然,最后部分的学习资源应该来自研究论文,因为我们要是希望了解一个算法或一个技术,没有什么是比专门描述该技术的论文讲述地更加清晰。

以上这四部分的资源又可以从两个方面理解,即实践和理论。对于实践来说,我们只需要理解深度学习的基本概念,然后再详细了解各深度学习框架的库函数就能学着实现简单的深度学习模型。而对于理论来说,数学基础是十分重要的,先不说基本的概率论、微积分、线性代数,那些深度学习概念背后的数学推导我们同样需要理解。此外,深度学习非常核心的最优化方法也是一个大坑,需要非常多的理论知识来做出改进。

课程建议:

  • 斯坦福大学 CS231n 卷积神经网络与图像识别:http://cs231n.stanford.edu/

  • 吴恩达 Deep Learning Specialization:https://www.coursera.org/specializations/deep-learning

  • Udacity 免费深度学习课程:https://www.udacity.com/course/deep-learning—ud730

  • Geoffrey Hinton 的 Neural Networks For Machine Learning:https://www.coursera.org/learn/neural-networks

  • 斯坦福大学 CS224d 自然语言处理深度学习:http://cs224d.stanford.edu/

所需数据:比你想象的少得多

尽管很多文章声称需要谷歌级别的数据集才能做深度学习,这种说法是错误的。迁移学习(数据增强技术相关)使人们可以在小型数据集上使用预训练的模型。在医疗创业公司 Enlitic,Jeremy Howard 带领的团队仅使用 1000 个肺癌 CT 扫描样本构建了一个算法,该算法诊断肺癌的准确率超过 4 个放射科专家。C++ 库 Dlib 有一个样例:人脸检测器仅使用包含 18 张人脸的 4 张图像就可以进行准确训练!

Dlib 的人脸识别样例

声明:本文由机器之心编译出品,原文来自fast.ai,作者Rachel Thomas

干货丨从硬件配置到框架选择,请以这种姿势入坑深度学习相关推荐

  1. 干货丨从感知机到深度神经网络,带你入坑深度学习

    作者:Adi Chris 机器之心编译 参与:朱乾树.刘晓坤 机器学习工程师 Adi Chris 最近学习完吴恩达在 Coursera 上的最新课程后,决定写篇博客来记录下自己对这一领域的理解.他建议 ...

  2. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架

    小编说  时间过的好快啊,小伙伴们是不是都快进入寒假啦?但是学习可不要落下哦!  本期教材  本期为大家发放的教材为:<Python机器学习实践指南>.<Tensorflow 实战G ...

  3. Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发

    日前,网约车服务商 Uber 开源并发布了它们开发的 Ludwig,这是一款基于 Google TensorFlow 框架上的开源工具箱.藉由 Ludwig,用户无需再编写任何代码即可进行深度学习的开 ...

  4. 是选择Keras还是PyTorch开始你的深度学习之旅呢?

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 135 篇文章,本文大约 7000 字,阅读大约需要 20 分钟 原文 ...

  5. 前沿丨DeepMind提出神经元删除法:通过理解每个神经元来理解深度学习

    近日,DeepMind 发表博客介绍其对神经网络可解释性的最新研究成果.受神经科学启发,他们通过删除神经元来探索其对网络性能的影响.研究发现,和过去的经验直觉相反,选择性神经元(如「猫神经元」)对于网 ...

  6. 深度学习双显卡配置_linux(manjaro) tensorflow2.1 conda cuda10 双显卡笔记本深度学习环境搭建...

    linux(manjaro) tensorflow2.1 conda cuda10 双显卡笔记本深度学习环境搭建 下学期要学tensorflow,看着我可怜的1050ti,流下了贫穷的泪水,但无奈要做 ...

  7. 干货丨先搞懂这八大基础概念,再谈机器学习入门

    翻译 | AI科技大本营 参与 | 林椿眄 准备好开始AI了吗?可能你已经开始了在机器学习领域的实践学习,但是依然想要扩展你的知识并进一步了解那些你听过却没有时间了解的话题. 这些机器学习的专业术语能 ...

  8. 云平台运行python_如何免费云端运行Python深度学习框架?

    想运行TuriCreate,却没有苹果电脑,也没有Linux使用经验,怎么办?用上这款云端应用,让你免安装Python运行环境.一分钱不用花,以高性能GPU,轻松玩儿转深度学习. 痛点 <如何用 ...

  9. 选择服务器租用如何挑选硬件配置

    现在服务器租用已经成为IDC行业很受欢迎的业务,很多想租用服务器或者租用过服务器的人都会考虑这几方面,首先他们一般会想到的就是机房的价格.机器的配置和稳定性.但是其实大家都明白,人无完人,也没有十全十 ...

最新文章

  1. 2021年大数据Flink(二十四):​​​​​​​Allowed Lateness案例演示
  2. 检索、问答、情感分析产业范例分享,代码模型全开源太香了!
  3. mysql insert 自增_MySQL自增列插入0值的解决方案
  4. 第三篇——第二部分——第六文 监控SQL Server镜像
  5. QT的QDBusContext类的使用
  6. Windows 自启动总结《转》
  7. 员工价值——如何体现自己价值,如何被自己的领导认可
  8. shell编程快捷方法
  9. python插件使用教程_Python插件机制实现详解
  10. 线程安全的atomic wrapper classes例子
  11. python中tell函数_PYTHON学习14.09:Python seek()和tell()函数详解
  12. 移动端H5 QQ在线客服链接代码
  13. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear...
  14. excel取消按颜色排序_在Excel中按颜色排序
  15. Exponential family: 指数分布族
  16. MATLAB许可证过期的解决办法
  17. mysql数据库基础语句讲解
  18. 03.先了解一些python的基础语法
  19. [Usaco2009 Nov]lights
  20. 一个普通码农的Linux之路

热门文章

  1. 【报名】杨植麟 :从学习的角度看NLP的现状与未来
  2. 2020图灵年度好书大赏 | 15周年视频纪念版
  3. 创业,你准备好了吗?
  4. 在元宇宙里怎么交朋友?Meta发布跨语种交流语音模型,支持128种语言无障碍对话...
  5. 独家 | OpenCV1.12 对极几何和立体视觉简介(附链接)
  6. DeepMind发布最新《神经网络中持续学习》综述论文!
  7. 经典 | 吴恩达《机器学习落地应用指南》(30页ppt)
  8. 报名 | 2019年社会计算机国际会议
  9. 只有程序员才能看懂的30张图,绝配!
  10. CNN被打败!Transformer将统帅人工智能?