开启辅助访问 切换到窄版

打印 上一主题 下一主题

【AI芯片】人工智能芯片与传统芯片的区别

[复制链接]
作者:回归英灵 
版块:
程序员交流 招聘&找工作 发布时间:2018-9-23 09:55:59
11270
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转载自《产业智能官》微信公众号。


作为AI和芯片两大领域的交差点,AI芯片已经成了最热门的投资领域,各种AI芯片如雨后春笋冒出来,但是AI芯片领域生存环境恶劣,能活下来的企业将是凤毛麟角。谷歌在I/O大会发布了其第三代TPU,并宣称其性能比去年的TUP 2.0提升8倍之多,达到每秒1000万亿次浮点计算,同时谷歌展示了其一系列基于TPU的AI应用。可以说,AI已经成为科技行业除了区块链之外最热门的话题。AI芯片作为AI时代的基础设施,也成为目前行业最热门的领域。



可以看到,AI芯片已经成为资本追逐的最热门领域,资本对半导体芯片的热情被AI技术彻底点燃。在创业公司未真正打开市场的情况下,AI芯片初创企业已经诞生了不少的独角兽,多笔融资已经超过亿元。AI技术的革新,其从计算构架到应用,都和传统处理器与算法有巨大的差异,这给创业者和资本市场无限的遐想空间,这也是为什么资本和人才对其趋之若鹜的原因。但是,产业发展还是要遵循一定的产业规律,笔者认为,绝大多数AI芯片公司都将成为历史的炮灰,最后,在云端和终端只剩下为数极少的几个玩家。
首先我们来分析下目前对AI芯片的需求主要集中在哪些方面。
先来讲讲AI目前芯片大致的分类:从应用场景角度看,AI芯片主要有两个方向,一个是在数据中心部署的云端,一个是在消费者终端部署的终端。从功能角度看,AI芯片主要做两个事情,一是Training(训练),二是Inference(推理)。
目前AI芯片的大规模应用分别在云端和终端。云端的AI芯片同时做两个事情:Training和Inference。Training即用大量标记过的数据来“训练”相应的系统,使之可以适应特定的功能,比如给系统海量的“猫”的图片,并告诉系统这个就是“猫”,之后系统就“知道”什么是猫了;Inference即用训练好的系统来完成任务,接上面的例子,就是你将一张图给之前训练过的系统,让他得出这张图是不是猫这样的结论。
Training和Inference在目前大多数的AI系统中,是相对独立的过程,其对计算能力的要求也不尽相同。Training需要极高的计算性能,需要较高的精度,需要能处理海量的数据,需要有一定的通用性,以便完成各种各样的学习任务。
对于芯片厂家来说,谁有数据,谁赢!
那么哪些芯片厂家有大量的用户数据呢?BAT。按照这个逻辑、包括科大讯飞和华为未来也未必有足够的机会。谁有大量的数据,谁更有机会。Inference相对来说对性能的要求并不高,对精度要求也要更低,在特定的场景下,对通用性要求也低,能完成特定任务即可,但因为Inference的结果直接提供给终端用户,所以更关注用户体验的方面的优化。谷歌TensorFlow团队:深度学习的未来,在单片机的身上Pete Warden,是谷歌TensorFlow团队成员,也是TensorFLow Mobile的负责人。Pete 坚定地相信,未来的深度学习能够在微型的、低功耗的芯片上自由地奔跑。换句话说,单片机 (MCU) ,有一天会成为深度学习最肥沃的土壤。
为什么是单片机

单片机遍地都是
今年一年全球会有大约400亿枚单片机 (MCU) 售出。MCU里面有个小CPU,RAM只有几kb的那种,但医疗设备、汽车设备、工业设备,还有消费级电子产品里,都用得到。这样的计算机,需要的电量很小,价格也很便宜,大概不到50美分。之所以得不到重视,是因为一般情况下,MCU都是用来取代 (如洗衣机里、遥控器里的) 那些老式的机电系统——控制机器用的逻辑没有发生什么变化。
CPU和传感器不太耗电,传输耗钱、耗电!
CPU和传感器的功耗,基本可以降到微瓦级,比如高通的Glance视觉芯片。相比之下,显示器和无线电,就尤其耗电了。即便是WiFi和蓝牙也至少要几十毫瓦。
因为,数据传输需要的能量,似乎与传输距离成正比。CPU和传感器只传几毫米,如果每个数据都需要端管云这样传输,每个算法都需要输送到云端进行处理,自然代价就要贵得多。



传感器的数据很多,传输起来很费劲!
传感器能获取的数据,比人们能用到的数据,多得多。例如:卫星的图片数据很多,但是传到地球很困难。卫星或者宇宙飞船上的宇航员可以用高清相机来拍高清视频。但问题是,卫星的数据存储量很小,传输带宽也很有限,从地球上每小时只能下载到一点点数据。地球上的很多传感器也一样,本地获得很容易,但是传输到远端的数据中心就需要很多的代价。
跟深度学习有什么关系

如果传感器的数据可以在本地运算,又不需要很多的代价和电力。我们需要的是,能够在单片机上运转的,不需要很多电量的,依赖计算不依赖无线电,并且可以把那些本来要浪费掉的传感器数据利用起来的。这也是机器学习,特别是深度学习,需要跨越的鸿沟。相比之下,神经网络大部分的时间,都是用来把那些很大很大的矩阵乘到一起,翻来覆去用相同的数字,只是组合方式不同了。这样的运算,当然比从DRAM里读取大量的数值,要低碳得多。需要的数据没那么多的话,就可以用SRAM这样低功耗的设备来存储。如此说来,深度学习最适合MCU了,尤其是在8位元计算可以代替浮点运算的时候。
深度学习很低碳
那么AI的计算,每次运算需要多少皮焦耳?比如,MobileNetV2的图像分类网络,的最简单的结构,大约要用2,200万次运算。如果,每次运算要5皮焦,每秒钟一帧的话,这个网络的功率就是110微瓦,用纽扣电池也能坚持近一年。
对传感器也友好
最近几年,人们用神经网络来处理噪音信号,比如图像、音频、加速度计的数据等等。
如果可以在MCU上运行神经网络,那么更大量的传感器数据就可以得到处理,而不是浪费。那时,不管是语音交互,还是图像识别功能,都会变得更加轻便。Training将在很长一段时间里集中在云端,Inference的完成目前也主要集中在云端,但随着越来越多厂商的努力,很多的应用将逐渐转移到终端。然后我们来看看目前的市场情况。云端AI芯片市场已被巨头瓜分殆尽,创业公司生存空间几乎消失。云端AI芯片无论是从硬件还是软件,已经被传统巨头控制,给新公司预留的空间极小。不客气的说,大多数AI芯片公司、希望在云端AI做文章的初创公司几乎最后都得死。数据越多,对应用场景越理解的公司,对算法、硬件的需求越清楚、越理解深入。



我们可以看到,芯片巨头Nvidia(英伟达)已经牢牢占据AI芯片榜首,由于CUDA开发平台的普及,英伟达的GPU是目前应用最广的通用AI硬件计算平台。除了有实力自研芯片的企业(全世界也没几家),如果需要做AI相关的工作,必定需要用到Nvidia的芯片。Nvidia的芯片应用普遍,现在所有的AI软件库都支持使用CUDA加速,包括谷歌的Tensorflow,Facebook的Caffe,亚马逊的MXNet等。
除了一骑绝尘的英伟达,其他老牌的芯片巨头都没闲着,特别是Intel通过买、买、买奋力的将自己挤到了头部玩家的位置。微软在最新的Build大会上公布了基于英特尔FPGA的AI方案,而英特尔的FPGA业务正是通过收购Altera获得的。
除此之外,我们可以看到像Google这样的互联网厂商也乱入了前五。这当然要归功于上面提到的TPU,虽然谷歌不直接售卖芯片,但是谷歌通过云服务提供TPU的调用服务。谷歌很早就开源了Tensorflow软件平台,这使得Tensorflow成为最主流的机器学习软件平台,已经成了事实上行业的软件平台标准。而Tensorflow最佳的计算环境必定就是谷歌自己的云服务了,通过软件、硬件(或者说云)环境的打通,谷歌妥妥的成为AI芯片领域的一方霸主。



现在业界争论的焦点是AI芯片的处理器架构用哪种是最好的,有前面提及的有GPU、FPGA、DSP和ASIC,甚至还有更前沿的脑神经形态芯片。现在GPU可以认为是处于优势地位,但其他几种的处理器架构也各有优势。Intel则是多方下注,不错过任何一种处理器架构。谷歌在TPU(其实就是一种ASIC)方面的巨大投入带来了硬件效能的极大提高,目前看来对GPU的冲击将是最大的,原因不单单是因为专用架构带来的效率优势,还有商业模式方面带来的成本优势。在半导体行业内的普遍观点是,一旦AI的算法相对稳定,ASIC肯定是最主流的芯片形态。看看挖矿芯片的进化历程,这个观点非常有说服力。
在云端,互联网巨头已经成为了事实上的生态主导者,因为云计算本来就是巨头的战场,现在所有开源AI框架也都是这些巨头发布的。在这样一个生态已经固化的环境中,留给创业公司的空间实际已经消失。
本人曾经在一个希望运用FPGA实现AI算法的公司待过一算时间。离开的原因肯定不止一个,但是这几个的原因是根本:
1、他们想做的事情,类似华为这样的公司,早一年已经做完,而且大公司招聘几十个博士投入做算法优化。
2、互联网巨头,手上有数据,最后算法、芯片、硬件可能都自己干。阿里从其他公司招聘了大量的AI人才。
3、FPGA只会是中间态,最终成本上会被ASIC打败。
4、生态决定一切!GPU对于软件的人来说,用起来太舒服了,FPGA用起来不顺手。FPGA从业人口少。
终端市场群雄割据,机会尚存。
上面说到了Inference现在主要是在云端完成的,这主要是因为现在终端上基本没有合适的处理单元可以完成相应功能。所以我们发现很多AI功能都需要联网才可以使用,这大大限制了AI的使用场景。所以将Inference放到终端来,让一些功能可以本地完成,成了很多芯片厂商关注的领域。
华为的麒麟970便是最早将AI处理单元引入到终端产品的芯片,其中该芯片中的AI核心,是由AI芯片创业公司寒武纪提供的IP(知识产权)。该芯片的引入,可以帮助华为手机在终端完成一些特定的AI应用,比如高效的人脸检测,相片的色彩美化等。此后,苹果,三星都宣布了在其处理器中引入相应的AI处理单元,提升手机终端的AI应用能力。
在终端上,由于目前还没有一统天下的事实标准,芯片厂商可以说是八仙过海各显神通。
给手机处理器开发AI协处理器是目前看来比较靠谱的方式,寒武纪Cambricon-1A集成进入麒麟970就是一个很好的例子。由于华为手机的巨大销量,寒武纪迅速成为AI芯片独角兽。而另外一家创业公司深鉴科技此前获得了三星的投资,其AI芯片IP已经集成到三星最新的处理器Exynos 9810中。
然而能获得手机大厂青睐的AI芯片厂商毕竟是少数,更多的AI芯片厂商还需要找到更多的应用场景来使自己的芯片发光发热。
国芯发布全新芯片GX8010——搭载NPU的物联网人工智能芯片,它将为各种物联网产品赋能。国芯针对人工智能与物联网的特点,将算法、软件、硬件深度整合,采用了NPU、DSP等多项最新技术。
由于GX8010在市场和性能的卓越表现,硬十也希望与国芯能够更多合作,也与国芯多次磋商合作事宜,希望能够让更多的硬件爱好者更多的深入了解这款终端AI芯片。
相对于语音市场,安防更是一个AI芯片扎堆的大产业,如果可以将自己的芯片置入摄像头,是一个不错的场景,也是很好的生意。包括云天励飞、海康威视、旷视科技等厂商都在大力开发安防领域的AI嵌入式芯片,而且已经完成了一定的商业化部署。
相对于云端,终端留给AI芯片创业公司更广阔的市场。但是于此同时,由于应用环境千差万别,没有相应的行业标准,各个厂商各自为战,无法形成一个统一的规模化市场,对于投入巨大的芯片行业来说,有可能是好故事,但不一定是个好生意。
来源:中国AI先锋周刊




FPGA,你为什么这么牛?

电力鹰
最近几年,FPGA这个概念越来越多地出现。
例如,比特币挖矿,就有使用基于FPGA的矿机。还有,之前微软表示,将在数据中心里,使用FPGA“代替”CPU,等等。
其实,对于专业人士来说,FPGA并不陌生,它一直都被广泛使用。但是,大部分人还不是太了解它,对它有很多疑问——FPGA到底是什么?为什么要使用它?相比 CPU、GPU、ASIC(专用芯片),FPGA有什么特点?……
今天,带着这一系列的问题,我们一起来——揭秘FPGA。
一、为什么使用 FPGA?
众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和 Web 服务的规模却在指数级增长。
人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新编程来执行新类型的计算任务。
FPGA 正是一种硬件可重构的体系结构。它的英文全称是Field Programmable Gate Array,中文名是现场可编程门阵列。
FPGA常年来被用作专用芯片(ASIC)的小批量替代品,然而近年来在微软、百度等公司的数据中心大规模部署,以同时提供强大的计算能力和足够的灵活性。



不同体系结构性能和灵活性的比较
FPGA 为什么快?「都是同行衬托得好」。
CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存。FPGA 之所以比 CPU 甚至 GPU 能效高,本质上是无指令、无需共享内存的体系结构带来的福利。
冯氏结构中,由于执行单元(如 CPU 核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,因此 GPU 使用 SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU 也支持 SIMD 指令。
而 FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。
冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。
由于内存是共享的,就需要做访问仲裁;为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。
对于保存状态的需求,FPGA 中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,无需不必要的仲裁和缓存。
对于通信的需求,FPGA 每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,并不需要通过共享内存来通信。
说了这么多三千英尺高度的话,FPGA 实际的表现如何呢?我们分别来看计算密集型任务和通信密集型任务。
计算密集型任务的例子包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing 搜索的排序等。这类任务一般是 CPU 把任务卸载(offload)给 FPGA 去执行。对这类任务,目前我们正在用的 Altera(似乎应该叫 Intel 了,我还是习惯叫 Altera……)Stratix V FPGA 的整数乘法运算性能与 20 核的 CPU 基本相当,浮点乘法运算性能与 8 核的 CPU 基本相当,而比 GPU 低一个数量级。我们即将用上的下一代 FPGA,Stratix 10,将配备更多的乘法器和硬件浮点运算部件,从而理论上可达到与现在的顶级 GPU 计算卡旗鼓相当的计算能力。



FPGA 的整数乘法运算能力(估计值,不使用 DSP,根据逻辑资源占用量估计)



FPGA 的浮点乘法运算能力(估计值,float16 用软核,float 32 用硬核)
在数据中心,FPGA 相比 GPU 的核心优势在于延迟。
像 Bing 搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每一步的延迟。
如果使用 GPU 来加速,要想充分利用 GPU 的计算能力,batch size 就不能太小,延迟将高达毫秒量级。
使用 FPGA 来加速的话,只需要微秒级的 PCIe 延迟(我们现在的 FPGA 是作为一块 PCIe 加速卡)。
未来 Intel 推出通过 QPI 连接的 Xeon + FPGA 之后,CPU 和 FPGA 之间的延迟更可以降到 100 纳秒以下,跟访问主存没什么区别了。
FPGA 为什么比 GPU 的延迟低这么多?
这本质上是体系结构的区别。
FPGA 同时拥有流水线并行和数据并行,而 GPU 几乎只有数据并行(流水线深度受限)。
例如处理一个数据包有 10 个步骤,FPGA 可以搭建一个 10 级流水线,流水线的不同级在处理不同的数据包,每个数据包流经 10 级之后处理完成。每处理完成一个数据包,就能马上输出。
而 GPU 的数据并行方法是做 10 个计算单元,每个计算单元也在处理不同的数据包,然而所有的计算单元必须按照统一的步调,做相同的事情(SIMD,Single Instruction Multiple Data)。这就要求 10 个数据包必须一起输入、一起输出,输入输出的延迟增加了。
当任务是逐个而非成批到达的时候,流水线并行比数据并行可实现更低的延迟。因此对流式计算的任务,FPGA 比 GPU 天生有延迟方面的优势。



计算密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 16 位整数乘法为例,数字仅为数量级的估计
ASIC 专用芯片在吞吐量、延迟和功耗三方面都无可指摘,但微软并没有采用,出于两个原因:

  • 数据中心的计算任务是灵活多变的,而 ASIC 研发成本高、周期长。好不容易大规模部署了一批某种神经网络的加速卡,结果另一种神经网络更火了,钱就白费了。FPGA 只需要几百毫秒就可以更新逻辑功能。FPGA 的灵活性可以保护投资,事实上,微软现在的 FPGA 玩法与最初的设想大不相同。
  • 数据中心是租给不同的租户使用的,如果有的机器上有神经网络加速卡,有的机器上有 Bing 搜索加速卡,有的机器上有网络虚拟化加速卡,任务的调度和服务器的运维会很麻烦。使用 FPGA 可以保持数据中心的同构性。
接下来看通信密集型任务。
相比计算密集型任务,通信密集型任务对每个输入数据的处理不甚复杂,基本上简单算算就输出了,这时通信往往会成为瓶颈。对称加密、防火墙、网络虚拟化都是通信密集型的例子。



通信密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 64 字节网络数据包处理为例,数字仅为数量级的估计)
对通信密集型任务,FPGA 相比 CPU、GPU 的优势就更大了。
从吞吐量上讲,FPGA 上的收发器可以直接接上 40 Gbps 甚至 100 Gbps 的网线,以线速处理任意大小的数据包;而 CPU 需要从网卡把数据包收上来才能处理,很多网卡是不能线速处理 64 字节的小数据包的。尽管可以通过插多块网卡来达到高性能,但 CPU 和主板支持的 PCIe 插槽数量往往有限,而且网卡、交换机本身也价格不菲。
从延迟上讲,网卡把数据包收到 CPU,CPU 再发给网卡,即使使用 DPDK 这样高性能的数据包处理框架,延迟也有 4~5 微秒。更严重的问题是,通用 CPU 的延迟不够稳定。例如当负载较高时,转发延迟可能升到几十微秒甚至更高(如下图所示);现代操作系统中的时钟中断和任务调度也增加了延迟的不确定性。



ClickNP(FPGA)与 Dell S6000 交换机(商用交换机芯片)、Click+DPDK(CPU)和 Linux(CPU)的转发延迟比较,error bar 表示 5% 和 95%。来源:[5]
虽然GPU也可以高性能处理数据包,但GPU是没有网口的,意味着需要首先把数据包由网卡收上来,再让 GPU 去做处理。这样吞吐量受到 CPU 和/或网卡的限制。GPU 本身的延迟就更不必说了。
那么为什么不把这些网络功能做进网卡,或者使用可编程交换机呢?ASIC 的灵活性仍然是硬伤。
尽管目前有越来越强大的可编程交换机芯片,比如支持 P4 语言的 Tofino,ASIC 仍然不能做复杂的有状态处理,比如某种自定义的加密算法。
综上,在数据中心里 FPGA 的主要优势是稳定又极低的延迟,适用于流式的计算密集型任务和通信密集型任务。
二、微软部署 FPGA 的实践
2016 年 9 月,《连线》(Wired)杂志发表了一篇《微软把未来押注在 FPGA 上》的报道 [3],讲述了 Catapult 项目的前世今生。
紧接着,Catapult 项目的老大 Doug Burger 在 Ignite 2016 大会上与微软 CEO Satya Nadella 一起做了 FPGA 加速机器翻译的演示。
演示的总计算能力是 103 万 T ops,也就是 1.03 Exa-op,相当于 10 万块顶级 GPU 计算卡。一块 FPGA(加上板上内存和网络接口等)的功耗大约是 30 W,仅增加了整个服务器功耗的十分之一。



Ignite 2016 上的演示:每秒 1 Exa-op (10^18) 的机器翻译运算能力
微软部署 FPGA 并不是一帆风顺的。对于把 FPGA 部署在哪里这个问题,大致经历了三个阶段:

  • 专用的 FPGA 集群,里面插满了 FPGA
  • 每台机器一块 FPGA,采用专用网络连接
  • 每台机器一块 FPGA,放在网卡和交换机之间,共享服务器网络



微软 FPGA 部署方式的三个阶段,来源:[3]
第一个阶段是专用集群,里面插满了 FPGA 加速卡,就像是一个 FPGA 组成的超级计算机。
下图是最早的 BFB 实验板,一块 PCIe 卡上放了 6 块 FPGA,每台 1U 服务器上又插了 4 块 PCIe 卡。



最早的 BFB 实验板,上面放了 6 块 FPGA。来源:[1]
可以注意到该公司的名字。在半导体行业,只要批量足够大,芯片的价格都将趋向于沙子的价格。据传闻,正是由于该公司不肯给「沙子的价格」 ,才选择了另一家公司。
当然现在数据中心领域用两家公司 FPGA 的都有。只要规模足够大,对 FPGA 价格过高的担心将是不必要的。



最早的 BFB 实验板,1U 服务器上插了 4 块 FPGA 卡。来源:[1]
像超级计算机一样的部署方式,意味着有专门的一个机柜全是上图这种装了 24 块 FPGA 的服务器(下图左)。
这种方式有几个问题:

  • 不同机器的 FPGA 之间无法通信,FPGA 所能处理问题的规模受限于单台服务器上 FPGA 的数量;
  • 数据中心里的其他机器要把任务集中发到这个机柜,构成了 in-cast,网络延迟很难做到稳定。
  • FPGA 专用机柜构成了单点故障,只要它一坏,谁都别想加速了;
  • 装 FPGA 的服务器是定制的,冷却、运维都增加了麻烦。



部署 FPGA 的三种方式,从中心化到分布式。来源:[1]
一种不那么激进的方式是,在每个机柜一面部署一台装满 FPGA 的服务器(上图中)。这避免了上述问题 (2)(3),但 (1)(4) 仍然没有解决。
第二个阶段,为了保证数据中心中服务器的同构性(这也是不用 ASIC 的一个重要原因),在每台服务器上插一块 FPGA(上图右),FPGA 之间通过专用网络连接。这也是微软在 ISCA'14 上所发表论文采用的部署方式。



Open Compute Server 在机架中。来源:[1]



Open Compute Server 内景。红框是放 FPGA 的位置。来源:[1]



插入 FPGA 后的 Open Compute Server。来源:[1]



FPGA 与 Open Compute Server 之间的连接与固定。来源:[1]
FPGA 采用 Stratix V D5,有 172K 个 ALM,2014 个 M20K 片上内存,1590 个 DSP。板上有一个 8GB DDR3-1333 内存,一个 PCIe Gen3 x8 接口,两个 10 Gbps 网络接口。一个机柜之间的 FPGA 采用专用网络连接,一组 10G 网口 8 个一组连成环,另一组 10G 网口 6 个一组连成环,不使用交换机。



机柜中 FPGA 之间的网络连接方式。来源:[1]
这样一个 1632 台服务器、1632 块 FPGA 的集群,把 Bing 的搜索结果排序整体性能提高到了 2 倍(换言之,节省了一半的服务器)。
如下图所示,每 8 块 FPGA 穿成一条链,中间用前面提到的 10 Gbps 专用网线来通信。这 8 块 FPGA 各司其职,有的负责从文档中提取特征(黄色),有的负责计算特征表达式(绿色),有的负责计算文档的得分(红色)。



FPGA 加速 Bing 的搜索排序过程。来源:[1]



FPGA 不仅降低了 Bing 搜索的延迟,还显著提高了延迟的稳定性。来源:[4]



本地和远程的 FPGA 均可以降低搜索延迟,远程 FPGA 的通信延迟相比搜索延迟可忽略。来源:[4]
FPGA 在 Bing 的部署取得了成功,Catapult 项目继续在公司内扩张。
微软内部拥有最多服务器的,就是云计算 Azure 部门了。
Azure 部门急需解决的问题是网络和存储虚拟化带来的开销。Azure 把虚拟机卖给客户,需要给虚拟机的网络提供防火墙、负载均衡、隧道、NAT 等网络功能。由于云存储的物理存储跟计算节点是分离的,需要把数据从存储节点通过网络搬运过来,还要进行压缩和加密。
在 1 Gbps 网络和机械硬盘的时代,网络和存储虚拟化的 CPU 开销不值一提。随着网络和存储速度越来越快,网络上了 40 Gbps,一块 SSD 的吞吐量也能到 1 GB/s,CPU 渐渐变得力不从心了。
例如 Hyper-V 虚拟交换机只能处理 25 Gbps 左右的流量,不能达到 40 Gbps 线速,当数据包较小时性能更差;AES-256 加密和 SHA-1 签名,每个 CPU 核只能处理 100 MB/s,只是一块 SSD 吞吐量的十分之一。



网络隧道协议、防火墙处理 40 Gbps 需要的 CPU 核数。来源:[5]
为了加速网络功能和存储虚拟化,微软把 FPGA 部署在网卡和交换机之间。
如下图所示,每个 FPGA 有一个 4 GB DDR3-1333 DRAM,通过两个 PCIe Gen3 x8 接口连接到一个 CPU socket(物理上是 PCIe Gen3 x16 接口,因为 FPGA 没有 x16 的硬核,逻辑上当成两个 x8 的用)。物理网卡(NIC)就是普通的 40 Gbps 网卡,仅用于宿主机与网络之间的通信。



Azure 服务器部署 FPGA 的架构。来源:[6]
FPGA(SmartNIC)对每个虚拟机虚拟出一块网卡,虚拟机通过 SR-IOV 直接访问这块虚拟网卡。原本在虚拟交换机里面的数据平面功能被移到了 FPGA 里面,虚拟机收发网络数据包均不需要 CPU 参与,也不需要经过物理网卡(NIC)。这样不仅节约了可用于出售的 CPU 资源,还提高了虚拟机的网络性能(25 Gbps),把同数据中心虚拟机之间的网络延迟降低了 10 倍。



网络虚拟化的加速架构。来源:[6]
这就是微软部署 FPGA 的第三代架构,也是目前「每台服务器一块 FPGA」大规模部署所采用的架构。
FPGA 复用主机网络的初心是加速网络和存储,更深远的影响则是把 FPGA 之间的网络连接扩展到了整个数据中心的规模,做成真正 cloud-scale 的「超级计算机」。
第二代架构里面,FPGA 之间的网络连接局限于同一个机架以内,FPGA 之间专网互联的方式很难扩大规模,通过 CPU 来转发则开销太高。
第三代架构中,FPGA 之间通过 LTL (Lightweight Transport Layer) 通信。同一机架内延迟在 3 微秒以内;8 微秒以内可达 1000 块 FPGA;20 微秒可达同一数据中心的所有 FPGA。第二代架构尽管 8 台机器以内的延迟更低,但只能通过网络访问 48 块 FPGA。为了支持大范围的 FPGA 间通信,第三代架构中的 LTL 还支持 PFC 流控协议和 DCQCN 拥塞控制协议。



纵轴:LTL 的延迟,横轴:可达的 FPGA 数量。来源:[4]



FPGA 内的逻辑模块关系,其中每个 Role 是用户逻辑(如 DNN 加速、网络功能加速、加密),外面的部分负责各个 Role 之间的通信及 Role 与外设之间的通信。来源:[4]



FPGA 构成的数据中心加速平面,介于网络交换层(TOR、L1、L2)和传统服务器软件(CPU 上运行的软件)之间。来源:[4]
通过高带宽、低延迟的网络互联的 FPGA 构成了介于网络交换层和传统服务器软件之间的数据中心加速平面。
除了每台提供云服务的服务器都需要的网络和存储虚拟化加速,FPGA 上的剩余资源还可以用来加速 Bing 搜索、深度神经网络(DNN)等计算任务。
对很多类型的应用,随着分布式 FPGA 加速器的规模扩大,其性能提升是超线性的。
例如 CNN inference,当只用一块 FPGA 的时候,由于片上内存不足以放下整个模型,需要不断访问 DRAM 中的模型权重,性能瓶颈在 DRAM;如果 FPGA 的数量足够多,每块 FPGA 负责模型中的一层或者一层中的若干个特征,使得模型权重完全载入片上内存,就消除了 DRAM 的性能瓶颈,完全发挥出 FPGA 计算单元的性能。
当然,拆得过细也会导致通信开销的增加。把任务拆分到分布式 FPGA 集群的关键在于平衡计算和通信。



从神经网络模型到 HaaS 上的 FPGA。利用模型内的并行性,模型的不同层、不同特征映射到不同 FPGA。来源:[4]
在 MICRO'16 会议上,微软提出了 Hardware as a Service (HaaS) 的概念,即把硬件作为一种可调度的云服务,使得 FPGA 服务的集中调度、管理和大规模部署成为可能。



Hardware as a Service (HaaS)。来源:[4]
从第一代装满 FPGA 的专用服务器集群,到第二代通过专网连接的 FPGA 加速卡集群,到目前复用数据中心网络的大规模 FPGA 云,三个思想指导我们的路线:

  • 硬件和软件不是相互取代的关系,而是合作的关系;
  • 必须具备灵活性,即用软件定义的能力;
  • 必须具备可扩放性(scalability)。
三、FPGA 在云计算中的角色
最后谈一点我个人对 FPGA 在云计算中角色的思考。作为三年级博士生,我在微软亚洲研究院的研究试图回答两个问题:

  • FPGA 在云规模的网络互连系统中应当充当怎样的角色?
  • 如何高效、可扩放地对 FPGA + CPU 的异构系统进行编程?
我对 FPGA 业界主要的遗憾是,FPGA 在数据中心的主流用法,从除微软外的互联网巨头,到两大 FPGA 厂商,再到学术界,大多是把 FPGA 当作跟 GPU 一样的计算密集型任务的加速卡。然而 FPGA 真的很适合做 GPU 的事情吗?
前面讲过,FPGA 和 GPU 最大的区别在于体系结构,FPGA 更适合做需要低延迟的流式处理,GPU 更适合做大批量同构数据的处理。
由于很多人打算把 FPGA 当作计算加速卡来用,两大 FPGA 厂商推出的高层次编程模型也是基于 OpenCL,模仿 GPU 基于共享内存的批处理模式。CPU 要交给 FPGA 做一件事,需要先放进 FPGA 板上的 DRAM,然后告诉 FPGA 开始执行,FPGA 把执行结果放回 DRAM,再通知 CPU 去取回。
CPU 和 FPGA 之间本来可以通过 PCIe 高效通信,为什么要到板上的 DRAM 绕一圈?也许是工程实现的问题,我们发现通过 OpenCL 写 DRAM、启动 kernel、读 DRAM 一个来回,需要 1.8 毫秒。而通过 PCIe DMA 来通信,却只要 1~2 微秒。



PCIe I/O channel 与 OpenCL 的性能比较。纵坐标为对数坐标。来源:[5]
OpenCL 里面多个 kernel 之间的通信就更夸张了,默认的方式也是通过共享内存。
本文开篇就讲,FPGA 比 CPU 和 GPU 能效高,体系结构上的根本优势是无指令、无需共享内存。使用共享内存在多个 kernel 之间通信,在顺序通信(FIFO)的情况下是毫无必要的。况且 FPGA 上的 DRAM 一般比 GPU 上的 DRAM 慢很多。
因此我们提出了 ClickNP 网络编程框架 [5],使用管道(channel)而非共享内存来在执行单元(element/kernel)间、执行单元和主机软件间进行通信。
需要共享内存的应用,也可以在管道的基础上实现,毕竟 CSP(Communicating Sequential Process)和共享内存理论上是等价的嘛。ClickNP 目前还是在 OpenCL 基础上的一个框架,受到 C 语言描述硬件的局限性(当然 HLS 比 Verilog 的开发效率确实高多了)。理想的硬件描述语言,大概不会是 C 语言吧。



ClickNP 使用 channel 在 elements 间通信,来源:[5]



ClickNP 使用 channel 在 FPGA 和 CPU 间通信,来源:[5]
低延迟的流式处理,需要最多的地方就是通信。
然而CPU 由于并行性的限制和操作系统的调度,做通信效率不高,延迟也不稳定。
此外,通信就必然涉及到调度和仲裁,CPU 由于单核性能的局限和核间通信的低效,调度、仲裁性能受限,硬件则很适合做这种重复工作。因此我的博士研究把 FPGA 定义为通信的「大管家」,不管是服务器跟服务器之间的通信,虚拟机跟虚拟机之间的通信,进程跟进程之间的通信,CPU 跟存储设备之间的通信,都可以用 FPGA 来加速。
成也萧何,败也萧何。缺少指令同时是 FPGA 的优势和软肋。
每做一点不同的事情,就要占用一定的 FPGA 逻辑资源。如果要做的事情复杂、重复性不强,就会占用大量的逻辑资源,其中的大部分处于闲置状态。这时就不如用冯·诺依曼结构的处理器。
数据中心里的很多任务有很强的局部性和重复性:一部分是虚拟化平台需要做的网络和存储,这些都属于通信;另一部分是客户计算任务里的,比如机器学习、加密解密。
首先把 FPGA 用于它最擅长的通信,日后也许也会像 AWS 那样把 FPGA 作为计算加速卡租给客户。
不管通信还是机器学习、加密解密,算法都是很复杂的,如果试图用 FPGA 完全取代 CPU,势必会带来 FPGA 逻辑资源极大的浪费,也会提高 FPGA 程序的开发成本。更实用的做法是FPGA 和 CPU 协同工作,局部性和重复性强的归 FPGA,复杂的归 CPU。
当我们用 FPGA 加速了 Bing 搜索、深度学习等越来越多的服务;当网络虚拟化、存储虚拟化等基础组件的数据平面被 FPGA 把持;当 FPGA 组成的「数据中心加速平面」成为网络和服务器之间的天堑……似乎有种感觉,FPGA 将掌控全局,CPU 上的计算任务反而变得碎片化,受 FPGA 的驱使。以往我们是 CPU 为主,把重复的计算任务卸载(offload)到 FPGA 上;以后会不会变成 FPGA 为主,把复杂的计算任务卸载到 CPU 上呢?随着 Xeon + FPGA 的问世,古老的 SoC 会不会在数据中心焕发新生?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表