边缘 AI 推理:用 Vitis 将模型部署到 FPGA
在边缘 AI 推理项目中,常面临 GPU 功耗过高或云端延迟过大的问题。转向 FPGA 后,借助 Xilinx(现 AMD)的 Vitis 统一平台,开发门槛显著降低。它允许通过 C/C++ 甚至 Python 描述算法,利用 高层次综合(HLS) 自动生成硬件电路,配合 Vitis AI 工具链 可实现从 TensorFlow/PyTorch 模型的一键量化与部署。
本文记录了在 Kria KV260 上实测 ResNet-50 的完整路径,INT8 量化后推理速度超过 1200 FPS,功耗约 5W。
为什么选择 FPGA 与 Vitis
传统 FPGA 开发涉及 Verilog、时序约束等,门槛较高。Vitis 平台改变了这一现状,支持使用高级语言描述算法。Vitis AI 工具链专为深度学习推理优化,支持 Zynq SoC 或 Alveo 加速卡。这意味着只要掌握模型训练,即可将其转化为硬件加速引擎。
部署流程详解
整个流程分为环境搭建、模型导出、量化校准、编译生成及板端运行五个阶段。
环境准备
版本兼容性是关键。建议配置如下:
- 主机系统:Ubuntu 20.04
- Vitis 版本:2023.1
- Vitis AI:3.0
- 目标平台:Kria KV260 SOM
安装顺序需注意:先安装 Vivado/Vitis,勾选'Vitis Embedded Development',再配置 Vitis AI Docker 镜像。
docker pull xilinx/vitis-ai:latest
docker run -it --gpus all --rm --name vitis-ai \
-v /path/to/your/model:/workspace \
xilinx/vitis-ai:latest
⚠️ 注意:务必确认 XRT(Xilinx Runtime)、DPU 固件和 Vitis 版本匹配,否则
.xclbin加载可能失败。
模型导出为 ONNX
假设已有一个训练好的分类模型(如 MobileNetV2),需将其转换为中间格式。
import torch
import torchvision
# 加载预训练模型
model = torchvision.models.mobilenet_v2(pretrained=True)
model.eval()
# 构造 dummy input
dummy_input = torch.randn(1, 3, 224, 224)
# 导出 ONNX
torch.onnx.export(
model, dummy_input, "mobilenet_v2.onnx",
input_names=["input"], output_names=["output"],
opset_version=13, do_constant_folding=True
)
关键点:opset_version=13 是为了兼容 Vitis AI 对动态 shape 的支持;确保所有操作都是静态图可追踪的,避免 Python 控制流。

