测评计划:
一、开箱报告,KV260通过网线共享PC网络
二、Zynq超强辅助-PYNQ配置,并使用XVC(Xilinx Virtual Cable)调试FPGA逻辑
三、硬件加速之—使用PL加速FFT运算(Vivado)
四、硬件加速之—使用PL加速矩阵乘法运算(Vitis HLS)
五、Vitis AI 构建开发环境,并使用inspector检查模型
六、Vitis AI 进行模型校准和来量化
七、Vitis AI 通过迁移学习训练自定义模型
八、Vitis AI 将自定义模型编译并部署到KV260中
铺垫
Vitis AI 是什么?
Vitis AI 是赛灵思公司推出的一款综合 AI 推断开发平台,它可以帮助开发者在赛灵思的 FPGA 和自适应 SoC 上实现高效的 AI 应用部署。它是一个强大而灵活的 AI 开发平台,它可以让您充分利用赛灵思硬件平台的优势,实现高性能、低功耗、低成本的 AI 解决方案。
Vitis AI 可以做什么?
Vitis AI 可以做很多事情,例如:
- 优化和编译深度学习模型,使其适应赛灵思硬件平台的架构和性能。
- 提供丰富的 AI 库,包括常用的计算机视觉和自然语言处理模型,以及相应的推断接口。
- 提供多种工具和框架,如 Vitis Model Composer, Vitis Video Analytics SDK, Vitis AI Optimizer 等,以支持不同层次的开发需求。
- 提供多种示例设计和教程,展示如何在赛灵思硬件平台上实现各种 AI 应用场景。
Visits AI 怎么用?
第一步:在ubuntu环境下,执行如下命令:
git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI
cd Vitis-AI
docker pull xilinx/vitis-ai-cpu:latest
第二步,可以使用了………完………
(^_^),当然不是这么简单,Vitis AI 不仅仅是一个工具,而是一个综合的 AI 推断开发平台,它包括了从模型优化到应用部署的全流程支持。需要做的不只是执行几条命令,还需要了解赛灵思硬件平台的特点,选择合适的模型和框架,使用 Vitis AI 提供的工具和库进行优化和编译,最后在目标设备上运行您的 AI 应用。这个过程可能会遇到一些挑战和困难,但也会带来很多乐趣和收获。
Xilixn官方对于构建Vitis AI环境有非常详细的说明,我主要参考这个链接:
https://xilinx.github.io/Vitis-AI/3.0/html/docs/install/install.html
这个链接介绍了如何在不同的操作系统和硬件平台上安装和配置 Vitis AI 的相关组件,包括 Vitis AI 优化器、Vitis AI 库、Vitis Model Composer 等。这些组件可以帮助我对深度学习模型进行优化和编译,以适应赛灵思硬件平台的架构和性能。
并且我并不打算使用GPU来优化模型(主要是我本地PC性能并不高),所以我直接使用CPU版本的Vitis AI docker来进行模型的量化、编译和部署。Vitis AI docker 是一个预先配置好的 Vitis AI 环境,它可以让我在一个容器中运行 Vitis AI 的所有工具和库,而不需要在本地安装任何依赖。CPU版本的Vitis AI docker 可以在没有 GPU 的机器上运行,但是模型优化的速度会比 GPU 版本慢一些。
实际上,我会选择通过云端的计算资源进行模型优化,这些云端资源都可以即用付费的,使用pytorch或者tensorflow原生的优化方法,最后使用Vitis AI来编译部署即可。这样我可以利用云端的强大的计算能力和灵活的扩展性,对模型进行更快速和更高效的优化。我可以使用 pytorch 或者 tensorflow 提供的一些优化技术,如剪枝、量化、蒸馏等,来减少模型的大小和复杂度。然后我可以使用 Vitis AI compiler来将优化后的模型转换为赛灵思硬件平台支持的格式,并生成相应的xmodel,来在目标设备上部署我的 AI 应用。
配置Vitis AI环境
安装Vitis AI确实非常简单,只需一条命令:
docker pull xilinx/vitis-ai-cpu:latest
只需等待docker镜像下载完毕,运行docker images即可查看所有docker镜像。
>> docker images
---
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 5 months ago 13.3kB
xilinx/vitis-ai-cpu latest 41ed5c7e3331 16 months ago 19.5GB
然后切换到Vitis AI目录,启动docker。
./docker_run.sh xilinx/vitis-ai-cpu:latest
看到如下画面,表示Vitis 安装完毕:
Setting up dong 's environment in the Docker container...
usermod: no changes
Running as vitis-ai-user with ID 0 and group 0
==========================================
__ ___ _ _ _____
\ \ / (_) | (_) /\ |_ _|
\ \ / / _| |_ _ ___ ______ / \ | |
\ \/ / | | __| / __|______/ /\ \ | |
\ / | | |_| \__ \ / ____ \ _| |_
\/ |_|\__|_|___/ /_/ \_\_____|
==========================================
Docker Image Version: 2.5.0.1260 (CPU)
Vitis AI Git Hash: 502703c
Build Date: 2022-06-12
接下来根据所使用的深度学习框架激活对应的环境,比如:
conda activate vitis-ai-pytorch
conda activate vitis-ai-tensorflow2
本文选择pytorch:
(vitis-ai-pytorch) Vitis-AI /workspace >
其实到这步,Vitis AI的环境就算配置完毕了,但为了更方便使用Vitis AI,本文再安装一个Jupyter Lab的server,这样我们后续使用Vitis AI会非常方便。
(vitis-ai-pytorch) Vitis-AI /workspace > jupyter --version
---
Selected Jupyter core packages...
IPython : 7.33.0
ipykernel : 6.13.1
ipywidgets : 7.7.0
jupyter_client : 7.3.4
jupyter_core : 4.10.0
jupyter_server : not installed
jupyterlab : not installed
nbclient : 0.6.4
nbconvert : 6.5.0
nbformat : 5.4.0
notebook : 6.4.12
qtconsole : 5.3.1
traitlets : 5.2.2
可以看到,原生Vitis AI环境并不包含jupyter_server和jupyterlab,需要手动安装:
(vitis-ai-pytorch) Vitis-AI /workspace > pip install jupyterlab
安装完毕,我们再次查看jupyter版本:
(vitis-ai-pytorch) Vitis-AI /workspace > jupyter --version
---
Selected Jupyter core packages...
IPython : 7.33.0
ipykernel : 6.13.1
ipywidgets : 7.7.0
jupyter_client : 7.3.4
jupyter_core : 4.12.0
jupyter_server : 1.24.0
jupyterlab : 3.6.6
nbclient : 0.6.4
nbconvert : 6.5.0
nbformat : 5.4.0
notebook : 6.4.12
qtconsole : 5.3.1
traitlets : 5.9.0
至此,Vitis AI环境配置完毕。
使用inspector检查模型
运行jupyterlab,新建Notebook:
导入相关python包和要分析的深度学习模型,本文以resnet18为例:
import torch
from torchvision.models import resnet18
from pytorch_nndct.apis import Inspector
from IPython.display import Image
进行必要的配置,本文KV260中的DPU为例,Target为DPUCZDX8G_ISA1_B4096,resnet18的输入shape为[batchsize, 3, 224, 224]:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
target = "DPUCZDX8G_ISA1_B4096"
inspector = Inspector(target)
model = resnet18(pretrained=True)
model.eval()
dummy_input = torch.randn(3, 224, 224)
inspector.inspect(model, (dummy_input,), device=device, output_dir="inspect", image_format="png")
执行上述单元格,得到如下结果:
[VAIQ_NOTE]: =>Inspector is initialized successfully with target:
name: DPUCZDX8G_ISA1_B4096
type: DPUCZDX8G
isa_version: 1
[VAIQ_NOTE]: =>Start to inspect model...
[VAIQ_NOTE]: =>Quant Module is in 'cpu'.
[VAIQ_NOTE]: =>Parsing ResNet...
[VAIQ_NOTE]: Start to trace model...
[VAIQ_NOTE]: Finish tracing.
[VAIQ_NOTE]: Processing ops...
██████████████████████████████████████████████████| 71/71 [00:00<00:00, 596.12it/s, OpInfo: name = return_0, type = Return]
[VAIQ_NOTE]: =>Doing weights equalization...
[VAIQ_NOTE]: =>Quantizable module is generated.(inspect/ResNet.py)
[VAIQ_NOTE]: All the operators are assigned to the DPU(see more details in 'inspect/inspect_DPUCZDX8G_ISA1_B4096.txt')
[VAIQ_NOTE]: Dot image is generated.(inspect/inspect_DPUCZDX8G_ISA1_B4096.png)
[VAIQ_NOTE]: =>Finish inspecting.
模型检查完毕,将在工作目录下新建inspect文件夹,并且包含四个文件:
它们的作用如下:
- inspect_DPUCZDX8G_ISA1_B4096.gv:这是一个 Graphviz 格式的文件,它描述了模型在 DPU 上的计算图,包括各个节点的名称、类型、输入输出、参数等信息。
- inspect_DPUCZDX8G_ISA1_B4096.png:这是一个 PNG 格式的图片,它展示了模型在 DPU 上的计算图的可视化效果,可以直观地看到模型的结构和流程。
- inspect_DPUCZDX8G_ISA1_B4096.txt:这是一个文本格式的文件,它记录了模型在 DPU 上的执行情况,包括各个节点的执行时间、占用资源、性能指标等信息。
- ResNet.py:这是一个 Python 格式的文件,它是模型在 DPU 上执行时使用的代码,包括模型定义、数据加载、推理过程等内容。
新建单元格,通过Image命令可以查看模型的结构和流程图:
Image('inspect/inspect_DPUCZDX8G_ISA1_B4096.png')
总结:
Xilinx使用docker分发Vitis AI,这让开发者可以非常方便地构建Vitis AI开发环境,借助Jupyter Lab,可以很轻松运行Vitis AI各项指令,并在其中添加注释信息。
Inspector可以以图形化的方式展示PyTorch或TensorFlow模型的网络结构,包括运算层、数据尺寸、数据流动等信息。这可以帮助开发者更直观地理解模型结构。
下一讲使用Vitis AI工具进行自定义模型的校准量化。