Vitis AI 构建开发环境,使用inspector检查模型

慈云数据 1年前 (2024-04-08) 技术支持 56 0
铺垫

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:

    image.png

    导入相关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文件夹,并且包含四个文件:

    image.png

    它们的作用如下:

    • 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')
      

      image.png

      总结

      Xilinx使用docker分发Vitis AI,这让开发者可以非常方便地构建Vitis AI开发环境,借助Jupyter Lab,可以很轻松运行Vitis AI各项指令,并在其中添加注释信息。

      Inspector可以以图形化的方式展示PyTorch或TensorFlow模型的网络结构,包括运算层、数据尺寸、数据流动等信息。这可以帮助开发者更直观地理解模型结构。

微信扫一扫加客服

微信扫一扫加客服