深度学习是一个计算密集型领域,GPU的选择将从根本上决定你的深度学习实验。如果没有GPU,一项实验可能需要数月才能完成,或者一项实验可能会运行一天而仅关闭选定的参数;良好且稳定的GPU可以让您在深度学习网络中以天、小时和计数快速迭代。在几分钟内运行实验,而不是几个月、几天和几小时。因此,在购买GPU时做出正确的选择至关重要。那么,如何选择适合自己的GPU呢?这正是这篇博文探讨的内容,旨在帮助您做出正确的选择。对于深度学习初学者来说,拥有一个快速的GPU很重要,因为它可以让您快速获得实践经验,帮助您建立专业知识,帮助您将深度学习应用于新问题。如果没有这种即时反馈,从错误中吸取教训会花费太多时间,继续深入学习会令人沮丧和沮丧。在GPU的帮助下,我很快学会了如何在一系列Kaggle比赛中应用深度学习,并在PartlySunnywithaChanceofHashtagsKaggle比赛中获得第二名,其中给定推文预测天气得分。为了比赛,我使用了一个相当大的两层深度神经网络(有两个整流线性单元和用于正则化的dropout),并且几乎无法将这个深度网络放入我的6GGPU内存中。是否应该使用多个GPU?我对借助GPU进行深度学习可以完成的许多事情感到兴奋。我深入研究了多GPU世界,用InfiniBand40Gbit/s互连组装了小型GPU集群。我疯狂地想知道多个GPU是否会提供更好的结果。我很快发现,不仅难以在多个GPU上并行化神经网络。而对于普通的稠密神经网络,加速效果也很一般。小型神经网络可以有效地并行化和利用数据并行性,但对于较大的神经网络,例如我在PartlySunnywithaChanceofHashtagsKaggle竞赛中使用的那个,几乎没有加速。然后,我进一步试验并开发了一种具有模型并行性的新型8位压缩技术,与32位方法相比,该技术可以更有效地并行化密集或完全连接的神经网络层。但是,我还发现并行化可能会让人抓狂。我天真地针对一系列问题优化了并行算法,事实证明,考虑到您付出的努力,即使使用优化的自定义代码,多个GPU上的并行注意力也不能很好地工作。你需要非常注意你的硬件以及它如何与你的深度学习算法交互,这样你就可以衡量你是否可以从一开始就从并行化中获益。我的主机设置:您可以看到3个GXTTitans和一个InfiniBand卡。这是深度学习的良好设置吗?从那时起,对GPU的并行支持变得越来越普遍,但远未完全可用和高效。目前,唯一在GPU和计算机中实现高效算法的深度学习库是CNTK,它使用微软的特殊并行化算法,具有1位量化(高效)和块动量(非常高效)。使用CNTK和96个GPU集群,您可以获得大约90x-95x的新线性加速。Pytorch可能是支持跨机器高效并行化的库,然而,该库目前还不存在。如果你想在一台机器上做并行,那么CNTK、Torch和Pytorch是你的主要选择,这些库有很好的加速(3.6x-3.8x),并且包含4到8个GPU。并行化算法是在机器中预定义的。还有其他支持并行化的库,但它们要么速度慢(如2x-3xTensorFlow),要么难以与多个GPU(Theano)一起使用,或两者兼而有之。如果你重视并行性,我建议你使用Pytorch或CNTK。在没有并行的情况下使用多个GPU的另一个好处是,您可以在每个GPU上分别运行多个算法或实验,甚至无需对算法进行并行处理。速度并不快,但您绝对可以使用不同的算法或参数来获取有关性能的更多信息。如果您的主要目标是尽快获得深度学习经验,这将非常有用,对于想要同时尝试不同版本的新算法的研究人员也非常有用。如果你想学习深度学习,它在心理上也很重要。任务和反馈之间的时间越短,大脑就越能将相关的记忆片段整合成连贯的画面。如果你在小型数据集上的不同GPU上训练两个卷积神经网络,你将更快地了解什么对良好性能很重要;您将更容易地检测交叉验证错误中的模式并正确解释它们。您还会发现一些模式,这些模式表明需要添加、删除或调整哪些参数和层。所以一般来说,对于几乎所有的任务,一个GPU就足够了,但是要加速深度学习模型,多个GPU将变得越来越重要。如果您想快速学习深度学习,多个便宜的GPU也不错。我个人宁愿使用多个小型GPU而不是一个大型GPU,即使是出于研究实验的目的。那么,我应该选择哪种加速器呢?NvidiaGPU、AMDGUP或Intel的XeonPhi?Nvidia的标准库使得在CUDA中构建第一个深度学习库变得容易,但AMD的OpenCL库没有如此强大的标准。目前没有针对AMD显卡的深度学习库——因此,唯一的选择是Nvidia。即使将来有一些OpenCL库可用,我也会坚持使用Nvidia:因为GPU计算或GPGPU社区对于CUDA来说很大,而对于OpenCL来说相对较小。因此,在CUDA社区中,有很好的开源解决方案和可靠的编程建议。此外,尽管深度学习仍处于起步阶段,但Nvidia现在将全部赌注押在了深度学习上。赌赢了。尽管其他公司已经在深度学习上投入了资金和精力,但由于起步较晚,仍然??落后。现在,除了NVIDIA-CUDA之外的任何用于深度学习的硬软件选项都会让您感到沮丧。至于英特尔的XeonPhi,广告说您可以使用标准C代码并轻松将该代码转换为加速的XeonPhi代码。听起来很有趣,因为您可能认为您可以依赖大量的C代码源。但实际上它只支持极小部分的C代码,所以这个功能其实用处不大,大部分C都会运行得很慢。我曾在500多个XeonPhi集群上工作过,充满了无尽的挫败感。我无法运行我的单元测试,因为XeonPhi的MKL(数学核心库)与NumPy不兼容;我必须重写大部分代码,因为英特尔至强融核编译器无法使模板做出正确的约定。简单的。例如switch语句,我不得不更改我的C接口,因为英特尔至强融核编译器不支持C++11的某些功能。所有这些都迫使您在没有单元测试的情况下执行代码重构,这令人沮丧。这花了很长时间。那是地狱。然后,在执行我的代码时,一切都运行得很慢。线程调度程序中是否存在错误(?)或只是问题?如果运算所依据的向量大小不断变化,会出现什么问题影响性能?例如,如果你有不同大小的全连接层或dropout层,XeonPhi将比CPU慢。我在矩阵-矩阵乘法的独立实例中复制了这种行为,并将其发送给英特尔,但从未收到回复。所以,如果你想做深度学习,离至强融核远点!给定预算下最快的GPU您的第一个问题可能是:用于深度学习的快速GPU性能最重要的特征是什么?是cuda内核、时钟速度还是RAM大小?以上都不是。最重要的特性是内存带宽。简而言之,GPU通过牺牲内存访问时间(延迟)来优化内存带宽;CPU的设计恰恰相反。如果只使用少量内存,例如几个数字的乘法(3*6*9),CPU可以进行快速计算,但是,对于内存密集型操作,如矩阵乘法(A*B*C),CPU运行很慢。由于其内存带宽,GPU擅长处理内存密集型问题。当然,GPU和CPU之间还有其他更复杂的差异。如果您想购买快速GPU,最重要的是看它的带宽。随着时间的推移,根据内存带宽评估GPU,比较CPU和GPU带宽。为什么GPU的计算速度比CPU快?主要原因之一是带宽。带宽可以直接在架构内进行比较,例如,比较Pascal显卡GTX1080和GTX1070的性能;或者只看他们的内存带宽。例如,GTX1080(320GB/s)比GTX1070(256GB/s)快大约25%。然而,在多种架构之间,例如Pascal到Maxwell就像GTX1080到GTXTitanX,不能进行直接比较,因为不同的架构对给定的内存使用不同的带宽。这一切看起来有点不靠谱,但只要看一下总带宽就可以很好地了解GPU的大致速度。要为给定的预算选择最快的GPU,您可以使用此维基百科页面(Nvidia图形处理单元列表)查看以GB/s为单位的带宽;对于较新的显卡(900和1000系列)至话虽这么说,列出的价格相当准确,但是,较旧的显卡可能比列出的价格便宜很多,尤其是如果您在eBay上购买它们。例如,普通的GTXTitanX在eBay上的售价约为550美元。然而,另一个需要考虑的重要因素是并非所有架构都与cuDNN兼容。由于几乎所有深度学习库都使用cuDNN进行卷积运算,这限制了对KeplerGPU或更好的GPU的选择,即GTX600系列或更高版本。主要的一个是开普勒GPU通常很慢。所以这意味着您应该选择900或1000系列GPU以获得良好的性能。为了了解显卡性能在深度学习任务中的比较情况,我创建了一个简单的GPU等效表。如何阅读?例如,GTX980与0.35TitanXPascal一样快,或者TitanXPascal几乎是GTX980的三倍。请注意,我没有所有这些显卡,也没有运行深度学习基准测试在他们身上。这些比较源于显卡规格和计算基准的比较(一些加密货币挖掘任务需要与深度学习相当的计算能力)。所以只是粗略的比较。实际数字会有些许出入,但一般来说,误差会很小,显卡的排序就可以了。另请注意,没有充分利用GPU的小型网络会使更大的GPU看起来不那么酷。例如,一个小型LSTM(128个隐藏单元;批量大小>64)在GTX1080Ti上的运行速度不会明显快于GTX1070。要实现表中的性能差异,您需要运行更大的网络,例如具有1024个隐藏单元(批量大小大于64)的LSTM。在为您选择合适的GPU时,请务必牢记这一点。大型深度学习网络的GPU性能粗略比较。总的来说,我会推荐GTX1080Ti或GTX1070。它们都是出色的显卡,如果你买得起GTX1080Ti,那就买吧。GTX1070更便宜,但仍然比普通的GTXTitanX(Maxwell)更快。考虑到增加的11G和8GRAM(而不是6G),两者都是比GTX980Ti更好的选择。8G内存看似很小,但对于很多任务来说,已经绰绰有余了。比如Kaggle比赛,很多图像数据集,deepstyle,自然语言理解任务,你的麻烦会少很多。如果您是第一次尝试深度学习或有时想将其用于Kaggle竞赛,则GTX1060是最好的入门级GPU。我不推荐具有3GRAM的GTX1060变体,因为其他6GRAM变体非常有限。然而,对于许多应用程序来说,6GRAM就足够了。GTX1060比普通版的TitanX慢,但在性能和价格(eBay上)方面与GTX980相当。说到性价比,10系列的设计真的很不错。在GTX1060、GTX1070和GTX1080Ti上表现出色。GTX1060适合初学者,GTX1070是某些行业和研究部门以及初创公司的不错选择,而GTX1080Ti则是高端选择。一般来说,我不会推荐NvidiaTitanX(Pascal),它的性能价格过高。继续使用GTX1080Ti。尽管如此,NvidiaTitanX(Pascal)在通常使用大型数据集或视频集的计算机视觉研究人员中占有一席之地。在这些方面,每1G显存都没有被浪费,而NvidiaTitanX比GTX1080Ti多1G的显存也会带来更多的处理优势。然而,为了物有所值,我推荐eBay的GTXTitanX(Maxwell)-有点慢,但有12G内存。但是,绝大多数研究人员都可以使用GTX1080Ti。对于绝大多数的研究和应用来说,额外的1G内存其实是没有必要的。就个人而言,我会使用多个GTX1070进行研究。我宁愿多运行几个测试,即使速度比只运行一个测试慢(后者会更快)。在自然语言处理任务中,记忆限制不像在计算机视觉研究中那么明显。因此,GTX1070就足够了。我的研究任务和我运行实验的方式决定了GTX1070是我的最佳选择。当你选择自己的GPU时,你也应该这样做并选择它。考虑您的任务以及您希望如何运行实验,然后找到满足所有这些需求的GPU。现在,对于那些预算紧张并希望购买GPU的人来说,选择就更少了。如今AWSGPU实例既昂贵又缓慢,如果您的预算紧张,这不再是一个好的选择。我不推荐GTX970,因为它速度慢且价格昂贵,即使您可以在eBay上买到二手的(150美元),而且它存在存储和图形启动问题。相反,花更多的钱买GTX1060,它会更快,有更多的存储空间,而且还没有问题。如果您买不起GTX1060,我推荐配备4GBRAM的GTX1050Ti。4GB将是有限的,但你可以玩深度学习,如果你调整模型,你可以获得良好的性能。GTX1050适用于绝大多数kaggle比赛,尽管它可能会限制您在某些比赛中的竞争力。AmazonWebServices(AWS)中的GPU实例在这篇博文的前一版本中,我推荐了现成的AWSGPU实例,但我不再推荐它。AWS上的GPU目前速度相当慢(GTX1080的速度是AWSGPU的4倍),而且它们的价格在过去几个月里大幅上涨。现在看来,购买自己的GPU又变得更明智了。总结使用本文中的所有信息,您应该能够通过平衡内存大小需求、带宽速度GB/s和GPU价格来找到合适的GPU,并且这些推理在未来许多年内都是可靠的。不过目前我推荐的是GTX1080Ti或者GTX1070,只要价格可以接受;如果您刚刚开始深度学习或预算紧张,那么GTX1060可能适合您。如果现金不足,请选择GTX1050Ti;如果您是计算机视觉研究人员,也许可以购买TitanXPascal(或者只使用您现有的GTXTitanXs)。总结推荐一般最佳GPU:TitanXPascal和GTX1080Ti性价比高但价格昂贵:GTX1080Ti、GTX1070性价比高且便宜:GTX1060适用于大于250G的数据集:常规GTXTitanX或TitanXPascal我不有很多钱:GTX1060我几乎没有钱:GTX1050Ti我参加Kaggle比赛:GTX1060用于任何常规比赛,GTX1080Ti如果是深度学习比赛竞争性计算机视觉研究人员:TitanXPascal或常规GTXTitanX我是研究员:GTX1080Ti。在某些情况下,例如自然语言处理任务,GTX1070可能是一个不错的选择——看看您当前模型的存储要求。想搭建一个GPU集群:真的很复杂,你可以在这里得到一些想法:https://timdettmers.wordpress.com/2014/09/21/how-to-build-and-use-a-multi-gpu-system-for-deep-learning/我刚开始深度学习,我是认真的:从GTX1060开始。取决于你的下一步是什么(创业?Kaggle竞赛?研究或应用深度学习)出售你的GTX1060并购买更适合您目的的东西。原文地址:http://timdettmers.com/2017/03/19/which-gpu-for-deep-learning/almosthuman2014)》]点此阅读本作者更多好文
