1. 介绍
1.1 Vitis AI 是什么?
Vitis AI 是赛灵思公司推出的一款综合 AI 推断开发平台,它可以帮助开发者在赛灵思的 FPGA 和自适应 SoC 上实现高效的 AI 应用部署。它是一个强大而灵活的 AI 开发平台,它可以充分利用赛灵思硬件平台的优势。
- Vitis AI 在 Linux 环境中运行,并使用命令行操作。
1.2 Vitis AI 可以做什么?
Vitis AI 可以做很多事情,例如:
- 优化和编译深度学习模型,使其适应赛灵思硬件平台的架构和性能。
- 提供丰富的 AI 库,包括常用的计算机视觉和自然语言处理模型,以及相应的推断接口。
- 提供多种工具和框架,如 Vitis Model Composer, Vitis Video Analytics SDK, Vitis AI Optimizer 等,以支持不同层次的开发需求。
- 提供多种示例设计和教程,展示如何在赛灵思硬件平台上实现各种 AI 应用场景。
1.3 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 应用。
2. 配置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环境配置完毕。
3. 使用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(1, 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 上执行时使用的代码,包括模型定义、数据加载、推理过程等内容。
4. 查看模型的结构
新建单元格,通过Image命令可以查看模型的结构和流程图:
Image('inspect/inspect_DPUCZDX8G_ISA1_B4096.png')
5. 总结
Xilinx使用docker分发Vitis AI,这让开发者可以非常方便地构建Vitis AI开发环境,借助Jupyter Lab,可以很轻松运行Vitis AI各项指令,并在其中添加注释信息。
Inspector可以以图形化的方式展示PyTorch或TensorFlow模型的网络结构,包括运算层、数据尺寸、数据流动等信息。这可以帮助开发者更直观地理解模型结构。
版权归原作者 hi94 所有, 如有侵权,请联系我们删除。