FPGA vs. ASIC
首先讲讲FPGA和ASIC的区别。FPGA全称“可编辑门阵列”(Field Programmable Gate Array),其基本原理是在FPGA芯片内集成大量的数字电路基本门电路以及存储器,而用户可以通过烧入FPGA配置文件来来定义这些门电路以及存储器之间的连线。这种烧入不是一次性的,即用户今天可以把FPGA配置成一个微控制器MCU,明天可以编辑配置文件把同一个FPGA配置成一个音频编解码器。ASIC则是专用集成电路(Application-Specific Integrated Circuit),一旦设计制造完成后电路就固定了,无法再改变。
小结
SoC+IP模式
说到这里,不少读者可能有疑问:现在深度学习的网络结构日新月异,但是ASIC上市速度那么慢而且一旦制作完成(流片)就无法更改,如何能跟上深度学习的发展速度呢?针对这个问题,我想首先需要厘清一个概念,即用于深度学习加速的ASIC到底要做什么?有人认为神经网络ASIC就是真的实现一个神经网络结构在芯片上,因此网络结构一改(例如从12层变成15层,或者权重参数变一下)该ASIC就不能用了。其实这样的理解是不对的:ASIC加速器做的是帮助CPU快速完成深度学习中的运算(例如卷积),当CPU在执行人工智能算法时只要遇到这种运算就交给加速器去做。因此只要神经网络的主要运算不变,则ASIC加速器完全可以使用。网络结构会影响ASIC加速器的性能,一种ASIC加速器可能是针对GoogleNet优化过的所以执行GoogleNet会特别快;当你换到VGG Net的时候这款ASIC还是可以用的,只是执行效率相比执行GoogleNet时要打个折扣,不过无论如何都要比CPU快得多。
FPGA和ASIC在实现深度学习加速器方面各有所长,FPGA的可配置性更适合企业、军工等应用,而ASIC的高性能和低成本则适合消费电子领域(包括移动终端)。为了实现快速迭代,ASIC可以采用SoC+IP的模式,而这种模式也使得没有资源量产芯片的中小公司可以专注于深度学习加速器IP的架构和前端设计,并在人工智能市场上占有一席之地。