查看原文
其他

FPGA开启基于云的“硬件微服务”新时代

2017-06-09 云头条

微软人工智能和研究部门负责人哈里·舒姆(Harry Shum)在今年早些时候召开的微软Build大会上发表主题演讲时透露了口风:微软Azure云服务会在某个时候让广大开发人员能够享用现场可编程门阵列(FPGA)。 Azure首席技术官马克·拉西诺维奇(Mark Russinovich)也谈到了Azure“会在将来某个时候将[FPGA]作为一项服务提供给大家。”


FPGA驱动的未来将会是什么样子?开发人员会如何使用它?


FPGA无论如何都不是一项新技术;在过去,FPGA专门用于这类特殊的应用:对定制处理硬件的需要在重要性方面压倒硬件编程的复杂性(要求非常苛严的算法不断演变时,可以更新这种处理硬件)。


拉西诺维奇聊到处理器时向The New Stack解释道:“通常情况下,通用性越强,灵活性就越强,可以扔给计算引擎来处理的程序和算法的种类就越多,不过牺牲了效率。”


构成FPGA的门阵列可加以编程以便运行某种特定的算法,结合使用逻辑门(通常被实现为查询表)、运算单元以及数字信号处理器(DSP)来进行乘法运算,使用静态RAM用于临时存储那些计算的结果,并使用可以控制可编程模块之间联系的开关模块。一些FPGA实际上就是片上系统(SoC),拥有CPU、PCI Express和DMA连接以及以太网控制器,将可编程阵列转变成CPU上运行的代码眼里的定制加速器。


这种结合意味着FPGA可提供仅仅针对特定算法的大规模并行机制,而且功耗比GPU低得多。而且它们不像专用集成电路(ASIC),如果你想要改变该算法(这就是现场可编程这部分的由来),可以重新编程。

FPGA的数据并行机制比CPU强大得多


拉西诺维奇解释道:“FPGA正合需要,它们能够非常快速地并行处理数据流。它们像GPU或CPU那样可以编程,不过针对诸如推理和深度神经网络之类应用的这种并行低延迟环境;如果你需要进行在线语音识别和图像识别,拥有这种低延迟确实很重要。”


缺点在于,编程和重新编程是用Verilog等复杂的低级硬件定义语言来完成的。ReconfigureIO是一家初创公司,计划提供云端硬件加速技术,让开发人员可以使用Go语言为FPGA编程。公司首席执行官罗布·泰勒(Rob Taylor)告诉The New Stack,熟悉这方面技能的硬件工程师根本就不多。


大多数FPGA开发工作在处理器研发公司进行。而对于习惯使用较高级语言的开发人员来说,这种全然不同的编程模式(你实际上要配置硬件)颇具挑战性。


泰勒说:“作为一名软件工程师,你可以开始为简单硬件编程,但是为功能强大的硬件编程需要几年的时间才能学会熟练操作。”在极少数情况下,为FPGA编程甚至可能对它造成永久性损坏,不过为硬件编程的工具链应该会发出警告。


泰勒表示,这是FPGA从来没有进入主流的诸多原因之一。“这是搞FPGA技术的代价。如果你只能聘请几个薪资不菲的工程师,那么能做的事情很有限。你到头来获得的只是应用范围非常狭窄的特定解决方案,无法享用云计算带来的创新成果。”


不过,泰勒认为FPGA是一种很好的解决方法,可以解决一系列问题。“凡是这种情况:你有不断移动的数据,你在处理这些数据,要获得答案,或者与别处的人分享该答案。那么你可以在FPGA上搭建一个内存数据库,异常快速地进行统计分析,不用接近CPU。这类应用可能包括图像及视频处理、实时数据分析、广告技术、音频、电信,甚至软件定义网络(SDN);他特别指出,SDN“仍然大量地消耗资源。”


ReconfigureIO采用的方法使用Go Channels(https://gobyexample.com/channels),泰勒表示Go Channels适合FPGA管道的模式,“不过我们正致力于一个中间层(intermediate layer),我们想让中间层成为标准化、开源,好让人们可以随意使用自己青睐的任何一种语言。”


为FPGA编程很复杂,这就是为什么让你可以为赛灵思FPGA编程的亚马逊网络服务(AWS)FPGAEC2 F1实例针对这群客户:已经使用FPGA设备来处理基因组学、分析、加密或金融服务等垂直应用领域的工作负载,而且想把那些工作负载引入到云端。AWS实际上为FPGA配置提供了一种硬件开发套件。其中一些设备生产商(比如Ryft)将会提供API,以便将AWS FPGA实例与其分析平台整合起来,就像它们的FPGA设备已经采用的方式那样。


Azure内两个虚拟机之间的带宽只有每秒4Gbps左右,哪怕每个虚拟机上使用40 gigabit的网络适配器;如果采用FPGA加速网络技术,这个速度可提升到25Gbps。


FPGA厂商开始提供更高级的编程语言供开发人员选择,比如C、C ++和OpenCL。AWS依赖OpenCLFPGA编程,以便将来吸引更多的开发人员,不过这仍需要大量的专业知识,而且未必与FPGA编程模式很匹配。


拉西诺维奇特别指出:“这仍然是一种非常深奥的开发环境;但我认为,资源会变得越来越易于访问/享用,这个趋势很明显。我认为,你可以设想在将来,开发人员使用不同的语言,借助相应工具来编写程序;这些工具会查看你使用的算法,然后根据剖析或分析结果,确定你所编写程序的这部分在FPGA上运行更高效,那部分在GPU或CPU上运行更高效,开发人员完全充分利用了平台提供的最佳功能。”


智能网络


微软在采取一种大不相同的方法。在Azure上,你实际上已经可以使用FPGA驱动的服务,只不过不知道自己在使用FPGA罢了――就像你使用Cosmos DB时不知道自己在使用闪存SSD,或者使用微软认知服务(MicrosoftCognitive Services)时,不知道自己在使用GPU,这是同一个道理。实际上,整个Azure网络依赖FPGA驱动的软件定义网络。


微软首次开始将FPGA整合到Azure时,初衷是将低延迟和高吞吐量的优点引入到数据非常多、流量非常大的系统,比如必应(Bing)搜索引擎使用的索引服务器。最初,那些FPGA有自己的网络连接,但是为了简化网络拓扑,微软改而将它们连接到与它们所在服务器同样的网卡。一旦FPGA直接连接到那些网卡上,它们还可以加速Azure用来路由和负载均衡的软件定义网络。

FPGA给必应的查询延迟带来的影响;即便在查询负载加倍的情况下,FPGA加速的排名其延迟也要比任何负载下的软件定义的排名来得低。


与旨在安装到网卡上的定制硅片一样,这些FPGA智能网卡(SmartNIC)比CPU更高效,而且耗电量较少。但是随着微软改进这个软件定义网络架构,以便与即将推出的50GB和100GB网络适配器兼容,FPGA可以重新编程,而换成定制芯片就做不到。


这些SmartNIC已经实施了作为Azure软件定义网络基础的流表(flow table);将来,它们还可能实施服务质量或RDMA,通过卸载加密计算和错误检查来加快存储速度。


AzureAccelerated Networking(https://azure.microsoft.com/en-us/updates/accelerated-networking-in-preview/)自去年以来就出现在较庞大的Azure虚拟机上,既适用于Windows Server,又适用于Ubuntu,不过该服务仍处于预览版状态,存在拉西诺维奇所说的“极其罕见的兼容性问题”,所以要不要使用得慎重选择。它还存在一些局限性,比如说,如果你想要将它用于Windows Server和Linux,就需要单独的Azure订阅。Azure内两个虚拟机之间的带宽只有每秒4Gbps左右,哪怕每个虚拟机上使用40gigabit的网络适配器;如果采用FPGA加速网络,这个速度可达到25Gbps,延迟只有原来的1/5到1/10(具体取决于你的应用)。


FPGA加速的SDN带来的影响(图片来源:微软)


下一步就是为使用那些FPGA的开发人员构建服务,即使FPGA是间接连接的。拉西诺维奇解释道:“有多种方法可以让开发人员使用FPGA,将它们用于给使用我们云的每个开发人员带来的基础设施方面的改进,比如SDN。我们想让开发人员可以使用易于部署和易于使用的深度神经网络(DNN)和推理模型,并在FPGA上运行DNN,那样他们就能获得最佳性能。比如说,他们可以在GPU上进行训练,为我们带来模型。开发人员不知道底层是FPGA;他们只管将DNN模型交给平台,平台就会以最高效的方式来执行模型。

开发人员会以不同的方式使用Azure中的FPGA(图片来源:微软)


拉西诺维奇在Build大会上,用他所说的“数十到数百tera-operations(万亿运算)”演示了FPGA的优势,“那样你就能得到真正高效的推理。”他在24个FPGA上而不是在24个CPU上运行同样的机器学习算法,表明了延迟缩短至原来的1/150到1/200,能效提高了50倍左右。


开发人员已经可以借助微软认知服务API来充分利用这一点。“我们已经将该技术运用于生产环境中的必应,以此作为针对认知服务训练以及必应索引排名的下一个加速阶段的一部分。”


硬件微服务


虽然Azure中部署的每块FPGA都与CPU装在同一块主板上,并作为硬件加速器连接到CPU,但它们也直接连接到Azure网络,那样它们可以连接到其他FPGA,延迟非常低,而不是数据通过CPU来传输而减慢了速度。


这让你得以极高有效地利用FPGA,还可以灵活地将其用于加速,作为也在CPU上运行的分布式应用的一部分,或者用于尝试算法,获得你仍在开发的加速机制。拉西诺维奇告诉我们:“如果你不确定什么算法是压缩或加密所处理数据的最佳算法,或者数据形状会逐渐变化,因而你不想冒将FPGA焊到硅片上这个风险,就可以在FPGA上进行尝试,并且获得敏捷性。”


一种管理架构将负责协调那些直接连接的FPGA,所以针对之前用TensorFlow或微软认知工具包(CNTK)预先训练的模型而言,DNN的不同层可以放在不同的FPGA上,这让你有办法将一个非常深的网络分布在多个设备上,从而避免了许多DNN框架的扩展问题。

将DNN分布在Azure FPGA硬件微服务架构上(图片来源:微软)


拉西诺维奇告诉我们:“这对于FPGA来说是普遍得多的用法,我们认为有望在这方面看到大量创新,我们称之为硬件微服务(hardware microservice)。如果你有大批的FPGA,它们又直接连接到网络,并通过网络可进行编程,那么你可以构建用我们在如今拥有的标准硬件上无法实现的方式来加速的哪些类别的应用?我们先将该基础设施用于我们的DNN,但我们预计它会成为一种通用平台。”


他谈到了该架构可通过编程将互联网搜索排名、深度神经网络、SQL加速和SDN卸载等特性纳入进来。“AzureData Lake Analytics在考虑将机器学习也纳入到FPGA。”


开发人员到头来会编写自己的应用程序,以便在该硬件微服务可重新配置计算层上运行?还是他们会以任何方式广泛地使用FPGA?拉西诺维奇预测,开发人员会结合多种方式来使用FPGA。


“将来开发人员会直接充分利用这种芯片,不过我认为,许多开发人员最终会间接地利用这种芯片,为此充分利用已包括FPGA的代码库和框架,或者使用独立软件开发商(ISV)或开源社区提供的微服务模式。”将来,他认为其方式会与容器如出一辙。


“如今在开发领域,如果我想要一个REST前端,只需要获取一个node.js Docker容器。我没必要自己编写,只需使用它。我认为,你们会看到同一种模式,到时你会说我想要这个算法,我想要最有效地部署该算法,我可以部署到FPGA上,尽管我并不直接编写进入到FPGA上的代码,说不定我甚至可以从Docker存储库中获得它!”


对于拥有相应专长来使用FPGA的云提供商来说,FPGA大有意义,但是它们也可能出现在你收集大量数据的任何地方。“我坚信,FPGA在边缘有一席之地,因为会有大量的推理工作在边缘处进行。不是将数据发送到云端,你可以直接在边缘处进行处理,可以在FPGA上进行增量式训练,并随着在边缘处使用的数据日渐增多,让模型日趋完善。”


拉西诺维奇特别指出,离这个目标还有一段时间,不过由于摩尔定律在CPU领域放缓了脚步,GPU成为解决某些问题的一种标准开发工具,FPGA可能也会成为这样的工具――无论开发人员有没有意识到自己在使用FPGA。


“我们现处于早期阶段,扩大这项技术的应用领域,让它不仅可以为赛灵思和Altera之类的厂商所使用,还可以为替FPGA寻找更高级编程语言的初创公司所使用。我认为,我们现处于这新一代技术的第一波浪潮,这波浪潮似乎稍纵即逝;每隔5年到10年就会出现一种热门技术,然后偃旗息鼓,但我认为FPGA眼下立稳了脚跟。”


相关阅读:

中高端IT圈人群,欢迎加入!

赏金制:欢迎来爆料!长期有效!

FPGA洗牌关系数据库市场

微软部署FPGA的三个阶段:Bing、Azure网络和数据中心

AWS宣布面向其EC2云计算服务的FPGA实例

深度学习:FPGA VS GPU


欢迎加入交流,群主微信:aclood

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存