本系列是北航计算机学院于 2024 年春季学期开设的一般专业课《FPGA多核并行计算》课程的实验报告记录,由于学习过程中掌握并不牢靠,如有错误请读者不吝赐教!

使用FPGA加速编译后的深度学习模型

实验分析

本实验依赖实验 3.2 所配置的宿主机、远程 FPGA 的 TVM-09c 环境,并以成功编译后的设备环境为基准进行后续实验。

启用 TVM 环境

虽然我们已经编译了 tvm 的 .so 文件,但在再次使用前仍需配置其环境变量与路径(宿主机和远程 FPGA 均需要),宿主机的配置参考如下:

export TVM_HOME=<tvm root>
export PYTHONPATH=$TVM_HOME/python:$TVM_HOME/topi/python:$TVM_HOME/vta/python:${PYTHONPATH}
export PATH=<gcc home>bin:<llvm home>/bin:$PATH
export LD_LIBRARY_PATH=<llvm home>/lib
export MANPATH=<gcc home>/share/man:$MANPATH

此时宿主机可以在 python 文件中正常 import tvm 实现 tvm 的引入。

远程开发板也需要配置相应的变量:

export TVM_HOME=<tvm root>
export PYTHONPATH=$TVM_HOME/python:$TVM_HOME/vta/python:$TVM_HOME/topi/python:${PYTHONPATH}
export VTA_HW_PATH=$TVM_PATH/3rdparty/vta-hw

此时远程开发板应该能够启动 RPC 服务器,请注意需要修改启动脚本 start_rpc_server.sh 中启动的服务端口以满足课程实验平台的需求:

cd /path/to/tvm/apps/vta_rpc
vim start_rpc_server.sh
./start_rpc_server.sh

最后一行中修改服务端口:

python3 -m vta.exec.rpc_server --port 9091

执行后服务器就已启动在正确端口,可以从宿主机进行访问了

root@PYNQ-19:/home/xilinx/jupyter_notebooks/tvm-09c55fd1f3354d2280bb792a252590ac6bd68e58/apps/vta_rpc# ./start_rpc_server.sh
INFO:RPCServer:bind to 0.0.0.0:9091

设置并运行深度学习模型

环境准备就绪后需要对模型文件作出适当修改,修改细节可见实验总结部分

在环境变量中配置 VTA_PYNQ_RPC_HOSTVTA_PYNQ_RPC_PORT 后即可运行脚本进行连接

image-20240508202035567

此刻的开发板:

image-20240508205340955

环境启动后,后续远程开发板加载了 bit 文件执行并返回了结果,结果图像:

image-20240508202355751

实验流程结束

实验总结

总结过程中遇到的报错和重要问题:

  • OSError: libRemarks.so.9: cannot open shared object file: No such file or directory:动态库链接失败

    • 解决方法:配置 export LD_LIBRARY_PATH=<llvm root>/lib
    • 宿主机配置文件见仓库文件 .bashrc
  • VTA 服务即使指定了 --port 9091 后也无法运行在 9091 端口

    • 解决方法:netstat -nltp 查询端口占用情况,发现 9091 端口被服务占用,结束进程释放端口
  • deploy_detection.py 文件做出的修改:

    • 将连接 Github 仓库获取文件的路径改为本地已经提供的文件路径(yolov3-tiny.cfgyolov3-tiny.weightslibdarknet2.0.sococo.namesarial.ttfperson.jpg
    • 程序不展示图片,直接保存为文件
    # plt.imshow(img.transpose(1, 2, 0))
    plt.imsave("./boxed.jpg", img.transpose(1, 2, 0))