Vitis AI是 Xilinx 的开发平台,适用于在 Xilinx 硬件平台(包括边缘设备和 Alveo 卡)上进行人工智能算法推理部署。它由优化的IP、工具、库、模型和示例设计组成。Vitis AI以高效易用为设计理念,可在 Xilinx FPGA 和 ACAP 上充分发挥人工智能加速的潜力。
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-boot、kernel、rootfs、device-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:
数据类型:
寄存器类型:reg
reg clk_sys[31:0];
线网类型:wire,tri
//中括号为位宽
wire [31:0] key_flag;
参数类型:parameter,是一个常量(类似于C语言中的define)
运算符
参考视频:从零开始的Vitis教程
硬件要求:由于vivado/vitis安装环境需要,ubuntu系统所在硬件内存32G起(64G推荐),硬盘100G起;需要联网
卸载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配置:
Windows v2ray配置:
vscode
关闭红色波浪线:
更换字体:
字体下载:字体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
下载自己需要版本后,根据以下提示,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
>>>
阅读完信息后,输入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] >>>
一系列安装完成后,输入yes,加入环境变量即可,在之后会提示是否安装VScode,选择no;
完成后开启新的终端,查看 conda 的版本号:
nuc@nuc:~$ conda -V
conda 4.4.10
打开 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
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
sudo apt-get install python-pip
source /opt/ros/melodic/setup.bash
在不在~/.bashrc
里打开文件:
sudo vim /etc/apt/apt.conf.d/10periodic
修改内容为:
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
指令:
# 备份
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
安装Fcitx输入框架
sudo apt install fcitx
安装deb包
sudo dpkg -i sogou*.deb
#如果上述指令有报错,则执行下面一条指令
sudo apt --fix-broken install
进入设置-【Region & Language】,进入【Manage Installed Languages】,输入框架改为fcitx,然后点击上面的Apply System-Wide应用到全局。
重启,登陆后在右上角出现一个键盘标志,点击进入,选择Configure Current Input Method;进入Input Method界面后,选择+号;将下面的Only Show Current Language点掉后,在搜索栏搜索sogou,选中之后进行添加即可。
$ 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
编译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)
edit grub file use sudo gedit /etc/default/grub
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
sudo update-grub
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
Update kernel initramfs, Enter the following linux command to regenerate initramfs:
$ sudo update-initramfs -u
reboot the machine
# 验证nouveau是否已禁用
# 执行下面一条命令,没有信息显示,说明nouveau已被禁用,接下来可以安装nvidia的显卡驱动
lsmod | grep nouveau
基本依赖
sudo apt install gcc g++ make build-essential lightdm
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
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
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!
# 查看本地所有的镜像
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 容器名称
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
在有公网环境下使用 docker pull 命令下载相应的镜像,使用docker images 列出所有镜像:
liuchendeMacBook-Pro:Downloads liuchen$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 102816b1ee7d 3 weeks ago 486MB
使用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
将打包好的镜像传送至内网环境的机器,使用docker load 命令将镜像加载:
liuchendeMacBook-Pro:Downloads liuchen$ docker load -i mysql.tar
Loaded image: mysql:latest
现在使用docker images 就可以查出刚才加载的镜像了。
安装依赖
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
先决条件
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_
docker-ce_
docker-ce-cli_
docker-compose-plugin_
# 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 第三方链接
工作站
Component | Requirement |
---|---|
GPU (Optional, but strongly recommended for quantization acceleration) | NVIDIA GPU supporting CUDA 11.0 or higher, (eg: NVIDIA P100, V100, A100) |
CUDA Driver | NVIDIA-450 or higher for CUDA 11.0 |
Docker Version | 19.03 or higher, nvidia-docker2 |
Operating System | Ubuntu 18.04, 20.04;CentOS 7.8, 7.9, 8.1, 8.2;RHEL 8.3, 8.4 |
CPU | Intel i3/i5/i7/i9/Xeon 64-bit CPU;AMD EPYC 7F52 64-bit CPU |
板卡
Component | Requirement |
---|---|
Alveo | U50, U50LV, U200, U250, U280 cards |
Zynq UltraScale+ MPSoC | ZCU102 and ZCU104 Boards |
Versal | VCK190 and VCK5000 boards |
Kria | KV260 |
配置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进行连接
配置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
搭建 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
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
下载Vitis AI 仓库
git clone --recurse-submodules https://github.com/Xilinx/VitisAI
cd Vitis-AI
下载最新的vitis AI 镜像
docker pull xilinx/vitis-ai-cpu:latest
# 每次执行这个命令,一定要确认是否新建了docker容器
./docker_run.sh xilinx/vitis-ai-cpu:latest
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
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
# 每个终端都要source!除非添加到.bashrc文件中!
source ~/petalinux_sdk_2022.1/environment-setup-cortexa72-cortexa53-xilinx-linux
以resnet50为例,交叉编译样例。编译不报错,生成可执行文件resnet50,则说明前面一切正常。【此项是在linux系统下安装,不是docker容器内!!!】
cd Vitis-AI/examples/VART/resnet50
bash –x build.sh
下载并设置官方镜像到板卡上
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 // 再打开
模型部署
模型下载:从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样例命令:
ID | Example Name | Command |
---|---|---|
1 | resnet50 | ./resnet50 /usr/share/vitis_ai_library/models/resnet50/resnet50.xmodel |
2 | resnet50_pt | ./resnet50_pt /usr/share/vitis_ai_library/models/resnet50_pt/resnet50_pt.xmodel …/images/001.jpg |
3 | resnet50_mt_py | python3 resnet50.py 1 /usr/share/vitis_ai_library/models/resnet50/resnet50.xmodel |
4 | adas_detection | ./adas_detection video/adas.webm /usr/share/vitis_ai_library/models/yolov3_adas_pruned_0_9/yolov3_adas_pruned_0_9.xmodel |
5 | segmentation | ./segmentation video/traffic.webm /usr/share/vitis_ai_library/models/fpn/fpn.xmodel |
这只是虚拟机和主机之间的其中一种文件传输方式,更多方式详见【领航者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
参考链接
基本环境:
Vivado_license_2037.lic
文件导入破解!期间的大坑(前两个如果能联网,则忽略):
make all
的执行肯定会报错。紧接着,在执行make petalinux_proj XSA_DIR=
命令之前,需要先配置petalinux的离线编译环境,将所下载的sstate文件包和download文件包解压放到相应位置,并通过petalinux-config
指令进行配置。随后,再重新执行make petalinux_proj XSA_DIR=
命令。zcu16_base/petalinux/build/tmp/work/aarch64-xilinx-linux/gst-interpipes/1.0.4-r0/git/common
路径下即可。之后,make petalinux_proj XSA_DIR=
命令可顺利执行完成。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。FileZilla
软件传输sd_card.img
文件到Windows系统,但请注意【千万不要选用SFTP-SSH File Transfer Protocol】协议,否则传输的文件会丢失!(本来3.3G的文件变成了1.5G…)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_py
和inception_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 /
3_领航者ZYNQ之嵌入式Linux开发指南_V2.2.pdf
中6.2.10
小节内容,手动给SD卡重新分区;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算法流程,估计算法也能运行。
# 在服务器的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'}"
# 以下操作均在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(进程名)
# 报错信息
bash /bin/bash^m bad interpreter no such file or directory
# or
line $'\r' command not found
# 解决办法
sed -i -e 's/\r$//' setup.sh
# 终端报错
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.
conda-pack
可创建特定于平台和操作系统的环境副本, 可以打包包括软件包二进制文件在内的整个环境,这在带宽不足或没有网络的情况下很有用。Conda导出 environment.yml
的方式非常适合在不同平台和操作系统之间重新创建环境, 但需要连接网络 !Conda-pack
是一个命令行工具,用于打包 conda 环境,其中包括该环境中安装的软件包的所有二进制文件。 当您想在没有网络的系统中重现环境时,此功能很有用。# 首先在base环境下安装Conda Pack
pip install conda-pack
# 打包环境
conda pack -n [my_env] -o [out_name].tar.gz
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
-export
选项生成一个 environment.yml
文件,以在不同的平台和操作系统之间复现项目环境。 environment.yml
文件不针对特定操作系统,并且使用YAML格式。environment.yml
仅列出了软件包名称,由 conda 基于软件包的名称构建环境, 目标设备需要能联网。environment.yml
文件# 如果当前路径已经有了environment.yml文件,conda会重写这个文件
conda env export > environment.yml
conda env create -f environment.yml
查看当前的服务器是否安装了ssh-server服务,默认只安装ssh-client服务:
dpkg -l | grep ssh
首先明确apt
和apt-get
命令的区别:
apt-get
在安装软件之前先将所需的安装包下载到本地然后再安装;apt
命令直接联网安装并不下载。apt-get
先下载再安装的特点,来收集所需的离线安装包。apt-get
命令将安装包都下载到/var/cache/apt/archives
目录下,为了避免其他安装包的干扰,需要先使用apt clean all
命令将该目录下的缓存包清理一下:
sudo apt clean all
之后,检查一下该路径下只剩下lock
和partial
两个东西!
下载所需的deb包到archives
路径下:【注意:一定要用apt-get】
sudo apt-get install -y openssh-server
接下来,需要把除lock
和partial
之外的所有deb
包下载到U盘,然后再到离线的机器上去安装。
传到离线服务器/home/username/ssh_deb
目录下,直接dpkg -i *.deb
即可完成安装。
查看进程是否启动:
# 如果看到sshd那说明ssh-server已经启动了。
ps -ef | grep sshd
# 如果没有则可以这样启动:
sudo /etc/init.d/ssh start
# or
sudo service ssh start
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
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
添加桌面快捷方式
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
如果实在装不上,就使用最原始的ssh终端方式,连接远端设备;此外,还可以在ubuntu下使用vscode实现MobaXterm的ssh连接功能。
ssh [email protected]
# 其中,username为192.168.1.103机器上的用户,需要输入密码。
# 断开连接:exit