因为神经网络这种大范围多任务的简单运算来说,正好符合GPU这种多核架构,比如你CPU20核心,同时处理20个任务。但是神经网络可能有20000个任务(比喻)。
但最近比较有代表性的GPU-Nvidia的新TITAN-X,CUDA核心就达到了3584个,速度就不言而喻了。但是CPU的核心性能比GPU的性能强大,就好比教授和高中老师的区别。
所以在神经网络训练当中,简单训练由CUDA完成,复杂训练和综合由CPU辅助完成汇总。
这样任务被分开同时进行,平时需要训练几十天的项目可能现在几个小时就可以完成,这就是为什么GPU架构更适合神经网络并且深度学习在近年大火的原因,就是因为GPU架构解决了当初没有解决的效率问题。
谷歌人工智能写作项目:神经网络伪原创
具体可以搜索一下:快包智能产品开发,外包服务平台本文是百度首席科学家吴恩达在GTCChina2016上的演讲实录整理好文案。
在今年的GTCChina上,吴恩达的议题分享是到底什么是神经网络,为什么GPU非常适合对神经网络的训练。大家好,现在人们说人工智能是新的电能。
电能改变了很多不同的行业,我觉得现在人工智能也会对很多行业带来一样大的改变。
现在人工智能的计算大部分都需要依赖GPU,我今天想跟大家分享这是为什么,也跟大家分享一下人工智能对你们的工作会有怎么样的影响。
我们在人工智能领域的人都是非常幸运的,因为很早的时候大家还不清楚深度学习是多么的重要,当时黄仁勋就在人工智能方面做了很多工作,生产出这种GPU的平台,使得百度和其他公司能够取得很多的成就。
两个星期之前,百度发布了很多技术为大家提供服务,其中很多都是使用机器学习和深度学习,尤其是基于GPU的学习来进行训练的。
到底什么是深度学习,我们往往会把它和大脑中的神经元做一个类比,我希望更深地介绍一下技术方面的问题,到底什么是神经网络,为什么我们觉得GPU非常适合对这些神经网络进行训练。
我们所做的深度学习的工作99%都可以类比成将不同的矩阵进行相乘或者矩阵和向量进行相乘。从第一天开始,GPU在矩阵相乘上就是非常高效的,所以整个领域都使用GPU平台来做他们的工作。
当下,基本上所有AI的经济价值都来自于一种叫做监督式学习的模式。什么叫做监督式学习?
输入什么就输出什么,如果说进行人脸识别,你想对人脸识别的系统进行训练,首先是一些数据组,比如一张脸和一个不是脸,我们对神经网络通过不同的矩阵相乘进行训练,这就是我们进行人脸识别的做法。
很多深度学习的经济价值在于找到非常聪明的办法来使用监督式学习。有比较多的例子,比如想识别垃圾邮件;如果你有足够的数据,在百度看到很多用户和广告的信息也可以训练一个模型来预测用户会不会点击一个广告。
所以就是要找到非常聪明的监督式学习模型,这也带来了很多的经济价值。有很多现在我们所做的基础研究都是关于监督式学习的,还有加强式学习和很多其他的学习,希望未来的几年在其他领域也会进行。
这种监督式学习的公式已经足以对很多你们现在的工作带来改变。我所讲的这些技术所有细节其实在20年前就有了,那为什么现在深度学习才开始真正发展起来呢?
有几个主要的趋势:第一是深度学习在这几年才刚刚发展起来的原因是规模化。
我喜欢做一个类比,建立人工智能就像是建立一个火箭一样,到底什么叫做火箭,你要造一个火箭首先需要一个大的引擎,然后需要很多的火箭燃料,这两个都是非常大。
如果引擎非常大,但是燃料非常少,这个火箭也飞不了多远。如果说引擎非常小,燃料非常多,有可能火箭根本就无法起飞。只有引擎非常大燃料非常多的时候才能建造一个非常好的火箭。
神经网络就像火箭的引擎,现在我们能够建立这样的神经网络,是因为现在规模化,是因为GPU的发展。而前面提到的火箭燃料就是今天大量的互联网公司获得的数据。算法的创新也是非常重要的。
对我们来讲首先要建立一个非常好的网络,然后要有充足的数据,这是一个基础。
在过去的几年,我看到这样一些趋势,也就是规模化,大概在十年前我们都通过普通的CPU进行深度学习的训练,当时大概有100万的连接,进步是非常慢的。
2008年的时候我们写了第一篇在CUDA上进行神经网络训练的文章,当时是斯坦福大学的一个研究,有了10倍的转变。2001年我带领谷歌的一个团队,我们使用CPU计算进一步实现规模化,用很多的CPU。
但是很快我们就意识到使用很多CPU使用云计算其实并不能真正促进深度学习发展,当时在斯坦福以及后来在百度我们意识到使用HPC高性能计算。
最近使用超级计算机才能更加促进深度学习算法进步的一个方向,所以最先进的深度学习的系统已经开始使用高性能算法了。
我们要训练一个语音识别的模型需要20百万亿次,我们需要花100万美元的电进行一个模型的训练,我们的一个研究人员要进行一个模型的训练需要花100美元的数据,需要4兆字节的数据。
百度是全球第一个为深度学习建立GPU群的公司,我们不光进行训练,而是真正的进行运作,我们早期的投资是看好GPU能够帮助我们在这方面取得领先的能力,能够促进AI能力的发展。
接下来我想和大家分享一个例子,向大家介绍一下为什么深度学习对很多的百度AI应用进行了改变。以前语音识别系统分为很多的阶段,首先输入一个音频,要抓取音频的特征,获得音位,要有语言的模型,然后再转录。
在2011年的时候,在百度建立一个语音识别的系统,我们认为我们花了几十年的时间来做语音识别,我们还是把整个的工作全部都用神经网络给取代。
我们发现有了很大的神经网络,相当于一个火箭的引擎,使用端对端的学习方法可以帮助我们对最好的语音识别系统进行训练。
上个月我们跟斯坦福大学和华盛顿大学合作发现如果你想用手机来输入某个信息,用语音识别比用键盘可以快3倍,这些结果都是依赖我们的DSP系统。
之前我们讲到规模的重要性,包括计算的规模和数据的规模,对于这些深度学习系统来进行训练,这里我想给大家介绍一个简单的方法,如果能够提升机器学习系统的表现,这当然有点过于简单了,但是我的团队问我怎么提升他们的机器学习系统的时候,我首先会把这个简单的方法告诉他们。
首先要问他们,目前在训练数据上表现好吗?如果不是的话,那我就会跟他们说你的这个神经网络需要有更大的规模,也就是说火箭的引擎要更强、更大。
然后你继续在这个方面进行改进,直到你在训练数据上能够有好的表现,在这之后就问你测试数据上表现好吗,如果不是的话我就跟他们说数据要更多,也就是说要有更多的火箭燃料。
再继续在这个方面进行改进,直到在测数据上表现得好。
这是一个非常简单的公式,真实世界会更加复杂,这过于简单,但这样一个简单的方法有很大的帮助,帮助我们提升了系统的性能,我也相信能够帮助大家的机器学习系统的性能提升。
过去几年很多性能提升都在于计算以及数据规模的提升,之所以计算的规模提升很多在于GPU计算的出现,实际比这复杂得多,如果大家想要了解具体的细节,如何提升机器学习的表现,大家可以去参照我所写的一本书,从这个网站可以拿到免费的书。
前面我讲到用GPU进行训练,我也看到这个对于百度的工作以及很多其他公司的工作有很大的帮助。另外一个趋势,用GPU不仅进行训练,也包括提供在线服务。
HPC训练的巨大的神经网络,我们发现我们有个问题,怎么样可以把这么大的神经网络放在服务器上面提供在线服务?
如果看一下传统的提供在线服务的架构,传统的CPU服务器的架构,架构是这样的,比如这是CPU服务器,有几个线程,如果有一个用户有一些数据过来,他给了一个4乘1的向量,比如是一些语音数据,你把这个交给一个线程进行计算然后会有输出。
第二个用户过来了,还是用第二个线程帮他进行计算,第三第四也是一样。这是比较传统的CPU架构提供在线的服务。
因为我们在超级计算及用很多GPU,训练非常大的神经网络,我们发现这些非常大的模型部署在传统的CPU当中是非常困难的,因为这个架构不适合。
百度是第一家宣布把GPU投入到业务中的大型公司,也就是进行推理和提供服务,而不仅仅限于训练。
我们有一个专门的技术叫BatchDispatch,我们把数据放到我们的数据中心当中,如果用户出现了,当他这端有一些数据的输入,我们会暂时让这个数据稍微等一点点时间,然后再等几位用户出现,各自都有自己的数据,把他们做成一个批次。
我们把这些向量堆叠到一起变成一个矩阵,这是第一第二第三第四,变成了一个4乘4的矩阵。
同时交给GPU处理器进行处理,它是同时对这四个用户的数据进行处理,这些结果也同时会出来,GPU有非常强的并行处理能力,可以非常高效的进行并行处理,我们把结果拿到之后再把它们分开,分别提供给四个用户。
我们发现这样使得我们可以有更大的模型规模,而且可以以更低的成本给更多的用户提供服务。
昨天我们在百度的数据中心和数据中心的负责人,在百度我们看到的一个趋势,现在越来越多的使用GPU及高性能计算在数据中心当中,因此我们的团队在重新设计数据中心来更好地利用高密度的计算模式,我们有团队在重新设计供电、散热,使得我们可以把更高密度的计算站纳入到我们的数据中心当中进行训练,然后进行推理。
大家有些人可能是做数据中心工作的,这里边有很多的工作是可以开展对于数据中心的架构来进行重新的设计,从而使用这些高密度的GPU。之前我讲到了深度学习,首先第一个就是计算的规模和数据的规模。
第二个我所看到的过去几年的趋势,深度学习现在可以给出更复杂的输出。
我的意思是五年之前大部分的机器学习所输出的都只是整数,比如垃圾邮件分类,你输入一个邮件,输入的是0或1是不是垃圾,图片也是一样的,输出的是一个整数,现在发生了变化,深度学习越来越多的可以去输出非常复杂的结果,比如一个句子或者是一个图像。
我们的DSPBatch系统输入音频片段,可以输出一个英文或者是中文的句子,图片说明我们可以把图片输进去,输出是一个图片说明来描述这个图片说这是一辆黄色的车在路上开。
所以现在神经网络可以输出复杂的东西,比如句子和一些图片说明,不仅仅是一些整数。
包括翻译,你可以输入英文的句子,然后输出中文的句子,也可以文法的校正,可能你输入的是语法错误的文本,输出的是语法正确的句子。
这个重要的趋势也是可以非常聪明的使用,可以在AI和深度学习方面得到更大的价值挖掘。
当然我们也知道,AI现在主要的局限性在于这样的学习方式,也就是监督式学习的方式是需要很多的标记数据,未来我希望我们能够对于非监督学习有一些突破,但是目前我们可以通过监督学习去转化很多的行业来实现巨大的发展。
刚才我们讲到了规模非常重要,我们需要用大量的数据进行大量的模型的训练。规模非常重要,我们需要用很多的数据对大的模型进行训练。还有另外一个原因,为什么AI的发展需要计算呢?
我们看一下刚才的神经网络这个简单的例子。
我们要花很多的时间、很多的实验去发现这些神经网络的结构,我可能在这个方面的工作已经有25年的时间了,现在我开始要开始一个新问题的时候我也不知道什么样的网络是合适的,研究者需要进行很多实验,十几种几百种模型才能发现一个好的模型去完成这种任务。
有这么多的训练数据,语音识别系统有5万小时的数据,所以你要进行这样一个训练可能需要3个月的时间,这样研究者的时间利用率不是那么高。
另外一个原因,百度花很多的努力去优化开发者的效率,因为你们在做这个模型,你不知道到底什么样的模型,你要做很多的实验去发现到底什么是可行的。
我们发现我们投资于计算系统来加速这种实验的过程、试错的过程,可以使得研究者更加的高效,可以使得他们有更多的时间可以更快的去发明新的想法。
因此在这个方面,我们非常强调,第一我们是投资计算平台,基于GPU的HPC计算平台。
第二我们是很大的投资于开发易于使用的深度学习工具,我们把我们自己的深度学习平台开源化,它叫PaddlePaddle,易于使用,大家可以非常方便的尝试深度学习的模型,来发现到底什么样的模型对你的应用是最为合适的。
PaddlePaddle支持用多GPU,我们现在不是在一个GPU上进行计算,一次可以用32个、64个、128个GPU进行实验。
我对AI的未来寄予很高的希望,对人工智能的未来充满信心,希望几年后我们可以使用人工智能做到陪伴机器人,做到个性化私教、音乐作曲、机器人医生,这些产品和技术可以为很多行业带来巨大的改变,也对人类带来巨大的价值。
这些项目很多都正在研究阶段,在人工智能时代如果你听我们讲未来,未来有时候很快就到了。我想给大家看一个例子,我们正在做一个百度医疗大脑的项目,这个项目正在研究阶段,请大家看看这段视频。
如果你输入一个问题,宝宝发烧了出了很多红疹,百度医疗大脑这个软件会理解你的问题,问你很多病情的问题,如果你慢慢回答它的问题,它就可以识别出你的病情是怎么样的,也可以输出一些有关你病情的信息和建议。
这个软件当然不可以替代医生,假如患者想用这些信息先要跟医生讨论,技术还在研究阶段,希望这种技术未来可以为患者和医生带来很多非常有用的信息。
我觉得我们非常幸运能够有这么好的GPU平台,在这个平台上开发很多的AI应用,在百度我非常振奋的是开发出AI的工具,不光是帮助我们自己也帮助很多的行业,我在百度希望能够在我们的硬件的基础之上开发一些AI的工具帮助大家。
谢谢大家!
许多现代神经网络的实现基于GPU,GPU最初是为图形应用而开发的专用硬件组件。所以神经网络收益于游戏产业的发展。
中央处理器(centralprocessingunit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
CPU自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。CPU出现于大规模集成电路时代,处理器架构设计的迭代更新以及集成电路工艺的不断提升促使其不断发展完善。
从最初专用于数学计算到广泛应用于通用计算。从4位到8位、16位、32位处理器,最后到64位处理器,从各厂商互不兼容到不同指令集架构规范的出现,CPU自诞生以来一直在飞速发展。
冯诺依曼体系结构是现代计算机的基础。在该体系结构下,程序和数据统一存储,指令和数据需要从同一存储空间存取,经由同一总线传输,无法重叠执行。
根据冯诺依曼体系,CPU的工作分为以下5个阶段:取指令阶段、指令译码阶段、执行指令阶段、访存取数和结果写回。
通过调大workers以及batchsize的大小可以很好地提高GPU的占用率。
但是CPU的占用率依然是拉满,这是因为在训练神经网络的过程中在CPU主要负责对数据进行预处理以及记录训练日志,GPU主要负责进行前向传播与反向传播,CPU没有执行完步骤GPU无法开始执行任务,因此CPU总是占用率拉满而GPU无法获得很好的利用,可以通过将记录训练日志的代码注释达到释放CPU占用率从而提升训练速度的效果。
GPU最大的价值一直是“accelerating”(加速),GPU不是取代CPU,而是利用GPU的并行计算架构,来将并行计算的负载放到GPU上来处理从而极大的提升处理速度。
GPU本质上在异构计算架构上属于协处理器,常见的协处理器除了GPU,还有TPU、FPGA、ASIC等。神经网络图像分割,有很多适合GPU来做并行处理的算法。
而GPU相较于其它加速协处理芯片,有更好的可编程性。NVIDIA在GPU加速计算领域发展多年,已经形成了非常好的软件生态。
目前在深度学习的训练端,GPU的应用和部署已经极为普遍,说是标准配置也不为过。在推理端,NVIDIA也有布局T4GPU卡。深度神经网络用GPU相较纯CPU,能够提速几百倍,所以还是推荐GPU。
关于负载如何搭配硬件配置,选用什么型号的GPU卡还是可以咨询下英伟达官方授权的代理商-思腾合力,我想在这方面思腾合力会帮助到你的。
。
可以用gpu加速训练,可以通过增加'useGPU'字段:train(net,P,T,'useGPU','yes');或先将数据集P,T通过函数Pgpu=gpuArray(P);Tgpu=gpuArray(T);转移到gpu内存中,再调用训练函数train(net,Pgpu,Tgpu)但是需要注意以下几点:1,由于要在gpu上训练,网络的权重调整也会在gpu内进行,所以会占用gpu的内存,内存占用率与数据集的大小相关,可以通过下面的代码了解内存占用:gpudev=gpuDevice;%事先声明gpudev变量为gpu设备类%其他代码gpudev.AvailableMemory%实时获得当前gpu的可用内存可以通过尝试不同的数据集大小选择一个合适的数据集大小2,大部分gpu处理double类型的数据能力并不强,所以如果想要取得较好的训练效果,需要使用single数据类型的数据集,例:P=single(P);%将double型的P转为single型T=single(T);%将double型的T转为single型train(net,P,T,'useGPU','yes');但是matlab的神经网络工具箱的一个函数可能有bug,在gpu上运行double变量的数据集时没有问题,但运行single变量时可能会弹出如下错误:ErrorusinggpuArray/arrayfunVariablexxchangedtype.修复该问题需要在源文件上作一些修改,具体内容这里没法三言两语说清楚,如果遇到该问题可以留言经过本人测试,single型的数据集在gpu上可以取得数十倍的加速,具体加速情况与具体gpu型号有关。
研究深度学习和神经网络大多都离不开GPU,在GPU的加持下,我们可以更快的获得模型训练的结果。
深度学习和神经网络的每个计算任务都是独立于其他计算的,任何计算都不依赖于任何其他计算的结果,可以采用高度并行的的方式进行计算。
而GPU相比于CPU拥有更多独立的大吞吐计算通道,较少的控制单元使其不会受到计算以外的更多任务的干扰,所以深度学习和神经网络模型在GPU的加持下会高效地完成计算任务。
我们公司的GPU用的就是思腾合力家的,思腾合力深思系列产品就很适用于人工智能和深度学习训练等多领域GPU服务器,产品还挺好用。