第二章:开发环境搭建——Vivado安装、FINN源码编译、Python虚拟环境配置、Docker部署
好,咱们直接进入正题。这一章说白了就是“磨刀不误砍柴工”。你想想看,后面所有多核CNN的部署实验,都得靠这一章搭好的环境来跑。我见过太多同学卡在环境上,一卡就是两三天,心态直接崩了。所以这一章,咱们稳扎稳打,把四个核心环节一一搞定。
2.1 Vivado安装:别踩这个坑
Vivado是Xilinx家的看家工具,也是咱们把FINN生成的网络映射到FPGA上的必经之路。我个人习惯用Vivado 2020.1或2021.1版本,因为FINN对这两个版本的兼容性最好。
安装步骤其实不复杂,但有几个关键点要注意:
- 下载安装包:去Xilinx官网下载Vivado HLx,选“WebPACK”或“Design Edition”都行。记得勾选“Vivado HL System Edition”和“Vitis Application Development”。
- 安装路径:不要有中文和空格。我习惯放在
C:\Xilinx\Vivado\2020.1这种路径下。 - License配置:如果你用的是免费WebPACK版,安装完会自动激活。如果是企业版,记得把license文件放到
C:\Xilinx\Vivado\2020.1\licenses目录下。 - 环境变量:安装完成后,检查一下系统环境变量里有没有
XILINX_VIVADO这个变量,指向你的安装路径。没有的话手动加一个。
2.2 FINN源码编译:从GitHub到你的电脑
FINN是Xilinx开源的一个框架,专门用来把训练好的神经网络部署到FPGA上。说白了,它就是个“翻译官”——把PyTorch模型翻译成FPGA能懂的硬件描述语言。
源码编译这块,我建议你直接用Git克隆,别去下载zip包。为什么?因为FINN有很多子模块,zip包容易漏掉。
# 克隆FINN仓库
git clone https://github.com/Xilinx/finn.git
cd finn
# 初始化子模块(这一步很容易忘!)
git submodule update --init --recursive
# 安装依赖
pip install -r requirements.txt
# 编译FINN核心库
python setup.py install
嗯,这里要注意:git submodule update --init --recursive 这步不能省。我刚开始做的时候跳过了这步,结果编译到一半报错说找不到某个头文件,查了半天才发现是子模块没拉下来。
编译过程中如果遇到 protobuf 版本冲突,别慌。FINN对protobuf的版本要求比较严格,建议用3.20.x版本。你可以这样处理:
pip install protobuf==3.20.3
2.3 Python虚拟环境配置:隔离才是王道
做AI加速的人,电脑上通常装了一堆Python包——PyTorch、TensorFlow、ONNX、numpy……版本之间互相打架是常事。所以我强烈建议你为FINN单独建一个虚拟环境。
我个人习惯用 conda,因为它管理不同Python版本很方便。FINN目前推荐Python 3.8或3.9。
# 创建虚拟环境
conda create -n finn_env python=3.8
# 激活环境
conda activate finn_env
# 安装PyTorch(根据你的CUDA版本选择)
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html
# 安装其他依赖
pip install onnx onnxruntime numpy matplotlib
conda activate finn_env。我见过有同学在base环境里跑FINN,结果包冲突导致整个系统Python都崩了,最后重装了系统……别问我怎么知道的。
2.4 Docker部署:一劳永逸的方案
如果你觉得上面那些步骤太麻烦,或者你需要在不同机器上复现实验,Docker是最省心的方案。FINN官方提供了Docker镜像,里面Vivado、Python环境、FINN源码全都配好了。
你想想看,只要拉一个镜像,就能在任何Linux机器上直接跑FINN,多爽。
# 拉取FINN Docker镜像
docker pull xilinx/finn:latest
# 运行容器(记得挂载你的项目目录)
docker run -it --rm \
-v /path/to/your/project:/workspace \
-v /path/to/vivado:/opt/Xilinx/Vivado \
xilinx/finn:latest \
/bin/bash
这里有几个参数解释一下:
-v /path/to/your/project:/workspace:把你的项目目录挂载到容器里的/workspace,这样你在容器里改代码,宿主机也能看到。-v /path/to/vivado:/opt/Xilinx/Vivado:把宿主机上安装好的Vivado挂载进去。因为Docker镜像里没有Vivado,得用你本地的。--rm:容器退出后自动删除,保持环境干净。
2.5 验证环境是否搭好
环境搭完了,怎么知道对不对?跑一个最简单的测试:
# 进入FINN目录
cd finn
# 运行一个简单的测试用例
python run.py --test --model examples/single_layer_network.onnx
# 如果看到 "Test passed!" 字样,说明环境没问题
如果报错,别慌。99%的情况是以下三个原因之一:
- Vivado路径没配好:检查
XILINX_VIVADO环境变量。 - Python包版本冲突:用
pip list检查protobuf、onnx等包的版本。 - 子模块没拉全:重新执行
git submodule update --init --recursive。
好了,环境搭完,咱们就可以开始真正的多核CNN部署了。下一章我会带你跑通第一个FINN示例,看看一个简单的卷积网络是怎么一步步变成FPGA比特流的。