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 对这两个版本支持最好)。
安装步骤:
- 去 Xilinx 官网下载 Vivado HLx 安装包(选 WebPACK 版本就够用,别浪费钱买企业版)。
- 运行安装脚本,一路默认即可。但记得勾选 “Vivado HL Design Edition” 和 “Vivado HL WebPACK”。
- 安装完成后,设置环境变量:
source /tools/Xilinx/Vivado/2022.2/settings64.sh
我曾经在安装时忘了加这个环境变量,结果 FINN 死活找不到 Vivado,折腾了一下午才发现是路径没配好。避坑指南:把这句话加到你的 .bashrc 里,一劳永逸。
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
嗯,看到这个就说明环境没问题了。
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 模型了。