您现在的位置:首页 >> ★免费资源 >> 源码下载 >> 内容

【MATLAB代做|FPGA代做】基于FPGA的AI云端加速设计与思考

时间:2018-8-16 19:39:43 点击:

  核心提示:非常高兴今天能参加这个大会,首先整个AI时代的到来,过去从互联网时代、PC时代走到了移动互联网时代,现在已经进入了AI时代了,AI时代里面,经常会提到AI应用的三个要素:算法、大数据、计算;对于整个A...

非常高兴今天能参加这个大会,首先整个AI时代的到来,过去从互联网时代、PC时代走到了移动互联网时代,现在已经进入了AI时代了,AI时代里面,经常会提到AI应用的三个要素:算法、大数据、计算;对于整个AI生态领域的人来说,现在包含国内AI初创公司一些传统的互联网厂商在进军AI领域的时候基本上都是从这三个角度切入的,包含一些更好的算法,像卷积神经网络、深度学习这些算法逐渐成熟也使得这些算法开始具备商业化的能力,从数据层面传统厂商像加盟厂商、BAT这样的公司手里掌握了大量的视频,从这些数据里面挖掘出更有价值的东西带来服务是AI最吸引人的地方。

第三部分是关于计算部分,计算部分更多是工具链层面和硬件设备方面的,很多专家提到关于CPU+GPU、CPU加FPGA等等的发展方式,专注于计算平台这个事情上面,相对来说都会专注在如何通过高效的计算系统加速AI相关的应用。

其实从AI商业化诞生以来很多产业都需要AI运算进行改进,包含在安全摄象头领域、国防、能源、医疗卫生、自动驾驶、自动化、工业4.0里面,还有在线教育、ARVR的应用,在这些方面AI表现出非常强劲的生命力,很多人虽然有些行业没有经历过,至少在智能主机领域,智能冰箱、智能音响等等已经开始走进我们的生活了。

那开发出这样的应用,现在面临的困境是什么?是在整个硬件领域一个著名的摩尔定律,每隔18-24个月,硬件技术翻一番,技术提升一倍。这个已经不那样有效了,因特尔从两步走变成了一步走,性能提升速率已经发生了变化,科学方法来说称之为摩尔定律的减速,它并没有失效但是发展会变缓,现在随着移动互联网以及更多行业应用,其实关于数据累计的速度在不断的增加,这样就会造成很大的缺口,如果今天有很多数据,要在非常短的时间内把数据处理完应该选择什么样的硬件处理这个事情。观察到整体在计算平台发展有个非常明显的趋势,整个运算从CPU、GPU代表的普通计算慢慢发展成需要用特定的行业应用开发一套专用的硬件,即从通用运算到特殊运算的发展历程。在这里面很多公司将他们的硬件平台从CPU、GPU迁移到FPGA和定制化的芯片上。通过这些趋势,专用硬件能够为用户带来更好的体验,从能效比角度来说有更好的能量效率,为更加廉价的能力打造一些高性能的运算平台,这是整个硬件发展的趋势。这件事情十年前大家还在用因特尔的服务器跑各种各样的服务的时候,像microsoft就用FPGA跑他们的服务了,同时谷歌定制了一种TPU来实现他们的能力。定制硬件无论是国内还是国外都是大的潮流,这是硬件需求趋势。

AI领域在云端主要使用方式仍然是深度学习相关的算法,这些算法里面每一层算法带来的问题都非常非常的复杂,主要表现就是非常高的算力需求。卷积神经网络对于特征提取、目标检测、图像区域分割算法上会带来非常好的成绩。卷积神经网络在很多实际应用中比如对包含图像对于用户上传图像里面每一帧的检测,鉴黄或者暴力行为的检测、对于领导人的检测,这些东西都有非常强大的应用需求。在很多图象合成领域卷积神经网络也会发生很多特定的用途。

循环神经网络其实是一个线性的神经网络系统,它更适合处理一些语音相关的内容,比较擅长类似于云的包括金融数据、语音、传感器的数据,用循环神经网络处理会得到非常大的加速,在语音到文本的转换、自动语言翻译里面,循环神经网络在云端有非常多的应用需求。

很多人很难想象为什么我们需要应用这些人工智能算法,为什么需要打造硬件这样的事情呢?我们可以给大家展示一个很基本的数据,首先我们可以看一下,现在这些网络是在图像目标检测领域非常流行的网络,以resNet50为例,它如果对一张224×224的图片进行分析的话需要3.9G次乘加运算,如果乘和加分开就需要7.8G次的运算,在很小的图片上要完成7.9G次的运算的话,实际需要多大的运算量,每张图片需要的运算量1-10G次,如果video  decoding引擎,解码引擎会每个通道上每秒产生30-60张图,现在的服务器通常需要50-200路这样的视频,所以如果今天有一台服务器跟踪200个摄象头提供数据,它所需要的总的运算量是非常惊人的数字。因特尔最好的至强服务器有28个核心,如果不计算它的内存的防护性能,28个核心大概能提供多大的运算量?如果要用resNet-50的网络来衡量的话大概能出50张图,这就是为什么很多人说我们需要FPGA加速,就是因为传统的CPU并不太擅长处理这么大的并行运算数据量的事情,所以我们慢慢才会发现一个趋势我们需要为一个特定的应用打造一款专用的架构,把它的性能做的很好,吞吐量做的很高,这就是我们称之为加速的事情。所以从这个例子大家可以很深刻的感受到云端的AI运算是需要加速器的,单纯依靠CPU是无法做到非常好的性能和吞吐量的。

在我们加速这些算法的时候,如果要打造一个硬件平台支撑它,无论是用芯片还是FPGA的方法,会遇到很严重的问题。第一个问题是,这几年最好的神经检测的算法在不断的更新,如果要打造一款硬件支持它,今年要加速这个网络明年加速另一个网络,需要有非常好的可编程性。这个传统的服务器仍然以32位的计算单元,最新的研究表明一些单比特的神经网络错误率也在飞速的降低,极有可能在很短的时间内,也许在18年、19年,单比特神经网络的性能非常好了,可是世界上并没有支持单比特的GPU和CPU,所以需要思考的问题是,如果新的算法比如单比特算法在实际应用中有非常好的表现,要为单比特设计一个加速器吗?这时候FPGA是非常好的选择。其实在硬件设计上来说,在不同层面有不同的特质,有的层是计算密集,有的层是缓存密集型的,每一层在算的时候都要扩充特别的电路加速,这种复杂度迫使我们必须思考,在更快的推向市场的情况下需要选择什么样的平台加速这样的业务,所以FPGA在这里面应对不同层、不同算法的灵活性,应对不同比特速精度的灵活性上都表现出良好的前景。

这是我们对算法的需求,可是云服务商的需求是什么?云上面对于AI加速硬件的性能的需求,总结起来是两点:低成本和低功耗。谷歌发表了一份报告他们认为目前80%的数据中心的成本来自于硬件采购、供电和制冷,制冷就是芯片工作的时候发出的热需要用热却液降温,这样的成本对于数据中心的运营来说,对于低功耗和低成本的需求将是永无止境的。同时我们想用更低的功耗完成更多的运算任务需要的能量效率更高,考虑它是高能量效率的AI引擎,可能更加注重一美金买到多少运算能力的概念,对于很多云端服务来说,对于低延时的需求,高服务吞吐量的需求都迫使我们去思考如何构建一个非常好的AI的加速引擎。由于算法不停的变化、精度不停的提升,整体上各个层有不同的特性,需要对每一层加速的时候需要快速可更新的能力,这些特点都需要我们认真的根据自己的需要选择相应的加速。

如果我们今天设计一个AI的硬件去部署需要它很高的能效,低能效体现在什么地方呢?一个不良的架构设计会导致购买了很多计算引擎,但是这些计算引擎并没有充分应用起来,我们开玩笑说,一核有难,八核围观,这是不能接受的。第二我们云端思考购买加速硬件的时候要充分认识到对于电力的消耗是有很大差别的,如果在一个芯片上完成16比特的整数加法相对能量消耗是1的话,移动一个32比特的数据从内存搬到芯片内部将会花一万倍以上的能耗,所以最好的数据是内存搬到芯片就不让它离开了,所有的运转在芯片内部完成,这样运转效率就非常高了。正是这两个非常基础的需求导致了后面这些年来无论是国外还是国内对于整个AI加速硬件的研究上面做出了大家几乎一致的选择。需要设置特定的硬件架构加速特定的事情,基本的方法是提高计算的并行度。右图是几个月前的图,这张图描述的是做一个矩阵乘法如果使用python,它消耗的时间是1的话,那运用C语言对它进行改写的话会加速47倍,如果再懂一点C能够做一些拆成很多并行的循环去做,完成把整个矩阵分割成小块去做能加速366倍,最极致的方法是做编译器级的更新,使用因特尔AVX矢量的矩阵加速可以达到6万倍。这里面一个很有趣的事实是,因为因特尔AVX指令是运行在特定的计算引擎上面,某个特定的硬件结构对于某一类运算具有非常非常高的性能,但是功耗却同时很低。所以结论是,如果要加速一个特定应用,需要一个为这个零用专门定制的硬件来实现这个事情。

对于深鉴这样一家打造AI加速平台的创业公司而言,实践是从软硬件两方面都解决这样的问题,如果设计一个硬件平台需要思考的第一件事情就是我是不是一定要遵守某种规则,传统用CPU和GPU开发一个应用的时候要学习指令,指令上下就是两个世界,指令下面就是做编译器的事情,通用平台上可以这样做,因为硬件不知道上面跑的是什么,不知道是网页的应用还是游戏,只要对企业负责就好。可是如果今天设计一款硬件+软件提供某种应用服务,需要思考的问题是,这时候很多事情就知道了,硬件也知道上面在跑什么了,软件也知道下面硬件编的是什么样子了,这时候双方就能做出很多协同的事情,互相帮助对方做一些事情,所以我们认为,至少在每个应用域加速的时候,把软件和硬件协同起来考虑是一个提升能效比、提升性能的最佳策略,从深鉴的实践上来看我们主要使用了两个:1、关于神经网络压缩。2、关于高性能高能量效率的加速实现。神经网络压缩部分,现在主流的神经网络跑的时候,在GPU上运转的时候通常以FP32位为主要的运算基础,可是如果真正把整个神经网络所有的数据剖析开看的话会发现有可能80%的数据都是0,所以一个数乘以0直接给0就好了。在这种情况下,对于神经网络一个非常好的降低运算量的方法就是对它进行减值,把没有结果的部分去除掉,但是去除的同时不能失去网络的精度,该识别成人脸的还要识别出来,这样在减值完成以后要重新做小小的训练,使网络体积变小。第二在卷积神经网络的部分,真的要实现FP32位吗?大多数的网络证明,神经网络有非常好的容错性和鲁棒性的话,大部分压缩到8比特的运算精度仍然是可以保持住的,这样就带来非常好的事情,同样一份能量搬32比特数从内存搬到处理器,原来只能搬一个参数现在可以搬四个参数,相同时间相同能量能提高更高的带宽,整体上这两个方法是能够极大的把神经网络,对它进行一个比喻是压缩,把神经网络变的非常小。能小到什么地步呢?左图显示,对SSDAI算法做了很好的演示,没有压缩前是120gops,压缩后是61.5的gops。所以如果SSD网络经过减值平量化之后,响应时间缩短至原来的1/10,吞吐量变成原来的10倍。在这里面不仅仅是对于SSD,对于绝大部分的视频领域音频领域做了压缩实验,在SSD上取得了压缩7倍不损失的结果。

对于硬件部分,我们打造了一款适合在FPGA平台上运转高能效AI运算微架构,在性能和可编程之间做了非常好的平衡,同时由于整个设计是参数化的,所以对于内部存储的使用、计算单元的数量都可以根据不同的服务设定,也就是说是可大可小的。

整体来看对于整个AI开发的全栈平台来说,深鉴集中的是软件和硬件的部分,相关客户只需要在tensorflow或者keras下进行减值、量化的支持,运转在我们的平台上。如图这是对目前整个产品情况的分享,在硬件平台上开发了亚里士多德架构,主要是基于CNN相关的设计,对于服务器和云端推出了不同的解决方案,包含人脸识别、视频分析、语音识别的板卡,目前在亚马逊云、华为云上面都有相关的部署。

总结了一下,如果今天想要在FPGA上开发一款新的AI运算模型的话需要一个基本的理念,需要从计算和带宽两方面思考问题,希望通过并行预算架构设定更多的运算单元,希望增加运算的效率使所有引擎在所有时间里都很拼命的工作,而不是大部分的时间浪费掉。为什么选择FPGA加速云端AI推理算法?FPGA弹性架构对于任何算法、任何精度都有非常好的适应性。同时服务和FPGA上面都有非常庞大的on chip memory,整体上非常大的内存对于节省能量加快任务的速度有非常好的帮助,所以我们认为整个FPGA的一些优化的架构设计能够实现更低的功耗消耗,提供更好的每瓦的算法。谢谢!

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:基于FPGA的AI云端加速设计与思考 来源:基于FPGA的AI云端加速设计与思考
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做|python人工智能代做|FPGA项目合作|C代做|C++代做(www.hslogic.com) © 2021 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment