我最近参加了在硅谷举行的2018年Xilinx开发者论坛(XDF)。在这个论坛上,我了解到一家名为Mipsology的AI领域初创公司,声称已经解决了采用现场可编程门阵列(FPGA)的AI相关问题。 Mipsology的宏伟愿景是利用FPGA可实现的最高性能来加速神经网络(NN)计算,而不受其部署中固有的限制。
Mipsology展示了每秒可执行超过2万张图像的能力,基于Xilinx新发布的Alveo板,处理一系列NN,包括ResNet50、InceptionV3、VGG19及其它深度学习模型等。
神经网络和深度学习入门
神经网络松散地模拟人脑中的神经网,是深度学习(DL)的基础,这是一个复杂的数学系统,可以自己学习执行任务。通过查看许多示例或关联,NN可以比传统的识别程序更快地学习连接和关系。训练就是基于对数百万同一类型的样本的学习来配置NN以执行特定任务的过程。
例如,一个NN可能聆听许多声音样本并使用DL来学习“识别”特定单词的声音。然后,该NN就可以筛选新的声音样本清单,并使用称为推理的技巧来正确识别出包含它已经学习过的单词的样本。
尽管这听起来很复杂,但DL执行的却是简单的操作,主要是加法和乘法,但要进行数十亿或数万亿次的运算。执行这么大量的操作对计算的需求很高。更具体地讲,执行DL推理的计算需求要大于DL训练对计算的需求。DL训练只需要进行一次,但NN一旦经过训练后,就必须对其收到的每个新样本一次又一次地进行推理。
加速深度学习推理的四种选择
随着时间的推移,工程技术界挑选了四种不同的运算器件来处理NN。按照处理能力和功耗的递增顺序,以及灵活性/适应性的递减顺序,这些器件包括:中央处理单元(CPU),图形处理单元(GPU),FPGA和专用集成电路(ASIC)。下表总结了四种计算器件之间的主要差异。
图1:用于DL计算的CPU、GPU、FPGA和ASIC的对比。(来源:Lauro Rizzatti)
CPU基于冯诺依曼架构。虽然灵活(这是它存在的根本原因),但CPU会受到长延迟的影响,因为存储器访问要耗费几个时钟周期才能执行一个简单的任务。当应用于要求低延迟的任务时,如NN计算,特别是DL训练和推理,它们是最差的选择。
GPU以牺牲灵活性为代价来提高计算吞吐量。此外,GPU的功耗很大,需要冷却装置,这使得它们不能成为数据中心大规模部署的理想选择。
定制ASIC似乎是一种理想的解决方案,但它也有一系列自身的问题。首先,开发ASIC需要耗费数年时间,而DL和NN仍在快速演化中,也许一个新的突破马上就让去年的技术变得无关紧要了。此外,为了与CPU或GPU竞争,ASIC较大的硅片面积就需要使用最新最小的晶圆工艺技术来制造。这使得前期的巨额投资十分昂贵,而又不能保证其长期可用性。综合考虑多种因素,ASIC对特定任务才比较有效。
FPGA器件已逐渐成为推理的最佳选择。它具有快速、灵活和高效的优点,并且可为数据中心的数据处理提供良好的解决方案,特别是在快速发展的DL领域、网络边缘以及AI科学家的桌面终端上。
目前最大的FPGA包括数百万个简单的布尔运算、数千个存储器和DSP,以及多个Arm处理器内核。所有这些资源都可以并行工作 ,即每个时钟周期即可触发多达数百万个同时的操作,从而达到每秒执行数万亿次操作的计算性能。 DL所需的处理能力可以很好地映射到FPGA资源上。
相对于CPU和GPU,FPGA在DL应用方面还具有其它优势,包括:
它不限于某种类型的数据,比如它可以处理非标准的低精度数据,为DL提供更高的吞吐量。
它比CPU或GPU的功耗低,对相同的NN计算其平均功耗要低5~10倍。它在数据中心部署的经常性运营成本也比较低。
也可以对它进行重新编程以适应不同的任务,其通用性足以适应各种应用需求。DL正在快速发展和变化,同一个FPGA可以满足新的要求,而无需更换为下一代芯片(而ASIC就必须更换),从而降低了总拥有成本。它的应用范围也比较宽泛,从大型到小型设备都可以,即可用于数据中心,也可用于物联网(IoT)节点。唯一的区别是它所包含的模块数不同。
并非所有闪光的都是金子
FPGA的高计算能力、低功耗和灵活性是需要付出代价的,它编程很复杂。
对FPGA进行编程需要特定的技能和知识,首先需要熟悉专门的硬件编程语言(HDLS),然后还要熟练使用FPGA供应商提供的特定工具,才能通过综合、布局和布线等复杂的步骤来编译设计。FPGA编程在获得回报之前涉及几个关键问题,其中包括定义一个“程序”架构、遵守约束设计规则、将“程序”合理安置到FPGA中,以及应对时序收敛、漫长的编译及缺乏软件类调试等问题。
Mipsology的Zebra这样解决FPGA问题
在XDF上,Mipsology创始人兼CEO Ludovic Larzul和我谈到了Zebra,这是该公司基于FPGA开发的一种用来计算神经网络的深度学习推理引擎。
根据Larzul的说法,“Zebra对用户隐藏了FPGA,因此消除了那些难以编程的问题。Zebra不要求你学习一种新的语言和工具,也不需要了解硬件级别的细节。它提供预先编译好的FPGA二进制文件,因此无需学习FPGA编译过程。
“我们用Zebra简化了流程。一旦将FPGA板插入PC,只需一个Linux命令即可。FPGA可以代替CPU或GPU立即进行无缝的推断,并且可以在更低的功耗下将计算速度提高一个数量级。”
Zebra是专为AI设计的:“FPGA现在可用于人工智能和深度学习,”Larzul肯定地说。 “Zebra可以集成进Caffe、Caffe2、MXNet和TensorFlow等框架中。部署Zebra无需修改神经网络框架,可让AI专家在同一框架之上运行各种应用。他们可以在NN训练之后从CPU或GPU切换到FPGA以进行推理,而不会浪费研发时间。”
“Zebra可支持各种NN,从最常见的商业网络到任何定制设计的NN。只要使用可支持的层和参数构建神经网络,就不需要进行任何更改。Zebra的界限不应该阻止任何NN在其上运行。它们可以包括多达100万个层、30亿个网络权重,以及每个卷积滤波器中的5万个过滤器。所有这些资源远高于神经网络所常用的。
“调整NN参数甚至改变神经网络并不需要强制重新编译FPGA,重新编译工作可能需要花费数小时、数天,如果发生时序问题甚至要耗费几周(如果可能重新编译的话),这使得Zebra很适合NN部署。 对NN的任何修改都可以在Zebra上运行,从而简化了用于数据中心的新版本的测试。
Zebra可以使用已经在GPU上执行的NN训练,因此无需再训练,也避免了使用新工具来迁移训练参数。”
“Zebra使用8位或16位定点整数执行推理计算,而CPU或GPU通常使用浮点值。正如许多科学论文中所揭示的,若使用适当的量化,结果的准确性不会受到精度变化的影响。Zebra也适应这种情况,无需任何用户干预。通过降低计算精度,计算吞吐量可大大提高。”
性能是最重要的,Larzul声称,“虽然FPGA具有其他硬件平台无法比拟的多种优势,但处理速度、功耗和成本在大多数情况下是令一个硬件平台具有吸引力的关键。当使用相同的软件堆栈、框架和神经网络时,Zebra的执行速度远远高于GPU或CPU。“
图2:Zebra适应由其他加速器训练的NN。 (来源:Mipsology)
Larzul坚定地表示,“在Mipsology,我们会专注于持续提高Zebra的吞吐量,旨在实现FPGA所能达到的最高性能。 例如,就在2018年,我们已经在同一芯片上实现了5倍的加速。”
“与市场上现有的各种FPGA板相比,Zebra的吞吐量/元和吞吐量/元/W都是最好的。”
结语
在2018年XDF上发现Mipsology和Zebra对我是一个惊喜。正如Larzul所总结的那样,“Zebra从一开始的构想就是为了充分利用FPGA的吞吐量潜能,并尽量避免其缺点,可以为AI科学家和专业人士提供很高的算力,以加速数据中心和边缘的NN推理,配合GPU训练可谓是相得益彰。”