可编程逻辑
人工智能方兴未艾,无数初创公司和老牌公司都在积极开发以人工智能应用为卖点的智能硬件。目前,强大的云端人工智能服务(如谷歌的 Alpha Go)已经初现端倪,同时,人们也希望能把人工智能也带到移动终端,尤其是能够结合未来的物联网应用。
传统实现移动终端人工智能的方法是通过网络把终端数据全部传送到云端,之后在云端计算后再把结果发回移动端,例如苹果的 Siri 服务。
然而,这样的方式会遇到几个问题。第一,使用网络传输数据会产生延迟,很可能数据计算的结果会需要等待数秒甚至数十秒才能传送回终端(使用过 Prisma app 处理过照片的朋友们应该深有体会)。这样一来,那些需要立刻得到计算结果的应用就不能用这种方式。例如无人机上使用的深度学习躲避障碍物算法,如果它全部在云端执行恐怕计算结果还没送回来无人机已经掉下来了。
第二,一旦使用网络传送数据,那么数据就有被劫持的风险。因此,那些要求低计算延迟以及对于数据安全性非常敏感的应用就需要把人工智能算法全部在终端实现,或者至少在终端完成一些预处理运算然后再把少量运算结果(而不是大量的原始数据)传送到云端完成最终计算,这就需要移动终端硬件能够快速完成这些运算。另一方面,移动端硬件完成这些运算需要的能量又不能太多,否则电池一下就没电了(想在手机上配功耗 200W+的 Nvidia Pascal 显卡肯定不行!)。
目前,许多公司正在积极开发能实现移动端人工智能的硬件。对于移动端人工智能硬件的实现方法,有两大流派,即 FPGA 派和 ASIC 派。FPGA 流派的代表公司如 Xilinx 主推的 Zynq 平台,而 ASIC 流派的代表公司有 Movidius。两大流派各有长短,下面让我来细细分说。
首先讲讲 FPGA 和 ASIC 的区别。FPGA 全称「可编辑门阵列」(Field Programmable Gate Array),其基本原理是在 FPGA 芯片内集成大量的数字电路基本门电路以及存储器,而用户可以通过烧入 FPGA 配置文件来来定义这些门电路以及存储器之间的连线。这种烧入不是一次性的,即用户今天可以把 FPGA 配置成一个微控制器 MCU,明天可以编辑配置文件把同一个 FPGA 配置成一个音频编解码器。ASIC 则是专用集成电路 (Application-Specific Integrated Circuit),一旦设计制造完成后电路就固定了,无法再改变。
用于深度学习加速器的 FPGA(Xilinx Kintex 7 Ultrascle, 上) 和 ASIC(Movidius Myriad 2, 下),比较 FPGA 和 ASIC 就像比较乐高积木和模型。举例来说,如果你发现最近星球大战里面 Yoda 大师很火,想要做一个 Yoda 大师的玩具卖,你要怎么办呢?
有两种办法,一种是用乐高积木搭,还有一种是找工厂开模定制。用乐高积木搭的话,只要设计完玩具外形后去买一套乐高积木即可。而找工厂开模的话在设计完玩具外形外你还需要做很多事情,比如玩具的材质是否会散发气味,玩具在高温下是否会融化等等,所以用乐高积木来做玩具需要的前期工作比起找工厂开模制作来说要少得多,从设计完成到能够上市所需要的时间用乐高也要快很多。
FPGA 和 ASIC 也是一样,使用 FPGA 只要写完 Verilog 代码就可以用 FPGA 厂商提供的工具实现硬件加速器了,而要设计 ASIC 则还需要做很多验证和物理设计 (ESD,Package 等等),需要更多的时间。如果要针对特殊场合(如军事和工业等对于可靠性要求很高的应用),ASIC 则需要更多时间进行特别设计以满足需求,但是用 FPGA 的话可以直接买军工级的高稳定性 FPGA 完全不影响开发时间。但是,虽然设计时间比较短,但是乐高积木做出来的玩具比起工厂定制的玩具要粗糙(性能差)许多(下图),毕竟工厂开模是量身定制。
另外,如果出货量大的话,工厂大规模生产玩具的成本会比用乐高积木做便宜许多。FPGA 和 ASIC 也是如此,在同一时间点上用最好的工艺实现的 ASIC 的加速器的速度会比用同样工艺 FPGA 做的加速器速度快 5-10 倍,而且一旦量产后 ASIC 的成本会远远低于 FPGA 方案(便宜 10 到 100 倍)。
当然,FPGA 还有另一大特点,就是可以随时重新配置,从而在不同的场合实现不同的功能。但是,当把 FPGA 实现的加速器当作一个商品卖给用户时,要让用户自己去重新配置却要花一番功夫。
回到用乐高积木做玩具的例子,玩具厂商可以宣称这个 Yoda 大师由积木搭起来,所以玩家可以把这些积木重新组合成其他角色(比如天行者路克)。但是一般玩家根本不会拆装积木,怎么办?解决方案要么是把目标市场定为精通积木的专业核心玩家,要么是在玩具后面加一个开关,一般玩家只要按一下就可以让积木自动重新组装。很显然,第二个方案需要很高的技术门槛。
对于 FPGA 加速器来说,如果要把可重配置作为卖点,要么是卖给有能力自己开发 FPGA 的企业用户(如百度,微软等公司确实有在开发基于 FPGA 的深度学习加速器并且在不同的应用场合将 FPGA 配置为不同的加速器),要么是开发一套方便易用能将用户的深度学习网络转化为 FPGA 配置文件的编译器(深鉴等公司正在尝试)。
从目前来看,即使用高端的服务器来做 FPGA 编译都会需要数分钟的时间,如果编译在计算能力较弱的移动终端做需要的时间就更长了。对于移动终端用户来说,如何说服他们尝试重新配置 FPGA 并接受长达数十分钟的时间来编译网络并配置 FPGA 仍然是一个问题。
我把 FPGA 和 ASIC 的比较总结在下面表格里。FPGA 上市速度快,但性能较低。ASIC 上市速度慢,需要大量时间开发,而且一次性成本(光刻掩模制作成本)远高于 FPGA,但是性能远高于 FPGA 且量产后平均成本远低于 FPGA。FPGA 可以完全重配置,但是 ASIC 也有一定的可配置能力,只要在设计的时候就把电路做成某些参数可调的即可。
目标市场方面,FPGA 成本太高,所以适合对价格不是很敏感的地方,比如企业应用,军事和工业电子等等(在这些领域可重配置可能真的需要)。而 ASIC 由于低成本则适合消费电子类应用,而且在消费电子中可配置是否是一个伪需求还有待商榷。
我们看到的市场现状也是如此:使用 FPGA 做深度学习加速的多是企业用户,百度、微软、IBM 等公司都有专门做 FPGA 的团队为服务器加速,而做 FPGA 方案的初创公司 Teradeep 的目标市场也是服务器。而 ASIC 则主要瞄准消费电子,如 Movidius。由于移动终端属于消费电子领域,所以未来使用的方案应当是以 ASIC 为主。
全部0条评论
快来发表一下你的评论吧 !