本文我们将使用 OpenCL 作为工具,介绍 FPGA 如何进行深度学习神经网络的计算(推理)加速。
本章节,将使用 Tensorflow 作为深度学习框架搭建一个简单的全连接神经网络,使用 Mnist 手写体数字图片数据集进行模型训练,最后使用 OpenCL 调用FPGA,对训练的结果进行推理加速。本章节内容基于 Linux(CentOS7.4)操作环境。
01环境搭建
深度学习神经网络的训练需要使用 Python 和 Tensorflow,推荐使用 Python3 和 VirtualEnv 作为标准配置,防止对操作系统造成污染。下面简要展示 Python3 和 Tensorflow 环境的搭建。
接下来,我们需要安装 OpenCL 的开发环境。由于我们使用的是 Intel® Arria® 10 FPGA 作为 OpenCL 的设备,因此,需要安装 Intel 提供的对应的SDK。
点击“资料”,下载SDK并按照安装包提供的信息进行安装即可。
02算法描述
1.Mnist 数据集每张图片为 28×28 像素,将每张图片的像素点作为输入
2.第一个隐藏层设置 500 个神经元,与输入图像的 784 个像素点做计算(矩阵乘法)
3.将得到的结果使用 relu 函数进行结果,只保留数值 >0 的结果,其他的设置为 0
4.第二个隐藏层设置 10 个神经元,与第一个隐藏层的输出进行计算(矩阵乘法),最终得到 10 个结果作为输出
从上述的算法描述当中,我们可以看到实际上就是几次矩阵的计算过程:一个 [1,784] 和 [784, 500] 的矩阵乘法,得到一个 [1,500] 的中间矩阵;然后这个 [1,500] 的中间矩阵与 [500, 10] 的矩阵进行计算,最终得到一个 [1,10] 的矩阵,这个就是我们的最终结果。
根据以上的算法描述,我们使用 OpenCL 进行神经网络的算法的实现。
全连接神经网络的实现,首先要通过 Tensorflow 搭建神经网络,并对其进行训练,训练之后会得到模型文件。随后再通过一定的方式,对这些模型文件进行操作,将模型参数提取出来,当作输入的参数,送入到 FPGA 当中进行加速计算,实现推理过程。
上述神经网络算法的 OpenCL 实现,大致如下:
图 2-1 神经网络算法的OpenCL实现
随后对该算法进行编译,生成必要的aocx二进制文件,才可放到 FPGA 上进行执行。
04 验证 OpenCL 算法实现
完成 OpenCL 算法实现后,需要使用C/C++编写CPU程序,与 FPGA 进行交互,来验证 OpenCL 算法实现的正确性。
可以看到,推测的结果是数字 2,我们成功的使用 OpenCL 在 Intel FPGA上实现了一个简单的神经网络的推理加速。
张家龙,海云捷迅资深架构师,10余年开发和架构经验,对Linux、云计算、虚拟化、人工智能与深度学习,及人工智能算法有深入研究和见解,并在云计算和人工智能方面具备丰富的开发和实战经验。