2. 环境搭建:安装PyTorch、Vivado、FINN、Docker,配置开发环境

说实话,环境搭建这一步,往往是整个课程里最磨人的环节。我见过太多人卡在这一步,还没开始写代码就放弃了。别急,咱们一步步来。

我个人习惯把环境分成三层:软件层(PyTorch)工具链层(Vivado + FINN)容器层(Docker)。这三层各司其职,缺一不可。

2.1 安装PyTorch:你的模型起点

PyTorch 是咱们训练模型的主力。你想想看,没有它,后面的 FINN 部署就是无米之炊。

推荐版本:PyTorch 1.13 或 2.0+(我建议用 2.0,因为它的编译优化对后续量化部署更友好)。

安装命令(以 CUDA 11.8 为例):

pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118

嗯,这里要注意:千万别装 CPU 版本。我在项目中遇到过有人装错了版本,训练时才发现 GPU 根本没用上,白白浪费半天时间。

小技巧:装完后跑一句 print(torch.cuda.is_available()),如果返回 True,说明环境没问题。

2.2 安装Vivado:FPGA的“编译器”

Vivado 是 Xilinx 家的工具,说白了就是把你的神经网络“翻译”成 FPGA 能跑的电路。这个安装过程比较重,我建议你留出至少 30GB 的磁盘空间。

版本选择:Vivado 2022.2 或 2023.1(FINN 对这两个版本支持最好)。

安装步骤:

  1. 去 Xilinx 官网下载 Vivado HLx 安装包(选 WebPACK 版本就够用,别浪费钱买企业版)。
  2. 运行安装脚本,一路默认即可。但记得勾选 “Vivado HL Design Edition”“Vivado HL WebPACK”
  3. 安装完成后,设置环境变量:
source /tools/Xilinx/Vivado/2022.2/settings64.sh

我曾经在安装时忘了加这个环境变量,结果 FINN 死活找不到 Vivado,折腾了一下午才发现是路径没配好。避坑指南:把这句话加到你的 .bashrc,一劳永逸。

注意:Vivado 安装包很大(约 20GB),下载时建议用有线网络。我试过用 Wi-Fi 下载,中途断了三次,心态差点崩了。

2.3 安装Docker:隔离环境的神器

FINN 官方推荐用 Docker 来跑。为什么?因为 FINN 的依赖太复杂了——Python 版本、ONNX 版本、Vivado 版本……稍有不对就报错。Docker 能帮你把这些乱七八糟的东西都打包好。

安装 Docker Engine:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

装完后,记得把当前用户加到 docker 组里,不然每次都要 sudo:

sudo usermod -aG docker $USER

然后注销重新登录,让组权限生效。

验证:运行 docker run hello-world,如果看到 “Hello from Docker!”,说明安装成功。

2.4 安装FINN:从PyTorch到FPGA的桥梁

FINN 是 Xilinx 开源的神经网络编译器。它的核心思想是:把你的 PyTorch 模型转成 ONNX,然后编译成 FPGA 的比特流。

拉取 FINN Docker 镜像:

docker pull xilinx/finn:latest

这个镜像里已经包含了 FINN 的所有依赖,包括 PyTorch、ONNX、Vivado 的库文件。你想想看,省了多少配置的功夫。

启动 FINN 容器:

docker run -it --rm -v /path/to/your/project:/workspace xilinx/finn:latest /bin/bash

这里 -v 参数是把你的项目目录挂载到容器里,这样你在容器里改代码,宿主机也能看到。

我个人习惯在容器里再装一个 tmux,方便同时开多个终端窗口。命令很简单:

apt-get update && apt-get install -y tmux

2.5 验证环境:跑一个最小示例

环境搭好了,咱们得验证一下。我建议你跑一个 FINN 自带的示例:

cd /workspace/finn
python run.py --model=cnv-w1a1 --target=zynq-zedboard

这个命令会编译一个 1-bit 量化的卷积网络,并生成比特流。如果一切顺利,你会看到类似这样的输出:

INFO: FINN compiler finished successfully.
Bitstream generated: /workspace/finn/outputs/cnv-w1a1.bit

嗯,看到这个就说明环境没问题了。

重要提醒:第一次编译可能会比较慢(30分钟到1小时),因为 Vivado 要跑综合和布局布线。别急,去喝杯咖啡,回来就好了。

2.6 常见问题与避坑

问题 原因 解决方法
Docker 拉取镜像超时 网络问题 换国内镜像源,比如阿里云、中科大
Vivado 找不到 license 环境变量没配好 检查 XILINXD_LICENSE_FILE 是否指向 license 文件
FINN 报错 “ONNX version mismatch” ONNX 版本不兼容 用 FINN 镜像自带的 ONNX,别自己装
PyTorch 无法调用 GPU CUDA 版本不对 nvidia-smi 查看驱动版本,再装对应的 PyTorch

我曾经在 FINN 的 ONNX 版本上踩过一个大坑。当时我自己装了个 ONNX 1.14,结果 FINN 内部用的是 1.12,两个版本不兼容,报了一堆莫名其妙的错误。后来我学乖了:永远用 FINN 镜像里的依赖,别自己瞎升级

2.7 总结

环境搭建这一步,说白了就是“磨刀不误砍柴工”。你花半天时间把环境配好,后面跑模型、调参数、部署到 FPGA,都会顺畅很多。

我个人建议你把每一步的安装命令都记下来,或者干脆写个脚本。下次换机器时,一键执行,省时省力。

好了,环境搭好了,下一章咱们就开始动手写第一个 FINN 模型了。