在机器学习的应用上,软件工程师和FPGA真的有着难以逾越的鸿沟吗?

人工智能和机器学习正在渗透所有的行业。随着人工智能算法的成熟,支持这些算法的硬件平台也日趋成熟。目前,这些硬件平台包括 ASIC,CPU,GPU以及 FPGA 。在 Plunify,尽管我们的强项是FPGA的设计优化,但是我们中的很多人本质上还是软件工程师。当然,这里所说的“软件工程师”并不包括嵌入式工程师,固件工程师或者研发驱动的工程师;我们所说的是使用 .NET, Java, Python, R, SQL, C++ 或者 JavaScript 来写代码的开发者们。

我们最近正在研究的项目是在芯片设计上使用机器学习驱动的布局。我们用成千上万不同的布局来训练,并使用机器学习技术,在布线之前预测设计的最终时序性能。

使用哪一个框架来开启机器学习项目?
市面上有很多选择,但是我们最终的答案是Tensorflow。这似乎有些难以置信,毕竟我们已经开发了赛灵思 Vivado 的插件 Plunify Cloud 以及设计优化软件 InTime,难道不应该选择一个可以轻易把FPGA作为硬件的框架吗?我们已经对FPGA有所了解,而Tensorflow和FPGA的关系并不是很密切。

请不要误解。我们虽然对FPGA的加速性能充满信心,但是,在每一个机器学习项目开始的时候,挑选一个合适开发环境首先要考虑的应该是自己的已有技能和可供学习的资源。对于已有技能,我们了解上述所有语言和其他的一些语言;至于可供学习的资源,Tensor Flow+Keras 教程和文档可以轻易的击败所有的对手。有这么多选择,您一定想马上开启项目来测试您的方法是否可行。

应该选择哪个加速平台?
在生成了成千上万个拥有不同布局和资源要求的设计时,我们应该如何加速机器学习的训练和推理?关于加速的问题终于来了-究竟是用GPA,TPU还是FPGA呢?很明显,FPGA由于对用户不友好胜算不大。合理的选择仍然是谷歌的云平台或者GPU。

对我们来说,我们已经解决了如何将正在进行的项目转换成基于FPGA的加速环境。这里所说的“转换”并不是完全的重写。也许我们已经开启了Caffe,但是软件工程师在开始阶段不会考虑加速平台。

“不了解发动机,也可以选一台好车?”
这里有一种替代方法 – 高层综合(High LevelSynthesis)。用C/C++写代码然后转换成Verilog或者VHDL(这个方法已经存在很久并且也有很多批评)。在Hastlayer有一群工程师提供一个.NET的软件开发工具包可以把.NET程序转换成VHDL.。这个开发包当然有一些局限性,但是从软件工程师的角度上来说,这已经是一个从试图理解时钟,频率,器件类型的极大飞跃。我们这些软件工程师比较自我,大多只关心机器学习的训练可以有多快。如果眼下的程序在CPU上需要运行一天,而在FPGA上只需要两个小时,我是不是可以用一个更优化的版本(比如同样的.NET程序但是被InTime优化过)30分钟就完成运行呢?

采用自然习惯还是稍后再转换?
让软件工程师采用他们早期的自然习惯肯定是有帮助的。看看这个领域扩展地有多快吧,编写机器学习算法的程序员绝大多数都不会成为拥有数学博士的数据科学家或者FPGA/ASIC设计工程师。他们大多是像你我这样拥有一个计算机学位的普通人,使用已经编写好的库。在没有一个大公司或团队的支持下,很难创造一个属于自己的机器学习框架。这条路行不通的话,拥有一个简单自动的转换路径似乎就是一个最好的选择了。

所以别再说“你需要一开始就学习FPGA”这样的话了,我们应该说“将Tensorflow / Pytorch转换成适用于FPGA的代码”。或者直接让我们来帮您在FPGA上运行吧。

这两种选择,都需要逾越一条鸿沟。如果您是一个已经遇见这些问题的软件工程师,我们十分希望能听见您的心声。

InTime是一款使用机器学习来优化 FPGA 设计的软件。如果您有兴趣,点击这里来了解更多 InTime 的信息,或者直接申请免费试用

我们全新推出的 Plunify Cloud 是一款完全集成在 Vivado 界面的 FPGA 云平台,点击这里了解详情。

文章来源: Plunify社区FPGA设计优化