基于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-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:
- 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为软件】
- 创建vivado工程
- 使用IP集成器创建Process System
- 生成顶层HDL
- (生成Bitstream)并导出到SDK
- 在SDK中创建应用工程
- 板级验证
- 嵌入式最小系统:使系统正常工作的最小条件;所有系统的公共基础部分。
1.3 petalinux设计流程
- 搭建vivado工程,导出hdf文件;
- 创建一个petalinux工程;
- 将hdf文件导入petalinux工程(将vivado设计应用到petalinux工程);
- 配置petalinux工程(其中包括配置内核、U-Boot及根文件系统);
- 编译petalinux工程(U-Boot镜像、内核镜像及rootfs、bitstream,fsbl镜像文件);
- 启动开发板。
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 lightdmpip 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
-
下载自己需要版本后,根据以下提示,enter键继续向下:
nuc@nuc:~/Downloads$ bash Anaconda3-5.1.0-Linux-x86_64.sh Welcome to Anaconda3 5.1.0In 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
- 可能的问题
- no pip:
sudo apt-get install python-pip
- catkin_make不成功:检查
source /opt/ros/melodic/setup.bash
在不在~/.bashrc
里
- no pip:
-
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.baksudo 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 搜狗输入法
-
安装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,选中之后进行添加即可。
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.13vision@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 REQUIREDPATH /your/path/to/opencv-3.4.13/buildNO_DEFAULT_PATH)
2.6 NVIDIA相关驱动
2.6.1 Nvidia pre-settings
-
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
2.6.2 Nvidia driver
- 注意RTX 4090等较新的显卡一定要安装较新的驱动,老版本已经不支持了!
-
基本依赖
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
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-libssudo 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镜像
-
在有公网环境下使用 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 就可以查出刚才加载的镜像了。
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
(oramd64
),armhf
,arm64
, ands390x
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 硬件需求
-
工作站
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
4.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进行连接
-
配置NFS服务
-
后面进行 Linux 驱动开发的时候需要 NFS 启动;
sudo apt install nfs-kernel-server sudo mkdir -p ~/linux/nfssudo 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
groupsudo 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 thevitis-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
- 安装交叉编译环境:【此项是在linux系统下安装,不是docker容器内!!!】
-
cd Vitis-AI/setup/mpsocsudo 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环境变量:【此项是在linux系统下安装,不是docker容器内!!!】
-
# 每个终端都要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
4.2 板卡配置
-
下载并设置官方镜像到板卡上
-
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 loiface lo inet loopbackauto eth0iface eth0 inet static #static的作用是不需要虚拟机给我自动分配IP地址address 192.168.1.4netmask 255.255.255.0gateway 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
-
4.3 访问板卡方法
- 串口
- 波特率:115200
- 数据位:8
- 停止位:1
- 校验位:no
- 以太网
- ssh连接方式:ssh username@IP
- 单机
- 键盘、鼠标、屏幕直接连到板卡,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 vsftpdsudo 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
-
期间的大坑(前两个如果能联网,则忽略):
- 在执行第一阶段期间,
make all
的执行肯定会报错。紧接着,在执行make petalinux_proj XSA_DIR=<xsa dir path>
命令之前,需要先配置petalinux的离线编译环境,将所下载的sstate文件包和download文件包解压放到相应位置,并通过petalinux-config
指令进行配置。随后,再重新执行make petalinux_proj XSA_DIR=<xsa dir path>
命令。 - 在执行第一阶段期间,上述离线编译环境配置完成后,还是会报错,经过对报错信息的分析发现,还是需要再下载一个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>
命令可顺利执行完成。 - 在执行第二阶段期间,第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。 - 在执行第二阶段期间,第5步【烧录SD卡】期间,可能会涉及到使用
FileZilla
软件传输sd_card.img
文件到Windows系统,但请注意【千万不要选用SFTP-SSH File Transfer Protocol】协议,否则传输的文件会丢失!(本来3.3G的文件变成了1.5G…) - 在执行第二阶段期间,第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_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 /
- 以上扩容办法不行,尚未找到解决办法,应对措施如下:
- 正常使用balenaEtcher软件烧录到SD卡;
- 将SD卡中两个分区中的文件备份出来;
- 按照
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算法流程,估计算法也能运行。
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 availableat 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=bionic3. run xsetup4. restore os-releaseGood luck.
9. Ubuntu下Conda环境迁移
- Conda 提供了多种复制项目环境的方法, 创建环境的克隆可以提供定制的基本环境或该环境的快照。
conda-pack
可创建特定于平台和操作系统的环境副本, 可以打包包括软件包二进制文件在内的整个环境,这在带宽不足或没有网络的情况下很有用。Conda导出environment.yml
的方式非常适合在不同平台和操作系统之间重新创建环境, 但需要连接网络 !
9.1 Conda Pack方式
Conda-pack
是一个命令行工具,用于打包 conda 环境,其中包括该环境中安装的软件包的所有二进制文件。 当您想在没有网络的系统中重现环境时,此功能很有用。- 其他conda打包环境的方法均从其各自的存储库下载软件包以创建环境, 而此方法不需要。注意,conda-pack 指定平台和操作系统,目标计算机必须具有与源计算机相同的平台和操作系统。
- 将本地环境打包
# 首先在base环境下安装Conda Pack
pip install conda-pack# 打包环境
conda pack -n [my_env] -o [out_name].tar.gz
- 目标机器内安装环境
- 在服务器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 基于软件包的名称构建环境, 目标设备需要能联网。
- 导出
environment.yml
文件
# 如果当前路径已经有了environment.yml文件,conda会重写这个文件
conda env export > environment.yml
- 重现环境
conda env create -f environment.yml
10. Ubuntu_server离线安装软件
10.1 ubuntu离线安装ssh-server
-
查看当前的服务器是否安装了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
10.2 ubuntu离线安装MobaXterm
-
We can use MobaXterm’s
portable exe
and run it usingwine
onUbuntu
. 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 theportable exe
) and run theexe
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 username@192.168.1.103 # 其中,username为192.168.1.103机器上的用户,需要输入密码。 # 断开连接:exit
相关文章:
基于ZCU106平台部署Vitis AI 1.2/2.5开发套件【Vivado+Vitis+Petalinux2020/2022】
Vitis AI是 Xilinx 的开发平台,适用于在 Xilinx 硬件平台(包括边缘设备和 Alveo 卡)上进行人工智能算法推理部署。它由优化的IP、工具、库、模型和示例设计组成。Vitis AI以高效易用为设计理念,可在 Xilinx FPGA 和 ACAP 上充分发…...
ChatGPT原理简介
承接上文GPT前2代版本简介 GPT3的基本思想 GPT2没有引起多大轰动,真正改变NLP格局的是第三代版本。 GPT3训练的数据包罗万象,上通天文下知地理,所以它会胡说八道,会说的贼离谱,比如让你穿越到唐代跟李白对诗,不在一…...
从0搭建Hyperledger Fabric2.5环境
Hyperledger Fabric 2.5环境搭建 一.Linux环境准备 # root登录 yum -y install git curl docker docker-compose tree yum -y install autoconf autotools-dev automake m4 perl yum -y install libtool autoreconf -ivf # 安装jq相关包 cd /opt git clone --recursive https…...
Rust每日一练(Leetday0026) 最小覆盖子串、组合、子集
目录 76. 最小覆盖子串 Minimum Window Substring 🌟🌟🌟 77. 组合 Combinations 🌟🌟 78. 子集 Subsets 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Gola…...
c# 从零到精通-ArrayList-Hashtable的操作
c# 从零到精通-ArrayList-Hashtable的操作 1、ArrayList的操作 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test11 { class Program { static void Main(string[] args) { ArrayList list …...
pnpm带来了什么
首先 pnpm 和 npm yarn 一样是包管理工具,他解决了npm 和 yarn 存在的一些问题 npm3之前每个依赖都是一层嵌套一层的,每个依赖里都有node_modules 用来存放依赖所需的依赖包导致重复下载的依赖包很多,一层层嵌套,嵌套很深&#x…...
图像分类模型嵌入flask中开发PythonWeb项目
图像分类模型嵌入flask中开发PythonWeb项目 图像分类是一种常见的计算机视觉任务,它的目的是将输入的图像分配到预定义的类别中,如猫、狗、花等。图像分类模型是一种基于深度学习的模型,它可以利用大量的图像数据来学习图像的特征和类别之间…...
GIT安装教程(入门)
目录 前言 Git作者 官网 GIT优点 GIT缺点 为什么要使用 Git 下载以及安装步骤 一、官网下载 二、GIT安装步骤 1、安装get程序 2、许可声明 3、选择安装路径 4、选择git组件 5、创建菜单名称 6、 git文件默认编辑器 7、设置新存储库中初始分支的名称 8、调整Pa…...
全志V3S嵌入式驱动开发(触摸屏驱动)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 所谓的触摸屏,其实就是在普通的lcd屏幕之上,再加一层屏而已。这个屏是透明的,这样客户就可以看到下面lcd屏幕的…...
死信队列详解
什么是死信队列? 在消息队列中,执行异步任务时,通常是将消息生产者发布的消息存储在队列中,由消费者从队列中获取并处理这些消息。但是,在某些情况下,消息可能无法正常地被处理和消耗,例如&…...
我用ChatGPT写2023高考语文作文(五):北京卷I
2023年 北京卷 I 适用地区:北京 “续航”一词,原指连续航行,今天在使用中被赋予了新的含义,如为青春续航、科技为经济发展续航等。 请以“续航”为题目,写一篇议论文。 要求:论点明确,论据充实&…...
《微服务实战》 第二十八章 分布式锁框架-Redisson
前言 Redisson 在基于 NIO 的 Netty 框架上,充分的利⽤了 Redis 键值数据库提供的⼀系列优势,在Java 实⽤⼯具包中常⽤接⼝的基础上,为使⽤者提供了⼀系列具有分布式特性的常⽤⼯具类。使得原本作为协调单机多线程并发程序的⼯具包获得了协调…...
局部搜索,变邻域搜索算法
目录 局部搜索 02 变邻域搜索算法 局部搜索 1.1 局部搜索是什么玩意儿? 官方一点:局部搜索是解决优化问题的一种启发式算法。对于某些计算起来非常复杂的优化问题,比如各种NP-难问题,要找到最优解需要的时间随问题规模呈指数增长,因此诞生了各种启发式算法来退而求其次…...
软件工程实训——第一天
第一天 前后分离 前端:android 后端:springbootmbatis-plus 高心星 软件工程的思维来开发项目 问题定义 可行性研究 需求分析 概要设计 详细设计 编码 测试 维护 需求分析 1.用户的信息管理 2.新增支出 3.新增收入 4.支出统计 5.收入…...
嵌入式C语言中if/else如何优化详解
观点一(灵剑): 前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。 当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅…...
【LSTM】读取时间序列数据 | 时间序列数据的小批量划分方法
由于序列数据本质上是连续的,因此我们在处理数据时需要解决这个问题。当序列过长而不能被模型一次性全部处理时,我们希望能拆分这样的序列以便模型方便读取。 Q:怎样随机生成一个具有n个时间步的mini batch的特征和标签? A&…...
K8s in Action 阅读笔记——【12】Securing the Kubernetes API server
K8s in Action 阅读笔记——【12】Securing the Kubernetes API server 12.1 Understanding authentication 在上一章中,我们提到API服务器可以配置一个或多个认证插件(授权插件也是同样的情况)。当API服务器接收到一个请求时,它…...
爆肝整理,3个月从功能进阶自动化测试,一跃成测试卷王...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 首先先了解自动化…...
人生这场概率游戏,怎么玩
只会标准答案,是不可救药的愚蠢 那么为了便于理解,我用一些典型的案例来讲解,什么是概率游戏,以及这个游戏,应该怎么玩。 比如典型的相亲,婚恋。人生大事,用标准答案来说,你的意中人…...
Redis笔记
缓存过期时间很重要!redis是单线程的 对于内存过多的3中方案: 惰性删除: 在定时删除的基础上,对于已经过期了的数据,redis的随机选择算法一直没有选中这个数据,所以导致它就一直没被删除,但是…...
centos 安装supervisor并运行网站
前言 之前一直用宝塔的**进程守护管理器【Supervisor】**来启动一些项目,如ThinkPHP、Hyperf的项目,或laravel的一些命令。如果不用宝塔怎么办呢? 一、简介[supervisor] [Supervisor] 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支…...
Hadoop面试题十道
问题 1:Hadoop是什么? 答案:Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理。它基于Google的MapReduce和Google文件系统(GFS)的思想,旨在解决大数据量的处理和分析问题。…...
使用Docker-Compose对Docker容器集群快速编排
目录 一、Docker-Compose1、Docker-Compose使用场景2、Docker-Compose简介3、Docker-Compose安装部署4、YAML 文件格式及编写注意事项5、Docker Compose配置常用字段6、Docker Compose 常用命令7、Docker Compose 文件结构8、docker Compose撰写nginx 镜像9、docker Compose撰写…...
React-Redux 对Todolist修改
在单独使用redux的时候 需要手动订阅store里面 感觉特别麻烦 不错的是react有一个组件可以帮我们解决这个问题, 那就是react-redux。 react-redux提供了Provider 和 connent给我们使用。 先说一下几个重点知道的知识 Provider 就是用来提供store里面的状态 自动getState()co…...
初识微信小程序
新建小程序 创建一个新的微信小程序项目: 打开微信开发者工具,点击“新建项目”。 在弹出的窗口中,填写小程序的 AppID、项目名称和项目目录等信息。 点击“确定”按钮,等待微信开发者工具自动下载并安装所需的依赖库和框架。 …...
我们该如何入门编程呢
提醒:以下内容仅做参考,可自行发散。在发布作品前,请把不需要的内容删掉。 随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?选择编程语言:选择一种编程…...
App 软件开发《判断6》试卷及答案
App 软件开发《判断6》试卷及答案 文章目录 App 软件开发《判断6》试卷及答案判断题(对的打“√”,错的打“”;共0分)1.”ionic resources --icon"命令用于生成适应不同分辨率的App图标所应用的图片。(✔)2&#…...
MVC工作原理
MVC工作原理 有视图的情况 1.客户端(浏览器)发起请求,DispatcherServlet拦截请求。 2.DispatcherServlet根据请求信息调用HandlerMapping。HandlerMapping根据uri去匹配查询能处理的Handler(也就是我们所说的Controller&#x…...
使用 Redis 统计网站 UV 的方法
使用 Redis 统计网站 UV 的方法(概率算法) 文章目录 前言思路HyperLogLog 使用 Redis 命令操作使用 Java 代码操作 HyperLogLog 实现原理及特点使用 Java 实现 HyperLogLog小结 前言 网站 UV 就是指网站的独立用户访问量Unique Visitor,即相同用户的多次访问需要…...
黑客工具软件大全
黑客工具软件大全100套 给大家准备了全套网络安全梓料,有web安全,还有渗透测试等等内容,还包含电子书、面试题、pdf文档、视频以及相关的网络安全笔记 👇👇👇 《黑客&网络安全入门&进阶学习包》 &a…...
建设银行大连市分行网站/服务营销案例
以下面的HTML5代码为例来学学习页面的百分比布局: <div class"comic"><img src"fate.png" alt"Fate"><h1>Fate</h1> </div> <div class"comic"><img src"hulk.png" alt…...
网站时间特效/免费网站建设
格式转换代码见下边,就是代码运行起来很慢,想看看大家是否有优化方案Number of segment pairs 182; number of pairwise comparisons 40 means given segment; - means reverse complementOverlaps Containments No. of Constraints Supporting Overla…...
做包子网站/搜索历史记录
ASP.NET笔试题是ASP.NET程序员面试必须经历的,一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷两个都要注意反正面是否都有内容不要遗漏,如果考你机试一般也有两种,就是程序连接数据库或一些基本的算法(二分查找…...
政府网站wap门户建设方案/bt种子万能搜索神器
cmd命令 1.system 导出全部表结构和数据 注意 :1.导出服务器的地址 192.168.1.252:1521/orcl 2. 登录名 ownerorcl (当前用户的登录名) 3. 导出文件的位置 fileD:\oracle\zkgs 4. 导出日志文件的位置 logD:\oracle\zkgs exp system/format192.168.1.252:1521/…...
男人与女人做视频网站/站长工具seo推广 站长工具查询
一、下载安装文件百度网盘:链接:https://pan.baidu.com/s/1SerJrXnVS774lcHY58KIww提取码:txyr二、安装openoffice1、将下载的安装文件上传到linux你指定的目录下,这个没有固定的目录,你放在那里的可以。如图ÿ…...
用asp做网站流程/重庆森林台词
今年的面试主要是技术面试 1、项目是怎么做的 常规问题 --略 2、判断项目的可以上线的标准是什么? ①与需求一致,符合客户的要求 ②用例执行完成 ③bug和研发、产品这边确定必须改的改完 ④进行release版本回归无bug 3、给你一个登陆功能࿰…...