第二章:开发环境搭建
说实话,搭建开发环境这事儿,看着简单,但坑是真不少。我见过太多人卡在这一步,折腾好几天都跑不起来。今天我就把经验掰开了揉碎了讲给你听。
2.1 安装Xilinx Vitis
先说说Vitis。这东西说白了就是Xilinx的统一开发平台,集成了SDK、HLS、Vivado这些工具。我个人习惯用2021.1版本,稳定,踩过的坑少。
安装步骤其实不复杂:
- 去Xilinx官网下载Vitis安装包(大概20GB左右)
- 运行安装程序,选择Vitis + Vivado + HLS三个组件
- 安装路径别带中文和空格,这是老生常谈了
- 等...大概1-2小时,取决于你的网速和硬盘速度
嗯,这里有个小技巧。安装时选「Custom」模式,只勾选你需要的器件型号。全选的话,安装包能到100GB+,没必要。我一般只选Zynq和Kintex系列,够用了。
2.2 配置FINN环境
FINN环境配置,说白了就是让Python能找到Vitis的库和工具链。这里我踩过不少坑,一个个说。
2.2.1 安装依赖
先确认你的Python版本。FINN要求Python 3.8或3.9,别用3.10以上,有些库不兼容。
# 创建虚拟环境,我习惯用conda
conda create -n finn_env python=3.8
conda activate finn_env
# 安装基础依赖
pip install --upgrade pip
pip install numpy onnx onnxruntime
pip install pynq xrt
2.2.2 设置环境变量
这是最容易出问题的地方。Vitis安装完后,需要手动设置环境变量,让FINN能找到Xilinx的工具链。
# 在~/.bashrc或~/.zshrc中添加
export XILINX_XRT=/opt/xilinx/xrt
export XILINX_VIVADO=/tools/Xilinx/Vivado/2021.1
export XILINX_HLS=/tools/Xilinx/Vitis_HLS/2021.1
export PATH=$XILINX_XRT/bin:$XILINX_VIVADO/bin:$XILINX_HLS/bin:$PATH
export LD_LIBRARY_PATH=$XILINX_XRT/lib:$LD_LIBRARY_PATH
# 别忘了source一下
source ~/.bashrc
为什么会这样?因为FINN在编译和部署时,需要调用Vivado做综合布局布线,调用Vitis_HLS做高层次综合。找不到路径,它就罢工。
2.2.3 克隆FINN仓库
git clone https://github.com/Xilinx/finn.git
cd finn
pip install -e .
这里有个坑。FINN的master分支可能不太稳定,我建议用release版本。比如v0.7或v0.8,这些版本经过充分测试,问题少。
2.3 验证安装
环境配好了,怎么知道对不对?跑个简单的测试用例。
# 进入FINN目录
cd finn
# 运行一个简单的测试
python -m pytest tests/test_brevitas_export.py -v
# 或者跑一个完整的端到端示例
cd examples/notebooks
jupyter notebook end2end_example.ipynb
如果看到类似这样的输出,说明环境没问题:
============================= test session starts ==============================
collected 5 items
tests/test_brevitas_export.py::test_export_mlp PASSED [ 20%]
tests/test_brevitas_export.py::test_export_cnv PASSED [ 40%]
...
============================= 5 passed in 12.34s ==============================
- Python能导入finn包(import finn)
- Vivado能正常启动(vivado -version)
- Vitis_HLS能正常编译(vitis_hls -version)
- XRT驱动能识别设备(xbutil examine)
2.4 常见环境问题排查
这部分我花点时间细讲。因为环境问题占了FINN学习曲线的大头,至少70%的报错都跟环境有关。
问题1:找不到Vivado或Vitis_HLS
现象: 运行FINN时提示「vivado: command not found」
原因: 环境变量没设对,或者没source
解决: 检查环境变量路径是否正确。我习惯用which vivado来确认。如果返回空,说明路径有问题。
# 检查Vivado是否在PATH中
which vivado
# 如果返回空,手动指定路径
export PATH=/tools/Xilinx/Vivado/2021.1/bin:$PATH
问题2:Python版本不兼容
现象: 安装FINN时提示「Python 3.10 is not supported」
原因: FINN对Python版本有硬性要求
解决: 用conda创建3.8或3.9的环境。别想着硬改代码,我试过,最后发现改的代码比写的还多。
问题3:ONNX Runtime版本冲突
现象: 运行测试时提示「ONNX Runtime version mismatch」
原因: FINN依赖特定版本的ONNX Runtime
解决: 查看FINN的requirements.txt,安装指定版本。
pip install onnxruntime==1.12.0
问题4:XRT驱动问题
现象: 部署到FPGA时提示「No Xilinx device found」
原因: XRT驱动没装好,或者设备没插好
解决: 先检查硬件连接,再确认驱动加载。
# 检查XRT驱动状态
lsmod | grep xrt
# 如果没加载,手动加载
sudo modprobe xrt
问题5:内存不足
现象: Vivado综合时崩溃,提示「Out of memory」
原因: FINN编译大模型时,Vivado需要大量内存
解决: 至少16GB内存,建议32GB。如果不够,可以调整Vivado的并行度。
# 限制Vivado使用的线程数
export VIVADO_NUM_JOBS=2
2.5 我的个人建议
说了这么多,总结几条实在的:
- 用Docker:Xilinx官方提供了FINN的Docker镜像,省去环境配置的麻烦。我后来基本都用Docker,省心。
- 备份环境:配好环境后,用conda export导出环境配置。万一搞坏了,一键恢复。
- 别用Windows:FINN在Windows上支持很差,建议用Ubuntu 20.04或18.04。我见过有人在Windows上折腾一周,最后换Linux半天搞定。
好了,环境搭建就讲到这里。下一章我们开始真正动手,写第一个FINN自定义算子。到时候你会发现,环境配好了,后面的路就好走多了。