我想回答一些我经常被问到的问题:我需要什么样的电脑来进行深度学习?为什么fast.ai推荐Nvidia GPU?你为初学者推荐什么深度学习库?你如何把深度学习引入生产?我认为这些问题都属于一个总的主题:你需要什么(硬件、软件、背景和数据)来进行深入学习? 这篇文章是针对那些新进入这个领域的,并且对入门感兴趣的人。
你需要的硬件
我们感谢游戏业
电子游戏行业(收入方面)大于电影和音乐行业的总和。 在过去的20年里,视频游戏产业推动了GPU(图形处理单元)的巨大进步,其用于绘制图形所需的矩阵数学。幸运的是,这些正是深度学习所需的计算类型。GPU技术的这些进步是为什么现在的神经网络比几十年前更强大的一个关键部分。在没有GPU的情况下训练深度学习模型在大多数情况下将会非常缓慢。
并非所有的GPU都是一样的
大多数深度学习从业者不是直接编程GPU; 我们使用处理这个问题的软件库(如PyTorch或TensorFlow)。但是,要有效使用这些库,你需要访问正确类型的GPU。在几乎所有情况下,这意味着可以从Nvidia公司获得GPU。
CUDA和OpenCL是GPU编程的两种主要方式。CUDA是迄今为止最发达,拥有最广泛的生态系统,也是深度学习库最有力的支持。CUDA是由Nvidia创建的专有语言,因此它不能被其他公司的GPU使用。当fast.ai推荐使用Nvidia GPU时,我们并不是对Nvidia有特别的亲近或信任,而是这是迄今为止深度学习的最佳选择。
Nvidia在GPU市场占据主导地位,其次是竞争对手AMD公司。 今年夏天,AMD宣布发布一个名为ROCm的平台,为深度学习提供更多的支持。 PyTorch,TensorFlow,MxNet和CNTK等主要深度学习库的ROCm状态仍在开发中。虽然我希望看到一个开源的替代方案取得成功,但我不得不承认,我发现ROCm的文档很难理解。我刚刚阅读了ROCm网站的Overview,Getting Started和Deep Learning页面,但仍然不能用我自己的话来解释ROCm,尽管我想在这里把它包括在内以便完整。(我承认没有硬件背景,但我认为像我这样的数据科学家应该成为这个项目的目标受众之一。)
如果你没有GPU ...
如果你的电脑没有GPU或者没有Nvidia GPU,那么你有几个很好的选择:
1.使用Crestle,通过你的浏览器:Crestle是一项服务(由fast.ai学生Anurag Goel开发),为你提供在云上的已经预先安装并配置为在GPU上运行的所有流行的科学和深度学习框架的云服务。它很容易通过你的浏览器访问。新用户可免费获得10小时和1 GB的存储空间。之后,GPU使用率是每小时59美分。我向那些刚接触AWS或新手的人推荐使用这个选择来使用控制台。
2.通过你的控制台设置AWS云实例:你可以按照这个fast.ai设置课程中的步骤创建一个AWS实例(远程为你提供Nvidia GPU)。AWS每小时收取90美分。尽管我们的设置材料都是关于AWS(并且你会发现对AWS最多的论坛支持),但是一位fast.ai学生创建了一个设置Azure虚拟机进行深度学习的指南。如果有人写关于Google云端引擎的博客文章,我很乐意分享和添加一个链接。
3.建立你自己的框架。这是我们的fast.ai论坛中的一个冗长的话题,在论坛里人们可以提出问题,分享他们正在使用的组件,并发布其他有用的链接和提示。最便宜的新型Nvidia GPU是300美元左右,一些学生在eBay或Craigslist上发现了更便宜的旧版GPU,而另外一些则是为了更强大的GPU支付更多的费用。我们几个学生写博客文章记录他们如何建立他们的机器:
深度困惑:建立深度学习机的不幸事件(Mariya Yao)
建立一个便捷的深度学习机器(Sravya Tirukkovalur)
建立你自己的深度学习框(Brendan Fortuner)
你需要的软件
深度学习是一个相对年轻的领域,库和工具正在迅速改变。 例如,Theano,在2016年我们选择使用在我们的课程的第1部分,它刚刚退休。目前我们正在使用的PyTorch仅在今年(2017年)发布。 就像Jeremy之前写的那样,你应该假定你今天学到的任何特定的库和软件都会在一两年内被淘汰。最重要的是理解底层概念,为此,我们在Pytorch上创建了自己的库,我们相信深度学习概念更清晰,并将最佳实践编码为默认值。
Python是深度学习中最常用的语言。有许多深度学习库可供选择,几乎所有主要科技公司都支持不同的库,尽管这些公司的员工经常使用各种工具。深度学习库包括TensorFlow(谷歌),PyTorch(Facebook),MxNet(华盛顿大学,由亚马逊改编),CNTK(微软),DeepLearning4j(Skymind),Caffe2(也是Facebook),Nnabla(索尼),PaddlePaddle(百度),以及Keras(在此列表中的其他几个库之上运行的高级API)。所有这些都有可用的Python选项。
动态与静态图计算
在fast.ai,我们优先考虑程序员可以进行实验和迭代(通过更容易的调试和更直观的设计)比理论性能提速更重要的速度。这就是我们使用PyTorch的原因,PyTorch是一个具有动态计算功能的灵活的深度学习库。
深度学习库之间的一个区别是它们是使用动态还是静态计算(一些库,如MxNet和现在的TensorFlow,两个都允许)。动态计算意味着程序按照你编写的顺序执行。这通常使得调试更容易,并且更容易将你的想法转换成代码。静态计算意味着你预先为你的神经网络构建一个结构,然后对其执行操作。从理论上讲,这允许编译器进行更大的优化,尽管这也意味着在你的程序和编译器执行的程序之间可能存在更多的断开。这也意味着,错误可能会更多地从导致错误的代码中移除(例如,如果你在构建图形时存在错误,那么直到你稍后执行操作时,你才可能意识到)。尽管理论上有静态计算图的语言比具有动态计算的语言具有更好的性能,但我们常常发现,在实际中,这种情况并非如此
转自:云栖社区
完整内容请点击“阅读原文”