为什么要选择FPGA加速AI计算?
参考: http://bbs.elecfans.com/jishu_1634668_1_1.html
为什么微软选择了FPGA?
因为微软和Google是两种不同的基因,Google喜欢尝试新技术,所以自然要用TPU去追求最高的性能。但是,微软是一家商业文化很重的公司,选择一个方案看的是性价比和商业价值。做专用芯片尽管很炫,但是是否真的值得?
做芯片主要的缺点是投资大、时间周期长,芯片做好后里面的逻辑就不能修改。人工智能的算法一直在快速迭代,而做芯片至少要一两年的时间,意味着只能支持旧的架构和算法。如果芯片想要支持新的算法,就要做成通用型,提供指令集给用户编程,通用性又会降低性能,增加功耗,因为有些功能是浪费的。所以不少芯片公司尽管做了芯片,但是很多产品还是FPGA做的,比如比特大陆的挖矿机,芯片做出来就已经无法支持新的挖矿算法了。
CPU、GPU、ASIC和FPGA横向对比
我们现在常见的硬件计算平台包括CPU、GPU、ASIC和FPGA。CPU是最通用的,有成熟的指令集,例如X86、ARM、MIPS、Power等,用户只要基于指令集开发软件就能使用CPU完成各种任务。但是,CPU的通用性决定了计算性能是最差的,在现代计算机中,很多计算都需要高度的并行和流水线架构,但是,CPU尽管流水线很长,计算核心数最多只有几十个,并行度不够。比如看一个高清视频,那么多像素要并行渲染,CPU就拖后腿了。
GPU克服了CPU并行度不够的缺点,把几百上千个并行计算核心堆到一个芯片里,用户用GPU的编程语言,比如CUDA、OpenCL等就可以开发程序用GPU来加速应用。但是,GPU也有严重的缺点,就是最小单元是计算核心,还是太大了。在计算机体系结构中,有一个很重要的概念就是粒度,粒度越细,就意味着用户可以发挥的空间越多。就跟盖楼一样,如果用小小的砖头,可以做出很多漂亮的造型,但是建设时间久,如果用混凝土预制件,很快就盖好大楼了,可是楼的样式就受到限制。如下图,就是预制件盖楼,搭积木一样,很快,可是都长得差不多,想盖的别的楼就不行。
ASIC克服了GPU粒度太粗的缺点,能让用户从晶体管级开始自定义逻辑,最后交给芯片代工厂生产出专用芯片。不管是性能还是功耗,都比GPU好很多,毕竟从最底层开始设计,没有浪费的电路,而且追求最高的性能。但是ASIC也有很大的缺点:投资大、开发周期长、芯片逻辑不能修改。现在做一款大规模芯片,至少需要几千万到几亿的投资,时间周期一两年左右,尤其是AI芯片,没有通用IP,很多要自己开发,时间周期更久。芯片做好后,如果有大问题或者功能升级(有些小问题可以通过预留的逻辑修改金属层连线解决),还不能直接修改,而要重新修改版图,交付工厂流片。
所以,最后就回到了FPGA:兼顾ASIC计算粒度细和GPU可编程的优点。FPGA的计算粒度很细,可以到与非门级别,但是逻辑还能修改,是可编程的。