基于ZCU106平台部署Vitis AI 1.2/2.5开发套件【Vivado+Vitis+Petalinux2020/2022】

Vitis AI是 Xilinx 的开发平台,适用于在 Xilinx 硬件平台(包括边缘设备和 Alveo 卡)上进行人工智能算法推理部署。它由优化的IP、工具、库、模型和示例设计组成。Vitis AI以高效易用为设计理念,可在 Xilinx FPGA 和 ACAP 上充分发挥人工智能加速的潜力。

0. 工具/软件

  • mobaXterm:ssh/uart/…方式远程连接zynq

  • balena etcher:镜像烧录工具

  • vitis:自动安装对应版本的vivado、vitis HLS

    • # *********** 1. 安装依赖 ***********
      sudo add-apt-repository ppa:xorg-edgers/ppa 
      sudo apt-get update
      sudo apt-get install libgl1-mesa-glx
      sudo apt-get install libgl1-mesa-dri
      sudo apt-get install libgl1-mesa-dev
      sudo add-apt-repository --remove ppa:xorg-edgers/ppa
      sudo apt install net-tools
      sudo apt-get install -y unzip
      sudo apt install gcc
      sudo apt install g++
      sudo apt install python
      ln -s /usr/bin/python2 /usr/bin/python
      
      # *********** 2. 重启系统 ***********
      reboot
      
      # *********** 3. 安装vitis + vivado ***********
      # 参考vitis的UG手册,有详细的安装教程!
      
      # 1. Go to the Xilinx Downloads Website.
      # 2. Download the installer for your operating system.
      # 3. Run the installer, which opens the Xilinx Unified 2020.1 Installer.
      # 4. Click Next.
      # 5. Enter your Xilinx user account credentials,and then select Download and Install Now.
      # 6. Click Next.
      # 7. Accept the terms and conditions by clicking each I Agree check box.
      # 8. Click Next.
      # 9. Select Vitis, and then click Next.
      # 10. Optionally,customize your installation by selecting design tools and devices, and then click Next.
      # 11. Select the installation directory, optional shortcut and file association options,and then click Next.
      # 12. Review the installation summary, which shows the options and locations you have selected.
      # 13. To proceed with the installation of the Vitis software platform, click Install. After a successful installation, a confirmationmessage is displayed.
      
      # *********** 4. 安装XRT ***********
      # Xilinx Runtime(XRT) is implemented as a combinationof user-space and kernel driver components. XRT supports Alveo PCIe-based cards, as well as Zynq UltraScale+ MPSoC-based embedded system platforms,and provides a softwareinterface to Xilinx programmable logic devices.
      # 该指令执行后可能会报错,缺少一些依赖包。对此,缺啥直接装即可!网不好的话可能会耗费一定时间!
      sudo apt install <deb-dir>/<xrt_filename_OS>.deb
      
  • vivado:vitis集成vivado

  • petalinux :安装详见UG1144

    • Xilinx 公司推出的嵌入式linux开发套件,包括了u-bootkernelrootfsdevice-tree等源码和库,以及 Yocto recipes,可以让客户很方便的创建、配置、编译及自定义linux 系统;

    • Petalinux 支持Versal、Zynq UltraScale+ MPSoC、Zynq-7000 SoC 以及MicroBlaze,可与Xilinx硬件设计工具Vivado协同工作;

    • # petalinux 工具需要主机系统的/bin/sh是bash,而 Ubuntu 默认的/bin/sh是dash,所以这里需要进行更改。
      # 弹出窗口选择No即可!
      sudo dpkg-reconfigure dash
      sudo apt install autoconf
      mkdir -p /opt/pkg/petalinux/<petalinux-version>
      
      # petalinux新建/opt/pkg/petalinux之后,在执行.run文件安装之前需要进行如下操作
      cd /opt/pkg
      ls -l 
      # 输出如下结果为异常,需要将权限者变更为用户名xuyang
      # drwxrwxrwx 5 root root 4096 Aug 31 14:32 petalinux
      sudo chown -R xuyang:xuyang /opt/pkg/petalinux
      
      ./petalinux-v<petalinux-version>-final-installer.run --dir /opt/pkg/petalinux/<petalinux-version>
      
      # 可添加到.bashrc文件中!
      source <path-to-installed-PetaLinux>/settings.sh
      
      # By default, the WebTalk optionis disabled to send tools usage statisticsback to Xilinx. You can turn on the WebTalk feature by running the petalinux-util --webtalkcommand after the installationis complete.
      petalinux-util --webtalk on
      
      # 验证工作环境设置成功
      echo $PETALINUX
      
  • vitis AI:

    • exit命令可以退出docker环境

1. FPGA/ZYNQ基础知识

1.1 FPGA基础语法

  • 数据类型:

    • 寄存器类型:reg

      reg clk_sys[31:0];
      
      • 寄存器类型只能在initial和always语句块内赋值;
    • 线网类型:wire,tri

      //中括号为位宽
      wire [31:0] key_flag;
      
    • 参数类型:parameter,是一个常量(类似于C语言中的define)

  • 运算符

    • 算数运算符:+,-,*,/,%
    • 关系运算符:<,>,<=,>=,==,!=
    • 逻辑运算符:&&,||,!
    • 条件操作符:a?b:c(类似于C中的三元运算符)
    • 位运算符:~(取反),&(与),|(或),^(异或)
    • 移位运算符:<<,>>
    • 拼接运算符:{a,b}

1.2 zynq嵌入式SDK开发

  • 系统(裸机)开发流程:【1-4为硬件,5-6为软件】
    1. 创建vivado工程
    2. 使用IP集成器创建Process System
    3. 生成顶层HDL
    4. (生成Bitstream)并导出到SDK
    5. 在SDK中创建应用工程
    6. 板级验证
  • 嵌入式最小系统:使系统正常工作的最小条件;所有系统的公共基础部分。

1.3 petalinux设计流程

  1. 搭建vivado工程,导出hdf文件;
  2. 创建一个petalinux工程;
  3. 将hdf文件导入petalinux工程(将vivado设计应用到petalinux工程);
  4. 配置petalinux工程(其中包括配置内核、U-Boot及根文件系统);
  5. 编译petalinux工程(U-Boot镜像、内核镜像及rootfs、bitstream,fsbl镜像文件);
  6. 启动开发板。

2. Ubuntu系统安装

  • 参考视频:从零开始的Vitis教程

  • 硬件要求:由于vivado/vitis安装环境需要,ubuntu系统所在硬件内存32G起(64G推荐),硬盘100G起;需要联网

2.0 安装配置常用软件

  • 卸载ubuntu不必要的软件

    sudo apt remove libreoffice-common
    sudo apt remove thunderbird totem rhythmbox simple-scan gnome-mahjongg aisleriot gnome-mines cheese transmission-common gnome-sudoku unity-webapps-common
    sudo rm -f /usr/share/applications/com.canonical.launcher.amazon.desktop
    sudo rm -f /usr/share/applications/ubuntu-amazon-default.desktop
    
    # 能联网就update/upgrade
    sudo apt update
    sudo apt upgrade
    
  • 必要软件安装:

    sudo apt install cmake make htop git vim net-tools cmake-curses-gui python-pip python3-pip openssh-server gcc g++ build-essential lightdm
    
    pip install numpy
    # 升级pip的指令
    sudo pip3 install --upgrade pip
    
  • 安装Google,vscode,wps,typora,qv2ray

    sudo dpkg -i google***.deb
    sudo dpkg -i typora***.deb
    sudo dpkg -i wps***.deb
    sudo dpkg -i code***.deb
    
    • Ubuntu qv2ray配置:

      • .config/qv2ray/路径下,放置v2ray安装包中的qv2ray文件夹;
      • Qv2ray软件设置:
        • Preferences -> Kernel Settings:1. 设置V2ray Core Executable Path为/home/xuyang/.config/qv2ray/vcore/v2ray;2. 设置V2ray Assets Directory为/home/xuyang/.config/qv2ray/vcore/
        • Preferences -> Inbound Settings:SOCKS Setting中的Port默认为1089,需要与Google插件内对应;
      • Google之Proxy SwitchyOmega插件配置:
        • PROFILES中默认有的profile全部删了,然后新建一个名字可以叫为V2;
        • Proxy servers中Protocol选择SOCKS5,Server为127.0.0.1, Port为1089(与软件中的对应), 最后Apply changes即可。
    • Windows v2ray配置:

      • 设置 -> 参数设置:本地监听端口:10808(与与Google插件内对应);
      • 设置 -> 路由设置 -> 基础功能:
        • 域名解析策略:IPIfNonMatch;
        • 选中【启用路由高级功能】;
        • 域名匹配算法:linear;
        • 预定义规则集列表:绕过大陆;
      • Google插件配置同上。
    • vscode

      • 关闭红色波浪线:

        • 选择Workspace(工作区)
        • 搜索框输入error
        • 在Extensions里选择C/C++
        • 在右侧把C_Cpp:Error Squiggles选项设置为Disabled即可
      • 更换字体:

        • 字体下载:字体1-Hack 字体2-FiraCode

        • 解压后直接双击ttf文件,右上角install进行安装

        • 在VSCode中,【设置-文本编辑器-字体】,进行字体替换即可

          原始字体:

          'Droid Sans Mono', 'monospace', monospace
          

          更换为:

          'Hack', 'Courier New', monospace
          // or
          'Fira Code', 'Courier New', monospace
          
  • 搜狗输入法

    sudo apt install fcitx
    sudo dpkg -i sogoupinyin***.deb
    # 如果有报错,则执行以下命令;否则跳过
    sudo apt --fix-broken install
    
    • 安装成功后,到setting-language下面,把fcitx选中,并apply system-wide!

    • 重启登陆后在右上角出现一个键盘标志,点击进入,选择Configure Current Input Method!

  • anaconda

    1. 下载自己需要版本后,根据以下提示,enter键继续向下:

      nuc@nuc:~/Downloads$ bash Anaconda3-5.1.0-Linux-x86_64.sh 
      
      Welcome to Anaconda3 5.1.0
      
      In order to continue the installation process, please review the license
      agreement.
      Please, press ENTER to continue
      >>>
      
    2. 阅读完信息后,输入yes,回车继续:

      Do you accept the license terms? [yes|no]
      [no] >>> Please answer 'yes' or 'no':'  
      
      Anaconda3 will now be installed into this location:
      /home/nuc/anaconda3
      
        - Press ENTER to confirm the location
        - Press CTRL-C to abort the installation
        - Or specify a different location below
      
      [/home/nuc/anaconda3] >>>
      
      
    3. 一系列安装完成后,输入yes,加入环境变量即可,在之后会提示是否安装VScode,选择no
      完成后开启新的终端,查看 conda 的版本号:

      nuc@nuc:~$ conda -V
      conda 4.4.10
      
    4. 打开 Jupyter Notebook:

      nuc@nuc:~$ jupyter notebook
      [I 01:48:14.486 NotebookApp] The port 8888 is already in use, trying another port.
      [I 01:48:14.711 NotebookApp] JupyterLab beta preview extension loaded from /home/nuc/anaconda3/lib/python3.6/site-packages/jupyterlab
      [I 01:48:14.712 NotebookApp] JupyterLab application directory is /home/nuc/anaconda3/share/jupyter/lab
      [I 01:48:14.759 NotebookApp] Serving notebooks from local directory: /home/nuc
      [I 01:48:14.759 NotebookApp] 0 active kernels
      [I 01:48:14.759 NotebookApp] The Jupyter Notebook is running at:
      [I 01:48:14.760 NotebookApp] http://localhost:8889/?token=605b46819a7dd5e99d71a07c7f3a53ea4a789b62c6c38764
      [I 01:48:14.760 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
      [C 01:48:14.761 NotebookApp] 
          
          Copy/paste this URL into your browser when you connect for the first time,
          to login with a token:
              http://localhost:8889/?token=605b46819a7dd5e99d71a07c7f3a53ea4a789b62c6c38764
      [I 01:48:22.437 NotebookApp] Accepting one-time-token-authenticated connection from 127.0.0.1
      
    5. conda用法

      # 列出当前可安装的各个版本, 拿qt举个例子
      conda search qt
      # 根据所列出的版本号,安装相应的版本即可
      conda install qt=5.9.7
      
  • kazam录屏软件

    sudo apt-get update
    sudo apt-get install kazam 
    
  • ROS

    • ROS Melodic

      # Setup your computer to accept software from packages.ros.org.
      $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
      # Set up your keys
      $ sudo apt install curl
      $ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
      
      # Installation
      $ sudo apt update
      $ sudo apt install ros-melodic-desktop-full
      
      # Environment setup
      $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
      $ source ~/.bashrc
      
      # Dependencies for building packages
      $ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential python-pip
      
      $ sudo rosdep init
      $ rosdep update
      
      # install moveit
      sudo apt-get install ros-melodic-moveit
      source /opt/ros/melodic/setup.bash
      sudo apt-get install ros-melodic-moveit-resources
      sudo apt-get install ros-melodic-moveit-visual-tools
      
    • 可能的问题
      • no pip: sudo apt-get install python-pip
      • catkin_make不成功:检查source /opt/ros/melodic/setup.bash在不在~/.bashrc

2.1 关闭自动更新

  • 打开文件:
    sudo vim /etc/apt/apt.conf.d/10periodic

  • 修改内容为:

    APT::Periodic::Update-Package-Lists "0";
    APT::Periodic::Download-Upgradeable-Packages "0";  
    APT::Periodic::AutocleanInterval "0"; 
    

2.2 更换清华源

  • 指令:

    # 备份
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
    sudo gedit /etc/apt/sources.list
    
  • 替换为下面内容:

    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    
    # 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    
  • 再次更新即可:

    sudo apt-get update 
    sudo apt-get upgrade
    

2.3 搜狗输入法

  1. 安装Fcitx输入框架

    sudo apt install fcitx
    
  2. 安装deb包

    sudo dpkg -i sogou*.deb
    #如果上述指令有报错,则执行下面一条指令
    sudo apt --fix-broken install
    
  3. 进入设置-【Region & Language】,进入【Manage Installed Languages】,输入框架改为fcitx,然后点击上面的Apply System-Wide应用到全局。

  4. 重启,登陆后在右上角出现一个键盘标志,点击进入,选择Configure Current Input Method;进入Input Method界面后,选择+号;将下面的Only Show Current Language点掉后,在搜索栏搜索sogou,选中之后进行添加即可。

2.4 解锁cpu锁频

$ sudo apt install cpufrequtils

$ sudo systemctl disable ondemand
$ sudo systemctl enable cpufrequtils
$ sudo sh -c 'echo "GOVERNOR=performance" > /etc/default/cpufrequtils'
$ sudo systemctl daemon-reload && sudo systemctl restart cpufrequtils

# 检查
 $ cpufreq-info

2.5 OpenCV

  • 编译3.4.13版本,4.5.1建议备用

  • default path should be full_project_test/3rdparty/opencv, please don’t modify

  • 参考链接:参考网址

    # 依赖项
    $ sudo apt-get install build-essential
    $ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    $ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev 
    $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
    $ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频
    $ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
    $ sudo apt-get install ffmpeg
    
  • 下载opencv:下载地址

  • 下载opencv_contrib:下载地址

    # 将opencv解压到3rdparty文件夹下,将opencv_contrib解压到opencv文件夹下
    vision@vision:~/xy_ws/3rdparty$ cd opencv-3.4.13
    
    vision@vision:~/xy_ws/3rdparty/opencv-3.4.13$ mkdir build && cd build
    # 编译
    vision@vision:~/xy_ws/3rdparty/opencv-3.4.13/build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.13/modules/ ..
    
    vision@vision:~/xy_ws/3rdparty/opencv-3.4.13/build$ make
    vision@vision:~/xy_ws/3rdparty/opencv-3.4.13/build$ sudo make install
    # 环境配置
    sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
    pkg-config --modversion opencv
    
  • 如果默认的opencv3.2不能满足需要,则在CMakeLists.txt中用以下方式指定特定版本opencv路径

    find_package(Opencv 3.4 REQUIRED
    				PATH /your/path/to/opencv-3.4.13/build
    			    NO_DEFAULT_PATH)
    

2.6 NVIDIA相关驱动

2.6.1 Nvidia pre-settings
  1. edit grub file use sudo gedit /etc/default/grub

  2. change grub file, notice that don’t input any space beside =

    # old
    GRUB_TIMEOUT_STYLE=hidden
    
    # new
    #GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=5
    
  3. sudo update-grub

  4. blacklist nouveau driver

    $ sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
    $ sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
    

    Confirm the content of the new modprobe config file:

    $ cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
    # output
    blacklist nouveau
    options nouveau modeset=0
    
  5. Update kernel initramfs, Enter the following linux command to regenerate initramfs:

    $ sudo update-initramfs -u
    
  6. reboot the machine

    # 验证nouveau是否已禁用
    # 执行下面一条命令,没有信息显示,说明nouveau已被禁用,接下来可以安装nvidia的显卡驱动
    lsmod | grep nouveau
    
2.6.2 Nvidia driver
  • 注意RTX 4090等较新的显卡一定要安装较新的驱动,老版本已经不支持了!
  1. 基本依赖

    sudo apt install gcc g++ make build-essential lightdm
    
  2. ctrl+alt+f4进入超级终端

    # 在ubuntu下按ctrl+alt+f1进入命令行界面
    # 这个是关闭图形界面,不执行会出错。
    sudo service lightdm stop
    
    # 卸载原有NVIDIA驱动,如果卸载完之后,仍提示已有相关驱动被检测到,请reboot一下,再安装!!!
    sudo apt-get remove nvidia*  (若安装过其他版本或其他方式安装过驱动执行此项)
    
    # 注意版本对应
    sudo chmod a+x NVIDIA-Linux-x86_64-418.43.run
    
    # 安装,选项不能丢,只有禁用opengl这样安装才不会出现循环登陆的问题
    sudo ./NVIDIA-Linux-x86_64-418.43.run -no-x-check -no-nouveau-check -no-opengl-files 
    
    #-no-x-check:安装驱动时关闭X服务
    #-no-nouveau-check:安装驱动时禁用nouveau
    #-no-opengl-files:只安装驱动文件,不安装OpenGL文件
    
    # 安装期间的选项如下:
    # The distribution-provided pre-install script failed! Are you sure you want to continue?
    # 选择 yes 继续。
    
    # Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?
    # 选择 No 继续。
    
    # 问题没记住,选项是:install without signing
    
    # 问题大概是:Nvidia’s 32-bit compatibility libraries?
    # 选择 No 继续。
    
    # Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.
    # 选择 Yes 继续
    
    sudo service lightdm start
    
    # 可以reboot一下看是否能正常进入系统
    # 随后检查驱动是否安装成功
    nvidia-smi
    
2.6.3 CUDA
  • ctrl+alt+f4进入超级终端

    sudo service lightdm stop
    
    # 请到标题超链接去下载对应版本CUDA的.run包
    
    # test nvidia-driver
    $ nvidia-smi
    
    $ lsmod | grep nouveau
    # 若无输出代表禁用nouveau生效,可以继续操作。
    
    # 注意版本对应:标题中450.51.05为该版本cuda所对应的最低显卡驱动的版本
    $ sudo chmod a+x cuda_11.0.2_450.51.05_linux.run
    
    # drivers不安装!accept EULA rules!
    # select cuda Toolkit only!  No driver! No samples!
    $ sudo ./cuda_11.0.2_450.51.05_linux.run --no-opengl-libs
    
    sudo service lightdm start
    
    $ gedit .bashrc
    # cuda 11.0 注意对应关系
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.0/lib64
    export PATH=${PATH}:/usr/local/cuda-11.0/bin
    
    #保存环境变量
    $ source .bashrc
    
    #重启电脑
    $ reboot
    
    # 通过执行以下命令来确定驱动程序的版本
    $ cat /proc/driver/nvidia/version
    
    # 进入/usr/local/cuda-11.0/Samples目录:
    $ sudo make -k
    $ cd ~/usr/local/cuda-11.0/Samples/bin/x86_64/linux/release
    $ ./deviceQuery
    
2.6.4 cuDNN
  • cuDNN与CUDA的版本对应问题,详见cuDNN标题超链接。

    $ sudo cp cuda/include/cudnn*.h /usr/local/cuda/include 
    $ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64 
    $ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
    
    # 可以查看cuDNN版本
    cat /usr/local/cuda-11.1/include/cudnn.h | grep CUDNN_MAJOR -A 2
    nvcc -V
    
    #测试cudnn
    cp -r /usr/src/cudnn_samples_v8/ ~
    cd  ~/cudnn_samples_v8/mnistCUDNN
    sudo make
    sudo ./mnistCUDNN
    # 如果成功运行,会显示下列信息:Test passed!
    

3. docker相关

# 查看本地所有的镜像
docker images
# 从网络中查找需要的镜像
docker search 镜像名称
# 拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
# 删除指定本地镜像
docker rmi 镜像id 
# ***************************************
# 查看正在运行的容器
docker ps 
# 查看所有容器
docker ps –a 
# 创建并启动容器
docker run 参数
# 参数说明:
# • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
# • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
# • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
# • -it 创建的容器一般称为交互式容器,-id  创建的容器一般称为守护式容器
# • --name:为创建的容器命名

# 进入容器
docker exec 参数 # 退出容器,容器不会关闭
# 停止容器
docker stop 容器名称
# 启动容器
docker start 容器名称
# 删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称
# 查看容器信息
docker inspect 容器名称

3.0 Ubuntu-docker镜像存放位置

root@wlj569:/var# ls
backups  cache  lib  local  lock  log  mail  opt  run  spool  tmp
root@wlj569:/var# cd lib/docker/
root@wlj569:/var/lib/docker# ls
buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
root@wlj569:/var/lib/docker# cd containers
root@wlj569:/var/lib/docker/containers# ls
7333ce90a9b664360d8b4a8d2291ff7547c1a732ab7d2bb352372b3bcb33c097
afd2a42978dd83e2ae681fcda8cb1130201a61c3eb601546ba48c57357f7c470
d501ddf0548b1716090712fd37605e6ee59c4923e1882eca4fdc99788b5eaee0

# 到/var/lib/docker路径下,image下存放下载的镜像,containers下存放的是创建的容器,均可按需删除!
# cd var/lib/docker/
# cd ls
# 删除镜像
# rm d501ddf0548b1716090712fd37605e6ee59c4923e1882eca4fdc99788b5eaee0/ -r 

3.1 离线获取docker镜像

  1. 在有公网环境下使用 docker pull 命令下载相应的镜像,使用docker images 列出所有镜像:

    liuchendeMacBook-Pro:Downloads liuchen$ docker images
    REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
    mysql                              latest              102816b1ee7d        3 weeks ago         486MB
    
  2. 使用docker save命令对镜像进行打包:

    liuchendeMacBook-Pro:Downloads liuchen$ docker save -o mysql.tar mysql:latest
    liuchendeMacBook-Pro:Downloads liuchen$ ls -trl mysql.tar
    -rw-------  1 liuchen  staff  490642944  1 23 17:03 mysql.tar
    
  3. 将打包好的镜像传送至内网环境的机器,使用docker load 命令将镜像加载:

    liuchendeMacBook-Pro:Downloads liuchen$ docker load -i mysql.tar
    Loaded image: mysql:latest
    
  4. 现在使用docker images 就可以查出刚才加载的镜像了。

3.2 在线安装docker

  • 安装依赖

    sudo apt-get update
    # 安装依赖包
    sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    
  • 下载并安装秘钥,以下几种源中任选其一

    # 官方源
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    # 中科大源
    $ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    # 清华源
    $ curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    # 检查秘钥是否安装成功
    $ sudo apt-key fingerprint 0EBFCD88
    
  • 添加安装docker的软件源,如果觉得官方源慢的,可以选择中科大源和清华源。同样,任选其一!

    # 中科大源
    $ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"     
    # 清华源
    $ sudo add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    
  • 安装docker-ce

    sudo apt install docker-ce
    # 验证安装
    sudo docker run hello-world
    

3.3 离线安装docker

  • 先决条件

    • Ubuntu Kinetic 22.10、Ubuntu Jammy 22.04 (LTS)、Ubuntu Focal 20.04 (LTS)、Ubuntu Bionic 18.04 (LTS)

    • Docker Engine is compatible with x86_64 (or amd64), armhf, arm64, and s390x architectures.

  • 卸载旧版本docker

    sudo apt-get remove docker docker-engine docker.io containerd runc
    
  • 下载离线安装包

    • 前往官网,选择对应ubuntu版本,进入/pool/stable,选择对应系统架构

    • 下载下述deb包,并完成安装

      containerd.io_<version>_<arch>.deb

      docker-ce_<version>_<arch>.deb

      docker-ce-cli_<version>_<arch>.deb

      docker-compose-plugin_<version>_<arch>.deb

      # This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.
      sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
        ./docker-ce_<version>_<arch>.deb \
        ./docker-ce-cli_<version>_<arch>.deb \
        ./docker-compose-plugin_<version>_<arch>.deb
      # 验证安装
      sudo docker run hello-world
      
  • GPU版本,还需要安装一些附加环境:具体参考GitHub 第三方链接

4. vitis AI 环境搭建流程

4.0 硬件需求

  1. 工作站

    ComponentRequirement
    GPU (Optional, but strongly recommended for quantization acceleration)NVIDIA GPU supporting CUDA 11.0 or higher, (eg: NVIDIA P100, V100, A100)
    CUDA DriverNVIDIA-450 or higher for CUDA 11.0
    Docker Version19.03 or higher, nvidia-docker2
    Operating SystemUbuntu 18.04, 20.04;CentOS 7.8, 7.9, 8.1, 8.2;RHEL 8.3, 8.4
    CPUIntel i3/i5/i7/i9/Xeon 64-bit CPU;AMD EPYC 7F52 64-bit CPU
  2. 板卡

    ComponentRequirement
    AlveoU50, U50LV, U200, U250, U280 cards
    Zynq UltraScale+ MPSoCZCU102 and ZCU104 Boards
    VersalVCK190 and VCK5000 boards
    KriaKV260

4.1 工作站配置

  1. 配置SSH服务

    # 查看当前的ubuntu是否安装了ssh-server服务。默认只安装ssh-client服务。
    dpkg -l | grep ssh
    
    # 安装ssh-server服务
    sudo apt-get install openssh-server
    
    # 再次查看安装的服务, 如果看到 openssh-server的字样,表示SSH服务已经打开。从输出结果可以看到状态是active(running)
    dpkg -l | grep ssh
    
    # 安装好以后,ssh server应该已经开始运行了,可以用下面的命令检查ssh server的状态
    systemctl status sshd
    
    # 需要的时候,还可以利用systemctl命令打开(start)/关闭(stop)/重启(restart) ssh server,例如下面的命令就可以用来重启ssh server服务
    sudo systemctl restart ssh
    
    # 使用下面命令查看当前服务器的IP地址: 
    ip addr show
    # 获得IP地址后即可在windows中使用ssh进行连接
    
  2. 配置NFS服务

    • 后面进行 Linux 驱动开发的时候需要 NFS 启动;

      sudo apt install nfs-kernel-server
      sudo mkdir -p ~/linux/nfs
      
      sudo gedit /etc/exports
      # 添加下一行内容到最后
      /home/xuyang/linux/nfs *(rw,sync,no_root_squash)
      # /home/xuyang/linux/nfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是文件同步写入存储器,no_root_squash是nfs客户端分享目录使用者的权限。如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
      
      # 重启 NFS 服务
      sudo service nfs-kernel-server restart
      # 显示出所共享的目录
      showmount -e
      # 在 nfs 运行的过程中,修改了/etc/exports 配置文件,可以使用 exportfs 命令使改动生效
      sudo exportfs -rv
      
  3. 搭建 tftp 服务器

    • TFTP 作为一种简单的文件传输协议,在嵌入式开发中会经常使用到,而且后面我们在安装 Petalinux 工具时也会提示需要 tftp 服务,所以我们需要在 Ubuntu 上搭建 TFTP 服务器。

      sudo apt install tftp-hpa tftpd-hpa 
      # TFTP需要一个文件夹来存放文件。在根目录下新建一个/tftpboot目录做为TFTP文件存储目录,之所以使用该目录是因为后面使用的Petalinux工具默认使用该目录。
      sudo mkdir -p /tftpboot
      sudo chmod 777 /tftpboot
      
      # 配置tftp
      sudo gedit /etc/default/tftpd-hpa 
      # 将内容改为如下5行。TFTP_DIRECTORY就是我们上面创建的/tftpboot文件夹目录,以后我们就将所有需要通过TFTP传输的文件都放到该文件夹里面。
      # /etc/default/tftpd-hpa
      TFTP_USERNAME="tftp"
      TFTP_DIRECTORY="/tftpboot" 
      TFTP_ADDRESS=":69"                               
      TFTP_OPTIONS="-l -c -s"
      
      # 重启TFTP服务器
      sudo service tftpd-hpa restart
      
  4. Ensure your linux user is in the group docker

    • 创建docker group:

      sudo groupadd docker
      
    • Add your user to the docker group

      sudo usermod -aG docker $USER
      
    • 执行以下命令

      newgrp docker
      #之后就可以不再使用sudo了,输入以下命令进行测试
      docker run hello-world
      
    • 添加权限

      sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
      sudo chmod g+rwx "$HOME/.docker" -R
      
  5. 下载Vitis AI 仓库

    git clone --recurse-submodules https://github.com/Xilinx/VitisAI 
    cd Vitis-AI
    
  6. 下载最新的vitis AI 镜像

  • docker pull xilinx/vitis-ai-cpu:latest
    
  1. 运行容器
  • # 每次执行这个命令,一定要确认是否新建了docker容器
    ./docker_run.sh xilinx/vitis-ai-cpu:latest
    
  1. 容器跑起来后,在具体容器中打补丁
  • You can install the patches by starting the Vitis AI Docker container, and installing the package to a specific conda environment. For example, patching the unilog package in the vitis-ai-caffe conda environment:

  • Vitis-AI /workspace > cd /tmp
    Vitis-AI /tmp > wget https://www.xilinx.com/bin/public/openDownload?filename=unilog-1.3.2-h7b12538_35.tar.bz2 -O unilog-1.3.2-h7b12538_35.tar.bz2
    Vitis-AI /tmp > sudo conda install -n vitis-ai-caffe ./unilog-1.3.2-h7b12538_35.tar.bz2
    
  1. 安装交叉编译环境:【此项是在linux系统下安装,不是docker容器内!!!】
  • cd Vitis-AI/setup/mpsoc
    
    sudo chmod 777 host_cross_compiler_setup.sh
    sudo ./host_cross_compiler_setup.sh
    
    # 上述交叉编译完成之后,按照提示执行下述指令
    #Please run the following command to enable Cross Compiler
    #    source /home/vitis-ai-user/petalinux_sdk_2022.1/environment-setup-cortexa72-cortexa53-xilinx-linux
    #If you run the above command failed, run the following commands to enable Cross Compiler
    #    unset LD_LIBRARY_PATH
    #    source /home/vitis-ai-user/petalinux_sdk_2022.1/environment-setup-cortexa72-cortexa53-xilinx-linux
    
  • 交叉编译环境默认安装在 ~/petalinux_sdk_2022.1

  1. source环境变量:【此项是在linux系统下安装,不是docker容器内!!!】
  • # 每个终端都要source!除非添加到.bashrc文件中!
    source ~/petalinux_sdk_2022.1/environment-setup-cortexa72-cortexa53-xilinx-linux
    
  1. 以resnet50为例,交叉编译样例。编译不报错,生成可执行文件resnet50,则说明前面一切正常。【此项是在linux系统下安装,不是docker容器内!!!】

    cd Vitis-AI/examples/VART/resnet50
    bash –x build.sh
    

4.2 板卡配置

  1. 下载并设置官方镜像到板卡

    • Use Etcher software to burn the image file onto the SD card.

    • Insert the SD card with the image into the destination board.

    • Plug in the power and boot the board using the serial port to operate on the system.

    • Set up the IP information of the board using the serial port.

      # 查看IP地址
      ifconfig
      
      # 设置固定的IP地址,新建interfaces文件
      vi /etc/network/interfaces
      # 添加或调整以下内容
          auto lo
          iface lo inet loopback
      
          auto eth0
          iface eth0 inet static  #static的作用是不需要虚拟机给我自动分配IP地址
          address 192.168.1.4
          netmask 255.255.255.0
          gateway 192.168.1.1
      
      # :wq!保存退出
      
      # 重启网卡即可
      ifdown eth0   // 先关掉
      ifup  eth0    // 再打开
      
  2. 模型部署

    • 模型下载:从model zoo中下载原始浮点模型到工作站上,以tensorflow resnet50为例。

      cd Vitis-AI
      wget https://www.xilinx.com/bin/public/openDownload?
      filename=tf_resnetv1_50_imagenet_224_224_6.97G_2.5.zip -O tf_resnetv1_50_imagenet_224_224_6.97G_2.5.zip
      unzip tf_resnetv1_50_imagenet_224_224_6.97G_2.5.zip
      
    • 模型量化:工作站docker容器环境内

      # 1. 下载标定图片,并copy到Vitis-AI文件夹下
      
      # 2. 启动docker容器
      ./docker_run.sh xilinx/vitis-ai-cpu:latest
      
      # 3. Set CALIB_BATCH_SIZE in the tf_resnetv1_50_imagenet_224_224_6.97G_2.5/code/quantize/config.ini to 5.
      
      # 4. 激活conda仿真环境:vitis-ai-tensorflow,vitis-ai-tensorflow2,vitis-ai-pytorch等
      conda activate vitis-ai-tensorflow
      
      # 5. 解压标定用图片到指定路径下
      tar -xzvf Imagenet_calib.tar.gz -C tf_resnetv1_50_imagenet_224_224_6.97G_2.5/data
      
      # 6.改变路径
      cd tf_resnetv1_50_imagenet_224_224_6.97G_2.5/code/quantize
      
      # 7.量化,量化后模型位于tf_resnetv1_50_imagenet_224_224_6.97G_2.5/quantized
      bash quantize.sh
      
    • 模型编译:工作站docker容器环境内

      cd ../..
      
      # 路径需要对应更改,ZCU102/ZCU104/...
      vai_c_tensorflow -f ./quantized/quantize_eval_model.pb \
      -a /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json -o ./compiled -n resnet50_tf
      
    • 模型部署:工作站上

      # 复制编译好的模型到板卡,对应变更BOARD_IP
      [Host]$ scp tf_resnetv1_50_imagenet_224_224_6.97G_2.5/compiled/
      resnet50_tf.xmodel root@[BOARD_IP]:~
      
      # 当然,也可以试试直接下载xmodel文件到板卡,看是否可以直接运行【先在工作站上下载,在scp到板卡上,进行解压】
      #wget https://www.xilinx.com/bin/public/openDownload?filename=resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz -O resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz
      
      #scp resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz root@[IP_OF_BOARD]:~/
      
      #tar -xzvf resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz
      
      #具体放到板卡哪个路径下,需要仔细斟酌
      #cp resnet50 /usr/share/vitis_ai_library/models -r
      
    • 下载图片并拷贝到板卡上,解压待用,用于模型测试:板卡上

      # 需要确认测试图片是不是放在该路径下,与代码内对应
      cd ~
      tar -xzvf vitis_ai_runtime_r*2.5*_image_video.tar.gz -C VitisAI/examples/VART
      
    • 在板卡上运行编译好的模型:板卡上

      cd ~/Vitis-AI/examples/VART/resnet50
      
      # resnet50可执行文件需要先在工作站上交叉编译,再scp到板卡
      # 交叉编译指令:sh -x build.sh
      ./resnet50 ~/resnet50_tf.xmodel
      
    • 在ZCU102/ZCU104板卡上运行Vitis AI样例命令:

      IDExample NameCommand
      1resnet50./resnet50 /usr/share/vitis_ai_library/models/resnet50/resnet50.xmodel
      2resnet50_pt./resnet50_pt /usr/share/vitis_ai_library/models/resnet50_pt/resnet50_pt.xmodel …/images/001.jpg
      3resnet50_mt_pypython3 resnet50.py 1 /usr/share/vitis_ai_library/models/resnet50/resnet50.xmodel
      4adas_detection./adas_detection video/adas.webm /usr/share/vitis_ai_library/models/yolov3_adas_pruned_0_9/yolov3_adas_pruned_0_9.xmodel
      5segmentation./segmentation video/traffic.webm /usr/share/vitis_ai_library/models/fpn/fpn.xmodel

4.3 访问板卡方法

  1. 串口
    • 波特率:115200
    • 数据位:8
    • 停止位:1
    • 校验位:no
  2. 以太网
    • ssh连接方式:ssh username@IP
  3. 单机
    • 键盘、鼠标、屏幕直接连到板卡,linux GUI桌面可直接显示;

4.4 Vitis-AI-Library :

  • 与VART不同,也有一些测试用例,详见GitHub

5. 虚拟机之ubuntu环境配置

5.1 FTP文件传输

  • 这只是虚拟机和主机之间的其中一种文件传输方式,更多方式详见【领航者ZYNQ之嵌入式Linux开发指南】文档;

  • 虚拟机为服务器,Windows为客户端(软件FileZilla)

    #如果能联网,则装;否则不能使用ifconfig命令
    # sudo apt install net-tools
    
    # ubuntu的FTP服务
    sudo apt install vsftpd
    
    sudo gedit /etc/vsftpd.conf
    # 确保下面两行取消注释:去掉文中的#号
    # local_enable=YES
    # write_enable=YES
    
    # 重启FTP服务
    sudo /etc/init.d/vsftpd restart
    

6. 野生办法之在ZCU106板子上配置AI环境

  • 参考链接

    • 第一阶段:利用Vitis开发基于ZCU106的神经网络加速器(一)——Vitis概述及XRT编译
    • 第二阶段:利用Vitis开发基于ZCU106的神经网络加速器(二)——DPU编译及Demo
    • 前两阶段的综合:[Zcu106开发]离线环境下用Vitis搭建Zcu106嵌入式系统神经网络加速器踩坑实录
  • 基本环境:

    • Ubuntu 18.04 :18.04.4即可,千万不要装18.04.6,2020.1版本的vitis/petalinux不兼容.6版本!
    • Vitis 2020.1 :集成vivado,该离线安装包贼大(30G+),同时再下载对应Vivado_license_2037.lic文件导入破解!
    • petalinux 2020.1
    • Xilinx Runtime 2020.1
  • 期间的大坑(前两个如果能联网,则忽略):

    1. 在执行第一阶段期间,make all的执行肯定会报错。紧接着,在执行make petalinux_proj XSA_DIR=<xsa dir path>命令之前,需要先配置petalinux的离线编译环境,将所下载的sstate文件包和download文件包解压放到相应位置,并通过petalinux-config指令进行配置。随后,再重新执行make petalinux_proj XSA_DIR=<xsa dir path>命令。
    2. 在执行第一阶段期间,上述离线编译环境配置完成后,还是会报错,经过对报错信息的分析发现,还是需要再下载一个common,并将之放到zcu16_base/petalinux/build/tmp/work/aarch64-xilinx-linux/gst-interpipes/1.0.4-r0/git/common路径下即可。之后,make petalinux_proj XSA_DIR=<xsa dir path>命令可顺利执行完成。
    3. 在执行第二阶段期间,第4步make KERNEL=DPU_SM DEVICE=zcu106时,报错ERROR: [VPL UTLZ-1] Resource utilization: RAMB18 and RAMB36/FIFO over-utilized in Top Level Design (This design requires more RAMB18 and RAMB36/FIFO cells than...,解决办法参考GitHub。
    4. 在执行第二阶段期间,第5步【烧录SD卡】期间,可能会涉及到使用FileZilla软件传输sd_card.img文件到Windows系统,但请注意【千万不要选用SFTP-SSH File Transfer Protocol】协议,否则传输的文件会丢失!(本来3.3G的文件变成了1.5G…)
    5. 在执行第二阶段期间,第7步【测试resnet50】期间,指令env LD_LIBRARY_PATH=samples/lib XLNX_VART_FIRMWARE=/media/sd-mmcblk0p1/dpu.xclbin samples/bin/resnet50 img/bellpeppe-994958.JPEG执行之前,需要先使用cp model/resnet50.elf ./指令,正确设置elf模型文件的路径,否则会报错!经过测试发现,该测试用例所推理出的结果是错的!
  • VART之AI算法测试流程:

    • 首先,使用上述第二阶段最后的测试用例,但测试结果与博客中一样,出现推理错误的情况!

    • 其次,上述教程所生成的linux系统镜像很不错。因此,我们可以基于此系统,在ZCU106评估板上启动linux系统,搜集官方的AI算法例程加入其中,进行算法的二次开发工作。

    • 之后,使用Vitis-AI(1.2.1)/VART/samples中的AI例程,参考Vitis-AI/VART/README.md文件,配置相关编译依赖环境。该README.md文件中除了ZCU102/ZCU104官方镜像不能用到ZCU106评估板之外(用上述生成的镜像代替),其余东西应装尽装,包括Optional选项均可以正常安装

    • 随后,将Vitis-AI/VART/samples/路径下的示例一一进行编译后,可以直接把整个“Vitis-AI`工程拷贝到ZCU106评估板,进行后续的AI算法测试。

    • 经测试,Vitis-AI工程中所提供的适用于ZCU104评估板的AI模型可以直接适用于ZCU106,参照README.md文件中./resnet50 model_dir_for_zcu104/resnet50.elf等相关例程,直接在ZCU106评估板上运行即可。但其中resnet50_mt_pyinception_v1_mt_py,涉及到python3指令运行会报错terminate called after throwing an instance of 'pybind11::error_already_set',具体解决办法未知。但其他cpp的例程交叉编译后,在ZCU106上均能正常运行。

    • 拷贝sd_card.img文件到SD卡之后,默认并没有完全使用SD卡的64G空间,通过MobaXterm的串口进入ZCU106的系统后:

    • # 该部分过程在ZCU106系统内进行
      # 查看硬盘及所属分区情况
      fdisk -l
      
      # 打开磁盘分区管理
      sudo fdisk /dev/mmcblk0
      
      # 输入 n,新建一个磁盘分区
      # 输入 p,选择主分区
      # 输入 3,新建分区号为3(根据实际情况,灵活设置)
      # 输入 w,保存分区表并退出。
      
      # 格式化新建的分区3
      mkfs -t ext4 /dev/mmcblk0p3
      
      # 将之挂载到根目录下(灵活调整分区号)
      mount -t ext4 /dev/mmcblk0p3 /
      
      • 以上扩容办法不行,尚未找到解决办法,应对措施如下:
        1. 正常使用balenaEtcher软件烧录到SD卡;
        2. 将SD卡中两个分区中的文件备份出来;
        3. 按照3_领航者ZYNQ之嵌入式Linux开发指南_V2.2.pdf6.2.10小节内容,手动给SD卡重新分区;
        4. 分别将2.小节备份出来的内容分别放回去即可。
    • 运行期间,如果想直接把图片/视频在显示器上直观地显示出来,参照以下命令:

      # 方式1:使用ZCU106评估板上的DP接口输出图片到显示器,HDMI似乎不太行...
      export DISPLAY=:0.0
      # 方式2:显示到主机上(借助MobaXterm软件,需要将setting -> X11 -> X11 setting -> X11 remote access选项改为full)。此种方式需要通过SSH方式连接,而不是串口。
      export DISPLAY=192.168.1.3(主机IP):0.0
      
      # 之后,再执行相应算法运行指令即可正常显示图片/视频流。
      ./resnet50 model_dir_for_zcu104/resnet50.elf
      
      # 在服务器上交叉编译可执行文件
      cd ~/vitis_wild/Vitis-AI/Vitis-AI-Library/overview/samples/refinedet/
      
      # 必须得是.,不能用source!
      . /opt/petalinux/2020.1/environment-setup-aarch64-xilinx-linux
      bash -x build.sh
      
      #之后,将编译好的可执行文件拷贝到ZCU106评估板即可运行  0:USB相机  8:所开启线程数
      cd Vitis-AI/examples/Vitis-AI-Library/samples/yolov4
      ./exec/test_video_yolov4 /usr/share/vitis_ai_library/models/yolov4_leaky_416_tf/yolov4_leaky_416_tf.xmodel 0 -t 8
      
  • Vitis-AI-Library之AI算法测试流程:参照VART之AI算法流程,估计算法也能运行。

  • Vitis AI DNNDK之AI算法测试流程:参照VART之AI算法流程,估计算法也能运行。

7. 编译运行Vitis-AI 2.5

7.1 工作站上编译DPU支持的xmodel模型文件

# 在服务器的vitisAI虚拟机上
cd Vitis-AI
# 启动docker环境(编译xmodel用;交叉编译可执行文件不用这个,其只需要source一下sysroot下的环境即可)
./docker_run.sh xilinx/vitis-ai-cpu:latest

# 以下完全是在docker容器内进行操作
# 根据模型启动对应的conda环境
conda activate vitis-ai-tensorflow2

# 将下载好的GPU版本的model拷贝至./model_zoo/model_xy/路径下,
cd model_zoo/model_xy/tf2_yolov3_coco_416_416_65.9G_2.5/

# 之后依据所下载model压缩包内quantized路径下量化好的模型,进行编译生成xmodel模型文件
# 1,416,416,3根据原始模型进行调整
vai_c_tensorflow2 -m ./quantized/quantized.h5 -a ../../../arch.json -o ./compiled/ -n xxx -e "{'input_shape':'1,416,416,3'}"

7.2 ZCU106评估板之gdb调试技巧

# 以下操作均在ZCU106平台进行
cd Vitis-AI/examples/Vitis-AI-Library/samples/yolov4
# 启动gdb
gdb

(gdb)file exec/test_video_yolov4
(gdb)set args model/yolo4_tf.xmodel 0 -t 8
(gdb)run
# 查看某进程是否启动
top | grep yolo(进程名)

8. 报错信息

8.1 运行容器docker_run.sh

# 报错信息
bash /bin/bash^m bad interpreter no such file or directory
# or
line $'\r' command not found

# 解决办法
sed -i -e 's/\r$//' setup.sh

8.2 安装vitis2020.1时没有弹出安装窗口

  • vitis2020.1/petalinux2020.1官方支持到ubuntu18.04.4,因此不要安装.6版本的ubuntu
# 终端报错
exception in thread main java.lang.illegalstateexception: no splash screen available
        at java.desktop/java.awt.SplashScreen.checkVisible(Unknown Source)
        at java.desktop/java.awt.SplashScreen.close(Unknown Source)
        at com.xilinx.installer.gui.G.b(Unknown Source)
        at com.xilinx.installer.gui.InstallerGUI.G(Unknown Source)
        at com.xilinx.installer.gui.InstallerGUI.e(Unknown Source)
        at com.xilinx.installer.api.InstallerLauncher.main(Unknown Source)
        
# 解决办法(野办法)
The installer has been tested on my arch OS.

1. backup your /usr/lib/os-release.

2. replace the file content with:

NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

3. run xsetup

4. restore os-release

Good luck.

9. Ubuntu下Conda环境迁移

  • Conda 提供了多种复制项目环境的方法, 创建环境的克隆可以提供定制的基本环境或该环境的快照。conda-pack 可创建特定于平台和操作系统的环境副本, 可以打包包括软件包二进制文件在内的整个环境,这在带宽不足或没有网络的情况下很有用。Conda导出 environment.yml 的方式非常适合在不同平台和操作系统之间重新创建环境, 但需要连接网络 !

9.1 Conda Pack方式

  • Conda-pack 是一个命令行工具,用于打包 conda 环境,其中包括该环境中安装的软件包的所有二进制文件。 当您想在没有网络的系统中重现环境时,此功能很有用。
  • 其他conda打包环境的方法均从其各自的存储库下载软件包以创建环境, 而此方法不需要。注意,conda-pack 指定平台和操作系统,目标计算机必须具有与源计算机相同的平台和操作系统。
  1. 将本地环境打包
# 首先在base环境下安装Conda Pack
pip install conda-pack

# 打包环境
conda pack -n [my_env] -o [out_name].tar.gz
  1. 目标机器内安装环境
  • 在服务器anaconda文件夹的envs目录下创建目标环境文件夹。然后解压即可使用。
cd /home/xuyang/anaconda3/envs/

# -p 指可以多级创建目录
mkdir -p [my_env] 

# -C 后面接文件夹路径 
tar -xzf [my_env].tar.gz -C [my_env] 

# 直接启用python解释器, 使用python而不激活或修复前缀。
# 大多数python库可以正常工作,但需要处理前缀的部分将失败。
./[my_env]/bin/python 

# 激活环境,同时这步操作会将路径`my_env/bin`添加到环境变量path
source ./[my_env]/bin/activate

# 在环境中运行python
(my_env) $ python

# 从激活环境中清除前缀, 只要机器上已经安装了某个版本的python。
# 此步可先不执行, 看环境是否能正常启动运行. 后续报错的话再回来执行这个!
# [prefix: /home/xuyang/anaconda3/envs/772_track] 只要原机器和目标机器安装路径/用户名等一致, 不执行这个应该不会报错! 
(my_env) $ conda-unpack

# 此时,环境与您在此路径直接使用conda安装的环境完全相同。
# 所有脚本都应该工作正常。
(my_env) $ ipython --version

# 停用环境以将其从环境变量 path 中删除
(my_env) $ source my_env/bin/deactivate

# 即可查到虚拟环境列表中已经出现了新加入的虚拟环境。
conda env list

9.2 Environment.yml方式

  • 使用 -export 选项生成一个 environment.yml 文件,以在不同的平台和操作系统之间复现项目环境。 environment.yml 文件不针对特定操作系统,并且使用YAML格式。environment.yml 仅列出了软件包名称,由 conda 基于软件包的名称构建环境, 目标设备需要能联网
  1. 导出environment.yml文件
# 如果当前路径已经有了environment.yml文件,conda会重写这个文件
conda env export > environment.yml
  1. 重现环境
conda env create -f environment.yml

10. Ubuntu_server离线安装软件

10.1 ubuntu离线安装ssh-server

  1. 查看当前的服务器是否安装了ssh-server服务,默认只安装ssh-client服务:

    dpkg -l | grep ssh
    
  2. 首先明确aptapt-get命令的区别:

    • apt-get在安装软件之前先将所需的安装包下载到本地然后再安装;
    • apt命令直接联网安装并不下载
    • 所以可以利用apt-get先下载再安装的特点,来收集所需的离线安装包。
  3. apt-get命令将安装包都下载到/var/cache/apt/archives目录下,为了避免其他安装包的干扰,需要先使用apt clean all命令将该目录下的缓存包清理一下:

    sudo apt clean all
    

    之后,检查一下该路径下只剩下lockpartial两个东西!

  4. 下载所需的deb包到archives路径下:【注意:一定要用apt-get

    # -d:只下载,不安装
    sudo apt-get install -d openssh-server
    
  5. 接下来,需要把除lockpartial之外的所有deb包下载到U盘,然后再到离线的机器上去安装。

  6. 传到离线服务器/home/username/ssh_deb目录下,直接dpkg -i *.deb即可完成安装。

  7. 查看进程是否启动:

    # 如果看到sshd那说明ssh-server已经启动了。
    ps -ef | grep sshd
    
    # 如果没有则可以这样启动:
    sudo /etc/init.d/ssh start
    # or
    sudo service ssh start
    

10.2 ubuntu离线安装MobaXterm

  1. We can use MobaXterm’s portable exe and run it using wine on Ubuntu. MobaXterm portable version could be downloaded from here.

    离线安装wine:

    • 如果正在运行64位Ubuntu Linux系统以安装Wine,则需要首先启用i386架构:

      dpkg --add-architecture i386
      
    • 使用同9.1的方式安装wine:

      # 先到能联网的机器上执行下述指令,一定要用apt-get!
      sudo apt clean all
      sudo apt-get install -y openssh-server
      
      # 传输deb包后,再到离线服务器上执行下述指令
      sudo dpkg -i *.deb
      
  2. Once you have installed wine on your linux distro, you simply need to unzip the file downloaded from the above link (thus revealing the portable exe) and run the exe as:

    wine /path/to/MobaXterm/Portable/exe
    
  3. 添加桌面快捷方式

    • Download MobaXtrem icon and save it on MobaXtrem folder with name icon.jpg

    • Create file .desktop

      cd /usr/share/applications (Global) 
      or
      cd ~/.local/share/applications/ (Local)
      vi mobaXtrem.desktop
      

      and past the content:对路径进行调整

      [Desktop Entry]
      Name=MobaXtrem 
      Exec=env WINEPREFIX="/home/ysellami/.wine" wine /home/ysellami/path/to/MobaXterm/MobaXterm_Personal_22.2_Preview2.exe
      Type=Application
      Icon=/home/ysellami/path/to/MobaXterm/icon.jpg
      StartupNotify=true
      
  4. 如果实在装不上,就使用最原始的ssh终端方式,连接远端设备;此外,还可以在ubuntu下使用vscode实现MobaXterm的ssh连接功能。

    ssh username@192.168.1.103
    # 其中,username为192.168.1.103机器上的用户,需要输入密码。
    # 断开连接:exit
    

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年8月17日
下一篇 2023年8月17日

相关推荐