BUAA-FPGA多核并行计算-Exp2-2
本系列是北航计算机学院于 2024 年春季学期开设的一般专业课《FPGA多核并行计算》课程的实验报告记录,由于学习过程中掌握并不牢靠,如有错误请读者不吝赐教!
PYNQ与深度学习
实验说明与实验相关内容上传在 Github 仓库中。实验过程中使用到的环境与程序:
实验分析
配置QNN实验环境
任务说明:了解FPGA平台所能运行的神经网络类型(BNN、QNN)
首先将 QNN-MO-PYNQ 以及 darknet 两个压缩包上传至开发板的 jupyter 开发环境。然后按照实验说明的要求实现拷贝文件与配置文件修改的操作;其中 darknet 压缩包需解压至 QNN-MO-PYNQ 的内部,配置文件需要注释检查 PLATFORM 的三处代码(位于),并将 git clone
的相关指令删除。
拷贝
rapidjson
到qnn/src/library
目录下cp -r QNN-MO-PYNQ-master/library/rapidjson QNN-MO-PYNQ-master/qnn/src/library
修改配置文件 QNN-MO-PYNQ-master/setup.py
、QNN-MO-PYNQ-master/qnn/
下 dorefanet.py
、tineryolo.py
的 PLATFORM 检查代码并设定为 PLATFORM = pynqZ1-Z2
配置完成后进入 QNN-MO-PYNQ-master/qnn/src/network
目录执行 make lib_hw
指令生成 lib_hw.so
库文件,并将其转移至库文件的目录中。
cd QNN-MO-PYNQ-master/qnn/src/network |
最后对根目录中的 setup.py
执行安装操作即可完成 QNN 实验环境的配置。
$ python3 setup.py install |
使用Tiny-Yolo进行目标检测
任务说明:掌握 PYNQ 平台下 Tiny-Yolo 网络的基本搭建方法
直接使用 QNN-MO-PYNQ-master/qnn/notebooks 下的 tiny-yolo-image.ipynb
文件进行处理,对随机取出的图片进行物体识别,在调用库的过程中出现了 No such file of directory
的错误,进入 python 的 dist-package 中进行核查,发现原本调用 qnn
的目录变为 gnn_loopback-0.1-py3.6.egg/qnn
,在代码中全部对路径的引用进行修改即可正常运行。
执行后的返回结果如下:
class: car probability: 86% |
实验思考
自行下载调试 BNN 环境,完成 notebooks/CNV-BNN_Cifar10.ipynb 的实验结果
从 BNN 官方仓库中获取 BNN-PYNQ 代码并上传并解压至开发板的 jupyter notebook 环境中。仿照 QNN-PYNQ 的安装思路,修改 setup.py 以及 bnn/bnn.py 中对于开发板 PLATFORM 的判定,然后在项目根目录运行 python3 setup.py install
即可安装 BNN 环境。安装完成后即可对 CNV-BNN_Cifar10.ipynb 的内容进行运行验证
Inference took 527.00 microseconds |
根据配置构建比特流文件
下面的操作将回到远程桌面中执行。
依赖文件安装
同样地,在远程桌面中解压BNN-PYNQ项目,并修改其PLATFORM的判定过程,完成项目的基本配置。然后根据实验说明,分别从xilinx-tiny-cnn和 finn-hlslib 获取了必备的依赖文件,文件的放置路径如下:
xilinx-tiny-cnn:${XILINX_BNN_ROOT}/xilinx-tiny-cnn/" |
配置环境变量
首先在终端中打开 ~/.bashrc
进行环境变量的修改,在文件末尾添加两行:
XILINX_BNN_ROOT=~/Desktop/BNN-PYNQ-master/qnn/src |
添加过后使用 source ~/.bash_rc
对环境变量进行更新,如果能正确 echo 对应路径则说明环境变量添加成功
运行脚本制作镜像
在运行脚本前先参考了实验说明以及指向的补丁说明,在 Vivado 的安装路径中执行了补丁 python 脚本,完成了漏洞修复,解决了 ip 导出失败的问题。
cd BNN-PYNQ-master/qnn/src/network/output |
然后再运行脚本制作镜像,在制作的过程中出现了众多输出,其中可以注意到制作过程中的部分 log 输出路径,这正好也是实验报告需提交内容的一部分:
最终等待镜像制作结束,本次实验的所有内容就完成了。
实验总结
实验过程中,主要出现的问题分为两类:一类关于开发板的环境处理,另一类关于远程桌面的管理。
首先在完成训练1时就出现了文件上传、解压的问题,对jupyter notebook的不熟练导致在将文件加载到开发板训练环境中时延误了大量时间,其次在开发板上对终端的使用也不熟练,对工作目录的划分不明确。
本次实验直至思考题2才使用远程桌面的开发环境作为实验环境,但其中的环境配置和错误处理也占了实验时间的相当大一部分;而且这次实验图方便没有将文件存放在持久化目录下,下次实验开始会注意对实验数据进行保存,以防出现实验进度、结果丢失的情况,感谢在实验课上提醒我的助教学长!
本次实验实现了将QNN、BNN环境通过PYNQ部署到FPGA开发板的整个过程,并实现了Tiny-Yolo的基本识别流程,完成了深度学习相关代码从PC机迁移到FPGA设备上的操作。FPGA虽然硬件算力与PC相差较多,但出乎意料的是,从Tiny-Yolo的使用情况来看,模型训练后应用的实际效果并没有下滑太多,仍然能够进行基本的图像识别功能,这也体现了FPGA在并行加速方面的优势。
实验2-2:PYNQ与深度学习
- 实验说明文档见 Github 仓库