机器学习(Machine Learning, ML)技术和FPGA的联系可以体现在下面几个维度上:
1. FPGA帮助改进机器学习的模型训练过程(FPGA应用)
2. 机器学习帮助改进FPGA的设计代码/约束(FPGA应用)
3. 机器学习帮助改进FPGA软件(EDA)算法设计(FPGA软件设计)
4. 机器学习帮助改良FPGA芯片硬件设计(FPGA硬件设计)
本篇先分享从第1个维度出发的一些观点。
FPGA传统上被用作设计新数字芯片的早期验证原型已经很久了,但随着机器学习技术的出现,FPGA体现出了有别于传统应用更多的特质。
在FPGA在其传统市场因价格昂贵、难于上手而步履维艰时,ML为其打开了一片广阔的市场。FPGA最大的特点在于其可编程的灵活性,这一点恰好在机器学习这种多变的场景下极为合适。不仅应用时刻在变化,网络和模型也在训练的过程中不断进化,针对这种场景,不同FPGA厂商有着各自不同的应对方案。
“GPU、FPGA以及ASIC之间,正在进行一场旷日持久的战争”,Anoop Saha(market development manager at Mentor, a Siemens Business)说道,“如果FPGA厂商无法提供合适的【工具】,他们将在ML这个市场上毫无机会。”
最早的ML应用实现是软件导向的,并对CPU和GPU产生了巨大影响。但CPU和GPU面临的挑战在于其巨大的功耗——即使对于数据中心来说也是这样。“人们试着用软件实现创新,但却无法控制功耗,” Patrick Dorsey(general manager and vice president of product markeTIng,FPGA and power products in Intel’s Programmable SoluTIons Group)说道。因此,FPGA提供了一套比传统软件编程在功耗方面更具吸引力的解决方案。”FPGA由于其并行性特别适合于高性能,低功耗应用,“Shakeel Peera(associate vice president in Microchip’s FPGA business unit)说道。
“我们看到在TOPS/W(每瓦进行多少万亿次操作)性能方面,Intel的FPGA方案已经打败Nvidia的GPU方案。” Dorsey(Intel)说。FPGA可以提供软件解决方案无法企及的低延迟和高性能。“ASIC 可以达到5TOPS/W, 而FPGA也可以达到 1-2TOPS/W,”Mike Fitton(senior director of strategy and planning for Achronix)说道。价格对于成熟产品来说十分重要,但ML应用通常还没有到形成成熟产品程度,因为模型时刻不停地在飞速迭代,“FPGA虽然对于应用在成熟产品上来说并不合适,”Nick Ni(director of product markeTIng for AI and software at Xilinx)说道,“但比如一些监控摄像头的应用,其识别算法还远未成熟,FPGA则是最好的选择。”但也并不是说,在AI应用中,完全不用考虑成本,毕竟总还是有人会关心总持有成本(total cost of ownership,TCO)的。
如果说这种绝对灵活的解决方案统治了早期的AI市场,那么接下来便通常会演化成ASSP(applicaTIon-specific standard products)方案,以提供更佳的性能/功耗比,即使ASSP依然要在二者之间做出艰难的平衡。
从数据中心到边缘计算
FPGA在数据中心加速应用中找到了自己的用武之地——作为CPU和GPU的协处理引擎。在数据中心的训练(training)方面确实如此,而且目前的应用也已扩展到了推理(inference)中。
另外,大量的推理工作集中在边缘侧进行—特别是汽车应用。汽车应用大都对成本和功耗非常敏感,但是由于ASSP方案的缺乏以及设计的快速更新迭代,FPGA得以在和传统处理器的PK中脱颖而出。“FPGA在边缘侧优势巨大,尤其是在性能方面。”Saha(Mentor)说道。
同时,根据Synopsys的说法,“accumulation”市场也是一个增长点——例如数据中心和边缘之间网络上的路由和开关器件。“有很多应用场景是用户只是想和‘AI’沾点边而已,”Dorsey(Intel)说道,“三到四成的传统嵌入式业务都在讨论如何和AI进行结合。”
设计模型面临挑战
硬件编程解决方案既然具有如此多的优势,那么问题来了,“为什么不是所有人都在使用FPGA呢?”回答也很简单:FPGA是纯硬件。这也是FPGA的“阿克琉斯之踵”。
根据美国劳动统计局的数据,全美在2018年5月软件工程师(包括应用编程和系统软件开发)的数量大约是硬件工程师的21.5倍。硬件开发工作专注于低层次的硬件描述语言(HDL,更多的是描述硬件结构而不是描述算法本身),这和软件开发的思路完全不同,绝大多数工程师无法跨越这两种开发理念而做到融会贯通。
FPGA大部分时候需要硬件设计,这使得FPGA应用工程师的门槛很高。基于硬件设计的ML策略往往开发量巨大,Saha (Intel)曾听一个用户说道,“我们知道FPGA的优势,但在得知设计需要4-5个工程师8-10个月才能完成之后,我们放弃了。..”
大多数FPGA解决方案包括软件编程引擎——无论是硬编码还是IP。这部分灰色区域造成了FPGA解决方案往往是既包含硬件开发又包含软件开发。对于ML来说最大的挑战并不仅仅来自硬件/软件在开发理念上的不同。对于精通高层次开发语言的数据科学家来说(他们并非纯软件开发者,但依然和真正的硬件开发有些距离),他们依然无法做到得心应手。因此FPGA厂商要做的是在工具中将硬件的部分“抽离”出去,让数据科学家们得以进入FPGA开发圈。
硬件结构对于ML计算来说十分重要,其可由硬件工程师来设计,但进一步优化则可以交给软件工程师来进行。软件工程师通过高层次工具例化各类IP,从而避免了大量硬件方面的工作。为了实现这一目标,必须考虑两个重要因素:设计流程和设计工具。一些FPGA公司将设计流程进行了分离,使得硬件设计从模型设计中解耦出来,这类做法使得FPGA对于非硬件工程师来说更加友好。
FPGA设计细节一般以码流的形式下载到器件中,但在ML中,有的公司将整个模型实现在码流中,有的则只用码流实现硬件部分,而转用软件二进制文件来描述ML模型细节。
FPGA上实现的2个ML简单设计模型。左边,设计的所有细节实现在一个码流中。数据科学家可以在高层次上进行设计,由EDA工具将其转化并交给硬件编译器。右边,高层次模型数据存在了一个单独的软件二进制文件中,而模型何时变化的信息则存在硬件码流之中。
设计模型包含了已现场部署的FPGA器件中正在运行的设计修改和更新。第一种情况由于整个设计信息包含在码流之中,模型的变化仍然将继续使用低层次的FPGA硬件工具去创建和更新码流文件,即使高层次设计工具已经将设计师从硬件设计中解放出来。
另一种情况,模型的变化仅仅会导致软件二进制文件的变化,而软件二进制文件的编译速度要远远快于硬件码流的生成速度,因此底层硬件通常不变,而仅仅是模型参数发生变化而已,而软件和硬件具体如何变化,由架构设计来自行决定。
高层次综合(HLS)的出现,减轻了硬件设计的负担,因为其可以直接将C算法转化为硬件设计。很多算法都从软件设计开始(通常是C或者C++),将其直接转化为硬件设计将极大地节省设计时间(尽管使用HLS仍然需要一些硬件专业知识)。目前HLS最大的挑战来自于调试Debug过程。
优化推理模型
所有的FPGA工具链均工作在抽象层级,并和云端的标准模型训练框架相连。在顶层,训练过程会对参数(或权重)进行定义,并将其放入常用的模型(比如ResNet, MobileNet, 或者 YOLO)之中。这些参数可以仅仅是简单的数字并存储在数据文件中。
网络结构本身则是下一层级。层级的精简和融合就是在训练网络中优化的过程,在一些引擎中,这个过程由软件原语完成,而在另一些引擎中,则会导致硬件变化。
为了能够进行在线升级,修改码流意味着重置整个FPGA设计。如果更新只是影响到软件二进制文件,则只需要修改这个文件即可,硬件码流此时无需更换。“你可以根据不同模型准备不同的软件二进制文件,”Joe Mallett(senior marketing manager at Synopsys)说道。如果涉及到硬件修改,部分重配(PR)也能帮上你的忙,因为同一设计模型用来建立不同的算法,可以通过部分重配来实现算法间的切换。这项技术在数据中心加速板卡上显得十分强大,而这类板卡在不同类型的推理和训练中不可或缺。Intel声称他们的重配时间大概需要100ms左右,并且该公司正在致力于将这个时间降低到几十个毫秒,从而实现FPGA加速卡的快速再部署。
不同FPGA厂商的策略
就在众多start-up公司广泛地在ML领域展开探索的同时,FPGA厂商也在尝试各种不同的方法,以至于他们的FPGA做的“越来越不像”FPGA了。现代的FPGA大都同时提供硬件编程性以及软件编程性(嵌入式处理器核心作为硬核直接在FPGA中工作)。这造就了不同FPGA厂商有着自己的实现策略。
目前最大的两个FPGA玩家—Xilinx以及Intel有着截然不同的发展思路。Intel通过宽广的产品线来实现战略,FPGA只是其中一个拼图。Intel同时拥有Xeon处理器,该处理器是数据中心上绝对暴力的存在,并且Intel还在不断完善其现有解决方案。Intel的FPGA还只由传统资源组成,截止到目前,还没有看到ML专用处理资源模块的出现。
内存获取是ML正在面临的一大挑战,对于FPGA解决方案来说也是一样。Intel的思路则是引入HBM(高带宽存储)技术。“我们在FPGA中加入了许多HBM,并将其放在离逻辑运算模块很近的位置,从而帮助循环神经网络RNN(recurrent neural networks)进行语音识别”, Dorsey (Intel)说道。目前,HBM和FPGA的2D集成通过Intel的EMIB(嵌入式片间互连桥)连接器来实现。
Xilinx则朝向另一个方向前进,将ML引擎加入到Versal家族器件中去。该硬模块让Xilinx在牺牲一定芯片灵活性为代价获得更高的效率。ML引擎由软件驱动,因此不那么依赖硬件设计的考虑。
Achronix则和Intel一样采取了同质策略,尽管他们声称微调了DSP模块,使其更加适应ML工作。其老版DSP的优化方向更倾向于传统数字信号处理,例如滤波器,因此聚焦于18-bit数据。ML则倾向于更小的数据单元——特别是在边缘侧——因此,新型DSP的优化方向聚焦于80bit整形数据。值得注意的是,Achronix同时提供FPGA成片和可供嵌入到SoC中的eFPGA IP。
Lattice则一直专注于低成本,低功耗市场,并且在ML应用中,Lattice依然保持了他们的特点。他们将一些小功能(例如语音唤醒识别)加入到边缘器件中,作为ML处理的初步尝试。“我们所做的推理工作主要是侦测(detection),比如识别关键语句和手势。”Osman(Lattice)说道。
Microchip方面,正在推出其全新的VectorBlox工具,用以服务于其PolarFire系列 FPGA。他们的策略则认为硬件设计工作并不是在FPGA上做ML所必需的。Microchip在FPGA提供可例化的引擎IP,剩下的模型信息则用软件来处理并最终生成一个软件二进制文件——这个文件通常被称为BLOB(binary large object),且文件体积很大。
使用该BLOB文件,Microchip可以同时管理多种ML模型。例化多个引擎可以使得其具有完全并发的处理方式,除此之外,例化单一引擎仍可以通过顺序或者类并发的方式控制多个模型。
该引擎可以将模型信息从内存中的BLOB中抽离出来。如果有多个软件二进制文件,则由指针的指向决定某一时刻使用哪一个BLOB中的信息,而这个被指定的BLOB并不是完全加载进来,而是只用到和模型相关的部分。“切换BLOB就像改变指针位置一样。当某个MXP(矩阵处理器,matrix processor)运行时,它BLOB中的layer信息便被抽离出来。在多个神经网络之间切换几乎可以不耗费任何时间,”Jamie Freed(senior architect for the FPGA Business Unit at Microchip)说道。
这种近似并发的特性则通过时间分片(time-slicing)技术来实现。如果一个视频在同一时间被多个模型所处理,则这些模型依次运行完整的一帧。一旦所有模型都处理了完了这一帧,将切换到下一帧继续这个循环。
Flex Logix则隐藏了自己的FPGA特性。他们将配置在可编程产品内部进行了固化,这意味着用户将无法再将其作为FPGA使用。Flex Logix的路线基本游走在可编程FPGA和ML专用ASIC的边缘。“我们的产品是混合型ASIC/FPGA,”Geoff Tate(Flex Logix CEO)说道。用户直接对神经网络模型进行编程,而不是什么低层级的东西,包括eFPGA,就像Intel的用户不会去写是什么微代码或者缓存算法一样。
Flex Logix的模块图显示芯片中嵌入了一个eFPGA,但只能被用来部署模型的高层次工具所调用,设计者无法直接和该eFPGA在底层产生互动。
对各个FPGA厂商的总结
Intel工具可以创建一个“shell”来覆盖FPGA本身的硬件部分以及其所依附的板卡,就像高层次工具使用的板卡支持包(board support package)一样。这些工具可以支持所有Intel支持的各类解决方案,无论是硬件的还是软件的。所有改动都会影响最终FPGA码流,即使改动是在高层次上进行的。至于软件层面能修改什么,取决于AI引擎中可供使用的原语。Runtime模型可根据支持的原语进行修改。Intel支持部分重配功能。
Xilinx聚焦于改进工具满足数据科学家的需求,将模型设计抽象到更高的,不需要使用HDL的层级。对于大型设计,Xilinx将FPGA码流从参数(可直接从memory中加载)中进行分离。Xilinx也支持部分重配功能。
Achronix拥有两套不同的设计模型。其一使用了“overlays”将模型实现在一个底层硬件模板上,从而让数据科学家免于应付HDL。其二则使用“direct graph”将定制的有向图编译进硬件中。
Lattice将设计文件和层layer、神经元neuron以及权重weight进行剥离,使其完全独立于FPGA码流之外。
Microchip通过例化ML引擎IP来针对特定应用。其硬件部分主要由其软件工具控制。开发者只需将注意力放在模型上,用单独的BLOB来解决网络细节的问题。Microchip也支持硬件工程师自定义的网络设计。
Flex Logix的推理引擎通过专用逻辑实现,并依托于eFPGA。
虽然由于如今的一些ML应用在几年以后才会实现量产,导致FPGA看起来在ML应用中如日中天,但真正要等到ASSP进入市场后,FPGA的活力才能得到真正的检验。“新型ASSP专注于特定配置,当这些ASSP出现之后,业界才能继续向前发展,计划总是赶不上变化。”Ni(Xilinx)说道。
无论那些所谓的ASSP能否大获成功,FPGA显然还是在产品研发阶段和小批量产品上有着自己无法替代的位置,因此在可以预见的将来,FPGA仍然还会是ML应用中一道靓丽的风景线。