第二章:开发环境搭建

好,咱们正式开始动手。这一章我带你把FINN的开发环境搭起来。说实话,环境配置往往是整个流程里最磨人的环节——我见过不少同学卡在这一步好几天。别急,按我的步骤来,稳得很。

2.1 安装Vivado

Vivado是Xilinx的FPGA开发套件,FINN依赖它做综合和实现。我个人习惯用Vivado 2020.1或2021.1版本,这两个版本跟FINN的兼容性最好。

注意:千万别装太新的版本(比如2023.x),FINN的某些脚本可能不兼容。我踩过这个坑,折腾了两天才发现是版本问题。

安装步骤其实很简单:

  1. 去Xilinx官网下载Vivado HLx安装包(建议选WebPACK版,免费够用)
  2. 运行安装程序,选择安装路径——记住,路径里不要有中文和空格
  3. 勾选“Vivado”和“Vitis”组件,其他按需选
  4. 等它装完,大概需要30-60分钟,取决于你的网速和硬盘

装完后,打开Vivado试试。能正常启动,看到欢迎界面,就算成了。

2.2 安装XRT

XRT是Xilinx Runtime,说白了就是FPGA和主机之间的通信桥梁。FINN生成的加速器要靠它来跑。

安装XRT前,先确认你的操作系统。我推荐Ubuntu 18.04或20.04,这两个系统支持最全。如果你用CentOS或RHEL,也行,但命令会略有不同。

小技巧:我个人习惯用Ubuntu 20.04,因为它的包管理更友好,踩坑少。

安装命令如下:

# 下载XRT deb包(以Ubuntu 20.04为例)
wget https://www.xilinx.com/bin/public/openDownload?filename=xrt_202110.2.11.634_20.04-amd64-xrt.deb

# 安装
sudo apt update
sudo apt install ./xrt_202110.2.11.634_20.04-amd64-xrt.deb

# 验证安装
xbutil validate

运行xbutil validate后,如果看到类似“Device 0: PASS”的输出,说明XRT装好了。如果报错,别慌——大概率是驱动没加载。重启一下系统,或者手动加载驱动:

sudo modprobe xclmgmt
sudo modprobe xocl

2.3 配置FINN环境

FINN环境配置,说白了就是装Python依赖和克隆代码仓库。FINN官方推荐用Anaconda管理Python环境,我建议你也这么干——省心。

先装Anaconda(如果还没装的话):

# 下载Anaconda安装脚本
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh

# 运行安装
bash Anaconda3-2023.03-Linux-x86_64.sh

# 按提示操作,最后source一下
source ~/.bashrc

然后创建FINN的虚拟环境:

conda create -n finn_env python=3.8
conda activate finn_env

克隆FINN仓库并安装依赖:

git clone https://github.com/Xilinx/finn.git
cd finn

# 安装Python依赖
pip install -r requirements.txt

# 安装FINN本身
pip install -e .
注意:安装过程中可能会遇到一些包的版本冲突。我遇到过onnxprotobuf版本不匹配的问题。解决办法是手动指定版本:
pip install onnx==1.12.0 protobuf==3.20.3

装完后,设置环境变量。把下面这行加到~/.bashrc里:

export FINN_ROOT=/path/to/your/finn

然后source ~/.bashrc让它生效。

2.4 验证安装是否成功

环境搭好了,得验证一下能不能用。FINN自带了一个简单的测试脚本,咱们跑一下看看。

先激活环境:

conda activate finn_env

然后运行测试:

cd $FINN_ROOT
python -m pytest tests/end2end/test_1_single_layer.py -v

这个测试会编译一个单层的神经网络加速器。如果一切顺利,你会看到类似这样的输出:

============================= test session starts ==============================
platform linux -- Python 3.8.10, pytest-7.2.0, pluggy-1.0.0
rootdir: /home/user/finn
collected 1 item

tests/end2end/test_1_single_layer.py::test_single_layer PASSED           [100%]

============================== 1 passed in 120.32s ==============================

看到“PASSED”三个字,恭喜你——环境搭好了!

小提示:第一次跑测试会比较慢,因为FINN要下载一些预编译的IP核和模型文件。我建议你找个网速好的时候跑,或者提前把依赖下载好。

如果测试失败,别急。常见问题有:

  • Vivado路径没设置:检查vivado命令能不能在终端里直接运行。不能的话,把Vivado的bin目录加到PATH里。
  • XRT版本不匹配:用xbutil version查看版本,确保跟FINN要求的版本一致。
  • Python包冲突:重新创建一个干净的conda环境,按顺序安装依赖。

嗯,到这里环境搭建就完成了。下一章咱们开始动手设计第一个FINN加速器——一个简单的二值神经网络。到时候你会看到,FINN到底有多强大。

对了,如果你在搭建过程中遇到任何问题,欢迎随时交流。我微信是deep3321,公众号是“蓝海资料掘金营”。咱们一起把FINN玩透。