铺垫
Vitis AI 是什么?
Vitis AI 是赛灵思公司推出的一款综合 AI 推断开发平台,它可以帮助开发者在赛灵思的 FPGA 和自适应 SoC 上实现高效的 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:00Doing 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模型的网络结构,包括运算层、数据尺寸、数据流动等信息。这可以帮助开发者更直观地理解模型结构。