当前位置:首页 > 新闻资讯 > FPGA之家动态 >

如何将TensorFlow代码转换到FPGA上(一)

时间:2024-07-11      来源:网络搜集 关于我们 0

当今时代人工智能技术越来越火,同时也带动了周边各种技术的发展,各个应用场景的算法论文层出不穷,对应的商用产品也是越来越丰富,这些技术也逐渐的走进了普罗大众的生活中。

算法和数据固然是人工智能的基础,但是要实现应用当然不能缺少好用的工具和框架,目前开源的框架也非常多,主流的有:TensorFlow、Pytorch、Caffe2、MXNet等,这些框架主要做的事情是标准化算法实现的流程和提供大量的数值计算SDK。

有了这些框架实现一个复杂的CNN网络可能只需要不到100行代码,这就极大的提升了算法实现和结果验证的生产效率,同时提升了算法迭代更新的速度。

人工智能与算法

那FPGA可以用来做什么呢?

当然是用来做推理了。虽然模型单次推理的算力要求并不是很高,但是同一模型在不同终端上总的推理次数是无穷大的,相比于这个模型的训练算力来说那就非常大了,毕竟训练只有一次。在很多嵌入式智能终端中, FPGA具备低延时、低功耗、可更新迭代算法的特性,非常适合推理加速。

现在整个FPGA行业遇到最大的问题是如何快速开发智能算法到FPGA中,而且还能有很不错的性能提升。

为了解决这个问题,很多公司都设计了自己的FPGA开发工具链,基本都是收费且和自己的FPGA产品绑定使用。上一篇文章我们提到的HLS工具,基本可以做到降低FPGA开发难度的作用,但是应用到人工智能领域来说,还是不够的。因为很多HLS工具只支持原生的C,很多库是不支持的,而且开发时也要考虑FPGA的特性。

如果要开发一个智能算法,所有前面提到的智能框架里的实现都需要重新开发,这个工作量是非常大的,而且难度也非常高,要求对数值计算,智能算法等非常了解,而且还要考虑硬件特性,考虑统一设计统一封装SDK等。

FPGA开发工具

如何解决这一问题呢?

我们详细调研了Legup工具,Legup+LeFlow是开源的研究性质的HLS工具,支持将TensorFlow的代码转换到FPGA中,不过也有一定的局限性,难以支持较大的网络和复杂的算子。

本文主要是在之前调研的基础上,展示在HLS领域的开源项目,并利用该开源项目快速将TensorFlow的模型转换到FPGA中,只适用于技术研究,不适用于生产。

LeFlow是哥伦比亚大学开源用于学术研究的工具,它是基于Legup-4.0和TensorFlow-1.6版本的一个插件,做了一些适配的实现和开发,将TensorFlow和Legup无缝对接。目的是将TensorFlow代码转换成FPGA需要的Verilog代码。

从下图来看,它主要工作是将Legup原有的C Compiler部分替换成了TensorFlow XLA + LeFlow。

Legup+LeFlow

LeFlow原理

XLA是TensorFlow的性能优化项目,将一些常用的算子进行编译优化,以用来提升算法的训练效率。它本质是一个LLVM的python前端,但是只是针对TensorFlow的部分算子做的开发。

而LeFlow针对这两个工具都做了适配开发,主要工作如下:

处理XLA编译完之后生成的IR文件,添加输入param和temps参数,适配legup需要的输入输出。

提取输入和输出寄存器,并将它们声明为全局变量,从而使.mif文件在内容发生更改时能计算出正确的结果。

使用XLA未优化的IR版本,因为优化过的版本很多函数依赖已经变了,无法进行抽取处理。

修改Legup无法支持的矢量化编译逻辑,这部分是直接修改了TensorFlow的源码,因此目前只能适配TensorFlow-1.6版本,需要重新编译。

对XLA输出的IR进行优化,比如删除循环中某些代码,将引用转换为标量等等。

 支持的算子有哪些呢?

前面提到了,LeFlow有较大的局限,只支持常用的算子,这些算子包括:

矩阵的乘加(matmul,add)

卷积(conv2d)

池化(max_pool)

relu

softmax

sigmoid

reshape

其他如BN(batch_normalization),separable_conv2d,目前测试来看是不支持的。

而且对于大的矩阵乘法也是不能支持的,比如1*1024乘以1024*100,这种会直接报错。

本小节主要介绍了目前FPGA软件开发的基本情况和面临的问题,讲解了LeFlow开源工具的作用和基本的使用方式。下一小节我们将详解如何利用该开源项目快速将TensorFlow的模型转换到FPGA中。

作者简介

杨振宇,海云捷迅资深系统架构师,成都信息工程大学计算机应用技术硕士研究生毕业,10余年软件开发和架构经验,熟悉Linux,OpenStack,Kubernetes,Docker等开源技术并具有开源社区贡献经历,在云计算、人工智能、物联网等技术领域有较深的研究和丰富的一线开发经验。

F

P

G

A

在线培训

英特尔FPGA中国创新中心推出“FPGA在线培训”(点击阅读原文即可报名),将为FPGA开发和爱好者、有意向开拓新技能领域的人员提供一种高效、实惠的学习途径。

培训注重课程内容的专业性和系统性,在教学内容上以FPGA基础知识和开发设计为主,包含了英特尔的先进技术与产品案例,讲解了基于英特尔的SOPC、HLS以及OpenCL异构开发等技术,帮助学员夯实基础,探寻FPGA在更广泛领域的应用。

推荐阅读

1.技术解读| 开源HLS工具Legup-4.0介绍(二)

2

FPGA 在深度神经网络当中的应用(三)

3

SRIO 在某无线通信系统中的应用(二)


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言