【深度学习】深度学习入门指北——从硬件到软件

来源:互联网 发布:美团大数据招聘 编辑:程序博客网 时间:2024/05/16 07:48

作者:隔壁王大喵

近日,Rachel Thomas在fast.ai上发布了一篇博文《What you need to do deep learning》,他希望通过这篇文章回答一些深度学习入门者经常会问到的问题:什么样的电脑才能用来做深度学习?为什么 fast.ai 推荐使用英伟达的 GPU 呢?哪些深度学习库不适合初学者?你又是如何将深度学习应用到实际生产中的?

Rachel Thomas认为,所有的这些问题都可以归结到一个主题,那就是“究竟需要准备好哪些东西(硬件、软件、知识背景以及数据等)才能开始深度学习?”。所以本篇博客正是针对那些想入门深度学习以及对深度学习感兴趣的新人而写的。

一、硬件基础

关于硬件基础,我们首先不得不感谢一下游戏工业的蓬勃发展。

视频游戏工业的体量(就盈利而言)远远超出了电影工业和音乐工业之和(http://t.cn/RYyaZ9Y)。在过去的 20 年里,视频游戏工业极大地推进了 GPUs (图像处理单元)的发展进步,这是由于 GPU 可用于加速游戏图像渲染的矩阵数学运算过程。并且非常幸运的是,深度学习运算中也涉及到大量的矩阵操作。而这些年在 GPU 上取得运算能力的进步也正是为什么神经网络算法在早期没有发挥出效力,直到在近几年才展露头角的原因之一。因为在没有 GPU 的条件下,要训练一个深度学习模型在大多数情况下都将是一个非常漫长而痛苦的过程。

图一 英伟达Tesla系列显卡

注意 GPU 的选择

大多数的深度学习从业者并不需要直接通过编程来操控 GPUs,而是使用一些诸如 PyTorch 或 TensorFlow 这样的软件包来实现的。但是为了能够高效地使用这些软件包,我们必须购买正确的 GPU,而这几乎就等价于我们需要购买英伟达出产的 GPU(http://t.cn/zjYolU1)。

CUDA(http://t.cn/zj4MD9I) 和 OpenCL (http://t.cn/RYya30e)是当前用来实现 GPU 编程的主流方式。CUDA 是迄今为止发展最好的,拥有最广泛生态系统的,也是最被深度学习框架支持的集成技术。由于 CUDA 是由英伟达创建的集成技术,所以它无法被其它公司的 GPU 所使用。所以当 fast.ai 推荐使用英伟达的 GPU 时,并不是因为我们对英伟达公司有好感或者说英伟达给了好处,而仅仅是因为这是目前深度学习的最佳选择。

英伟达在 GPUs 的市场中占据着绝对的统治地位,然后紧随其后的竞争者则是 AMD。在这个夏天,AMD 发布了 ROCm(http://t.cn/RYySiUl)平台,用于对深度学习提供更多的技术支持。当前 ROCm 平台对于主流的深度学习框架(诸如 PyTorch, TensorFlow 和 CNTK 等)的支持还处于开发阶段。因为 ROCm 平台进行了开源,并且能够为深度学习的底层提供更多的选择,我是非常希望它能够取得成功的,但还是不得不承认 ROCm 的文档比较晦涩难懂。以至于尽管我想要这里介绍一下 ROCm 平台,但是在阅读了 ROCm 网站提供的 Overview、Getting Started 和 Deep Learning 页面之后却依然无法通过自己的语言来描述和解释 ROCm。(我承认自己没有硬件知识背景,但是我认为像我这样的数据科学家应该成为该项目的目标读者之一)

如果没有 GPU

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

  • 使用 Crestle,仅仅需要使用浏览器进行操作。Crestle 提供了一套已经配置成熟的云服务方案(由 fast.ai 的学生 Anurag Goel 开发),云服务器中已经预装了所有的主流科学计算与深度学习将使用到的框架,并且还配置好了相应的 GPU 支持。而且你能够通过浏览器轻松地进行访问。每位新用户都将免费获得 10 个小时的体验时间以及 1GB 的存储空间。体验过后,带有 GPU 支持的服务器收费是每小时 0.59 美元。我建议那些从未使用过 AWS 服务或者不熟悉控制台操作的同学选择这个。

  • 通过控制台创建一个 AWS 云实例。你可以选择参考这篇由 fast.ai 出品的配置教程(http://t.cn/RYySB4y)来创建一个 AWS 实例(AWS 能够远程为你提供英伟达的 GPUs 服务)。AWS 的收费标准是每小时 0.9 美元。虽然我们的教程是关于配置 AWS 的,还是有一位 fast.ai 的同学写了一篇关于在 Azure 虚拟机上配置深度学习环境的博客(http://t.cn/RYySsq5)。另外如果有哪位同学写了关于如何在 Google 云引擎上配置深度学习环境的博客,我也非常乐于将其链接分享出来并添加到这里。

  • 组建自己的深度学习工作站。这是我们 fast.ai 论坛中一个较为冗长的话题(http://t.cn/RYyoZz4),人们可以在其中提问题、分享自己正在使用的组件以及发布其它有用的链接或者提示。最便宜的新款英伟达 GPU 大概需要 300 美元左右,有些同学在 eBay 或 Craigslist 上发现了更便宜的旧版 GPU,另外也有些同学选择了花费更多的钱来购买性能更加强悍的 GPUs。并且有许多的同学写了博客来分享他们是如何组建起自己的深度学习机器:

    • Mariya Yao 写的 Deep Confusion: Misadventures in Building a Deep Learning Machine(http://t.cn/RYyoUYe)

    • Sravya Tirukkovalur 写的 Setting up a Deep learning machine in a lazy yet quick way(http://t.cn/RYyotrF)


    • Brendan Fortuner 写的 Building your own deep learning box(http://t.cn/RYyoxft)

二、软件基础

深度学习还是一个相对新兴的领域,因此与它有关的框架和工具也是日新月异。比如说,我们在 2016 年教学课程第一部分采用的深度学习框架 Theano 就在最近宣布停止了支持和更新。而我们目前正在使用的 PyTorch 框架则是 2017 刚刚发布的。正如 Jeremy 在早些的博客(http://t.cn/Rpqj6pu)中提到的——在学习任何特定的深度学习框架和软件时你都必须做好它们可能在一年或者两年后将被抛弃的心理准备。最重要的事情是理解最基础的概念,所以为了实现这一目标,我们基于 PyTorch 的基础上创建了自己的软件库,并且我们认为这将有助于更加清晰地展示深度学习的概念,同时也有助于实现最佳编码。

Python 是当前在深度学习领域使用最为广泛的编程语言。另外还存在着各式各样的深度学习框架可供选择,并且几乎所有的主流科技公司都支持着各自不同的框架,尽管这些公司的员工在实际研发中总是混合使用着各类框架。深度学习框架包括有 TensorFlow (谷歌)、PyTorch (Facebook)、MxNet (华盛顿大学开发,后由亚马逊维护)、CNTK (微软)、DeepLearning4j (Skymind)、Caffe2 (Facebook)、Nnabla (索尼)、PaddlePaddle (百度)和Keras (一个基于前边若干个框架为基础进行高级封装的 API)。并且所有这些框架都提供有 Python 的 API 接口。

动态图 vs. 静态图

在 fast.ai,我们在选择框架时优先考虑程序员编程的便捷性(能更方便地进行调试和更直观地设计),而不是框架所能带来的模型加速能力。这也正是我们选择 PyTorch 的理由,因为它是一个具有动态图机制的灵活框架。

依据采用动态计算或是静态计算的不同,可以将这些众多的深度学习框架划分成两大阵营,当然也有些框架同时具有动态计算和静态计算两种机制(比如 MxNet 和最新的 TensorFlow)。动态计算意味着程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)。尽管理论上而言,静态计算图比动态计算图具有更好的性能,但是在实践中我们经常发现并不是这样的。

谷歌的 TensorFlow 主要使用了静态计算图,而 Facebook 的 PyTorch 则使用了动态计算图机制。(注:TensorFlow 在两周前宣布了一个动态计算选项 Eager Execution(http://t.cn/RlZizQ2),不过该特性还比较新颖并且 TensorFlow 的文档和项目依然以静态计算为主)。在九月份,fast.ai 宣布将在今年的课程中采用 PyTorch 框架进行教学以及开发 fast.ai 自己的框架(实际上就是采用了更好的编码方式对 PyTorch 进行高级封装)。简而言之,以下是我们选择 PyTorch 的几个原因(更详细的原因请参见这里http://t.cn/Rpqj6pu):

  • 更加容易调试

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

  • 传统的面向对象编程风格(这对我们来说更加自然)

  • TensorFlow 中采用的诸如 scope 和 sessions 等不寻常的机制容易使人感到疑惑不解,而且需要花费更多时间学习

谷歌在推广 TensorFlow 上已经花费了大量的资源,其投入要远远大于任何其它公司或者团队,并且我想这也是为什么 TensorFlow 会如此出名的原因之一(对于很多深度学习的门外汉,TensorFlow 是他们唯一听说过的框架)。正如之前所述,TensorFlow 在几周前发布了动态计算选项,这将解决了一些上述提到的问题。然后许多人就向 fast.ai 提问说我们是否考虑迁移回 TensorFlow 框架。但是目前 TensorFlow 提供的动态选项还比较新颖而且开发也不够完善,所以我们依然选择继续愉快地使用 PyTorch。但是 TensorFlow 团队非常乐意于接受我们的想法,我们也很高兴看到我们的 fastai 库(http://t.cn/RYyK6jC)被移植到 TensorFlow 中。

三、如何让技术落地?

许多人把工业应用中的深度学习想的过于复杂,认为自己需要比实际更加复杂的系统。你可以在生产中使用 CPU 和网络服务器,并且这也是我们在多数情况下所推荐的。这里有一些关键点:

  • 在工业应用中需要训练网络的情况是非常罕见的。即便你想要每天都更新模型权重,你也不需要在应用中去进行训练。这是一条很好的消息,这意味着我们在应用中只需要进行推理(模型前向传播的过程),这远比训练要来的简单和快速。

  • 你可以使用任何自己所喜爱的网络服务器(比如 Flask),并且将推理的过程设置成一个简单的 API 调用。

  • 只有能够有效地批量处理数据,GPU 才能够提供更快的计算速度。不然假设你每秒获得 32 个请求,使用 GPU 反而可能减慢速度,因为从第一个请求数据达到直到收集全 32 个请求数据时,你必须等待一秒钟,然后再执行计算,然后返回结果。因此我们建议在实际生产中使用 CPU,并且你也可以根据需要添加更多的 CPU(这比使用多 GPU 要来的简单)。

对于大公司而言在服务器中采用 GPU 是有意义的,当你发展到这个程度的时候你自然就知道自己需要了。但是过早地进行扩展只会增加不必要的复杂性并且拖慢你的速度。

四、所需背景:一年的编程经历

启发 Jeremy 和我编写《写给程序员看的深度学习实践》的一大原因是,目前大多数的深度学习材料存在着以下缺陷:

  • 内容过于简单笼统,以至于不能提供如何将深度学习应用在实践中或者创造最先进模型所需的信息或技能。如果你仅仅需要一个整体的概览,这些内容没有问题。但是如果你想学会如何应用深度学习,这却是远远不够的。

  • 高度理论化并且假设读者具备有本科生的数学背景知识。对于许多人来说,这是一道障碍,即使是具有数学博士学位的人。另外我发现这些过于理论化的学习对于掌握如何编写实际代码并没有特别大的帮助。这些材料有这种理论化的倾向其实也并不奇怪。因为直到最近,深度学习还是一门学术学科,并且很大程度上是由在顶级学术刊物上发表的内容所推动的。

我们的《写给程序员看的深度学习实践》是一门免费课程,其特点在于仅仅要求学员具备至少一年的编程经验,然后我们就可以教会你们如何创建最先进的模型。你的编程语言背景可以是任何一门语言,但是在开始学习我们的课程之前你最好先学会使用 Python,因为这正是我们所使用的。我们将根据需要介绍相关的数学概念,并不建议大家单独尝试学习数学理论。

如果你还不知道如何编写代码,我们强烈建议你去学习一下。另外如果你对数据科学感兴趣的话,Python 是一门非常合适的语言。

五、所需数据:远比你想象的要少

虽然许多人都声称需要具备有像谷歌一般的数据量才能从事深度学习工作,但这种观点是错误的。因为迁移学习(结合诸如数据增强的技术)的出现使得人们能够将经过预训练的模型在更小的数据集上进行训练。正如我们在其它地方谈到的(http://t.cn/RCoXlPY),在一家医疗初创公司 Enlitic,Jeremy Howard 带领着一支团队仅仅只使用了 1000 例肺癌 CT 扫描样本,创建了一个比 4 位专业放射科医师具备更准确判别肺癌能力的算法。另外 C++ 库 Dlib 提供了另外一个样例,在这个例子中仅仅使用了 4 张图片的 18 张脸来训练一个面部检测器!

图二 使用Dlib实现人脸识别

六、关于 fast.ai

fast.ai 是一个致力于为所有人提供学习深度学习机会的平台。我们相信,深度学习将是一个转型的技术,将显着改善对发展中国家影响最大的医药,教育,农业,交通等诸多领域。但是要真正实现这一点,技术需要比现在更加容易使用,可靠和直观。我们正在研究综合利用人类与计算机各自优势的混合“人机”解决方案,建立一个随时可用的应用程序和模型库,开发完整的教育框架,并为开发人员和用户编写能够快速上手和易于使用的软件。




人工智能赛博物理操作系统

AI-CPS OS

人工智能赛博物理操作系统(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。


AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。


领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:

  1. 重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?

  2. 重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?

  3. 重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?

AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:

  1. 精细种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。

  2. 智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

  3. 高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

  4. 不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。

  5. 边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。

AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:

  1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

  2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率

  3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间


给决策制定者和商业领袖的建议:

  1. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

  2. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新

    评估未来的知识和技能类型;

  3. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开

    发过程中确定更加明晰的标准和最佳实践;

  4. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临

    较高失业风险的人群;

  5. 开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。


子曰:“君子和而不同,小人同而不和。”  《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。


如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!


新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。





产业智能官  AI-CPS



用“人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链






长按上方二维码关注微信公众号: AI-CPS,更多信息回复:


新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能农业”、“智能金融”、“智能零售”、“智能城市”、“智能驾驶”;新模式:“财富空间”、“特色小镇”、“赛博物理”、“供应链金融”


详细介绍,访问官网:AI-CPS.NET





本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!



版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com




阅读全文
0 0
原创粉丝点击