最近需要将自定义的TensorFlow模型部署在JETSON XAVIER NX DEVELOPER KIT,这里记录一些如何安装TensorFlow以及OpenCV的方法
具体安装方法参见Getting Started With Jetson Xavier NX Developer Kit
进入TeamViewer官网,选择Raspberry Pi
选项,点击Scarica Host
下载host
版本的teamviewer
,我这里下载版本为:teamviewer-host_15.10.5_armhf.deb。进入下载文件目录,输入以下命令:
# 由于下载文件架构为armhf,因此需要添加armhf架构
sudo dpkg --add-architecture armhf
# 系统更新
sudo apt update
# 安装teamviewer
sudo dpkg -i teamviewer-host_15.10.5_armhf.deb
注意如果出现报错,原因是确实armhf需要的依赖,运行如下命令:
sudo apt --fix-broken install
安装完成后进入桌面,进入软件界面就能看到已安装的TeamViewer
图中所示为我已经连上了的截图,点击进入TeamViewer,在右上角状态栏会有图标,点击显示状态对话框,就可以进行一系列的连接操作了
可选安装[Linux系统常用的安装包
]
# apt-get install apt-utils
apt-get install apt-utils
# apt-get install iputils-ping
apt-get install iputils-ping
# apt-get install net-tools
apt-get install net-tools
# ps
apt-get install procps
由于我所购买的NVIDIA Jetson Xavier
使用的arm64
架构是没法使用anaconda
的,强行安装不仅麻烦还容易出现各种问题,因此我们选择安装miniforge
miniforge与miniconda的区别在于miniforge的下载通道是conda-forge
miniforge的github地址:https://github.com/conda-forge/miniforge
miniforge的.sh release下载地址:https://github.com/conda-forge/miniforge/releases
直接在网址中下载最新版就行了,下载后执行sh
文件,比如我这里下载文件为Miniforge-pypy3-4.8.5-2-Linux-aarch64.sh
sh Miniforge-pypy3-4.8.5-2-Linux-aarch64.sh
注意:这里需要添加环境变量,否则会出现bash:conda Command not found
这种找不到命令的错误,如下执行:
# 编辑环境变量
vim ~/.bashrc
# 增加环境变量
export PATH=/home/moemil/miniforge-pypy3/bin:$PATH
# 激活环境变量
source ~/.bashrc
# 显示(base)
source activate
注意设置为自己的安装路径
更换conda源
conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
更换pip源
mkdir ~/.pip
cd ~/.pip
vi pip.conf
[global]
index-url = https://pypi.mirrors.ustc.edu.cn/simple/
通过 ESC wq 保存即可
创建和使用的方式与传统PC Linux系统的Anaconda相同,相比于Windows则是多个一个conda
前缀,XXX为你想要为环境命的名
conda create -n XXX python=3.6
conda activate XXX
安装硬件温度检测工具sensors
sudo apt install lm-sensors
安装成功以后,输入
sensors
系统会显示当前温度,一般不开风扇的话系统温度能达到40度左右(我这里是已经开着风扇了)
在任意路径下,输入
sudo nvpmodel --query
会显示当前的运行模式,我所购买的板子有四种运行模式,在右上角NVIDIA图标可以查询得到,如下所示:
首先输入
jetson_clocks
通过以下命令可以查看板子的运行情况,如下所示:
# 安装 jetson-stats
sudo -H pip install jetson-stats
# 查看状态
sudo jtop
通过以下命令可以控制风扇的运行情况,如下所示:
# 为文件赋予权限
sudo chmod 777 /sys/devices/pwm-fan/target_pwm
# 设置占空比 255为最大转速,0为停止,设置在这个范围之间
sudo echo 255 > /sys/devices/pwm-fan/target_pwm
根据官网的指引,以此输入以下指令,这部分指令的目的是安装依赖,属于通用型的
# 安装TensorFlow所需的系统软件包:
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
# 安装和升级pip3
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools=49.6.0
# 安装Python软件包依赖项
sudo pip3 install -U numpy==1.16.1 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
然后根据自己的选择安装TensorFlow2.x版本,还是TensorFlow1.x版本
注意:从20.02 TensorFlow版本开始,软件包名称已从tensorflow-gpu 至 tensorflow
# 使用以下命令安装TensorFlow点3命令。该命令将安装与JetPack 4.4兼容的最新版本的TensorFlow
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 tensorflow
# TensorFlow版本2是最近发布的,与TensorFlow 1.x并不完全向后兼容。如果您希望使用TensorFlow 1.x软件包,可以通过将TensorFlow版本指定为小于2来安装它
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 ‘tensorflow<2’
# 如果要安装特定版本的JetPack支持的TensorFlow的最新版本,请发出以下命令
sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v$JP_VERSION tensorflow
其中JP_VERSION为使用的JetPack版本,例如 42 对于JetPack 4.2.2
或,33 对于JetPack 3.3.1
等,JetPack版本可用如下命令查询:
head -n 1 /etc/nv_tegra_release
例如我的版本是4.3,因此我在安装时使用
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 tensorflow
或
sudo pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v43 tensorflow==2.1.0 + nv20.3
具体的适配可以参见官方文档
TensorFlow Version | NVIDIA TensorFlow Container | JetPack Version |
---|---|---|
2.3.0 | 20.09 | 4.4 |
2.2.0 | 20.08, 20.07, 20.06 | 4.4 |
2.1.0 | 20.04 | 4.4 |
20.03, 20.02 | 4.3 | |
1.15.3 | 20.09, 20.08, 20.07 | 4.4 |
1.15.2 | 20.06, 20.04 | 4.4 |
20.03, 20.02 | 4.3 | |
Older packages below are installed as tensorflow-gpu; more recent releases above as tensorflow. | ||
2.0.0 | 20.01, 19.12 | 4.3 |
19.11 | 4.2.x | |
1.15.0 | 20.01, 19.12 | 4.3 |
19.11 | 4.2.x | |
1.14.0 | 19.10, 19.09, 19.07 | 4.2.x |
1.14.0 | 19.09 | 3.3.1 |
1.13.1 | 19.05, 19.04, 19.03 | 4.2.x |
由于OpenCV是自带了的,所以直接将开发板自带的路径拷贝至我们的虚拟环境即可
# 拷贝链接并重命名为cv2
ln -s /usr/lib/python3/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so cv2.so
下载opencv以及opencv_contrib源码,在opencv中创建一个build文件夹,进入此文件夹,在终端输入:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/moemil/opencv_contrib/modules -D PYTHON3_EXECUTABLE=/home/moemil/miniforge-pypy3/envs/guoquanhao_tf2/bin/python -D BUILD_EXAMPLES=ON -D BUILD_opencv_python3=ON ..
在此期间,我一共报了两种错误,一种是文件的缺失,我们需要把如下文件手动拷贝到opencv_contrib/modules/xfeaturesd/src
下
这些缺失的文件报错方式如下:
/home/moemil/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: 没有那个文件或目录
#include "boostdesc_bgm.i"
^~~~~~~~~~~~~~~~~
compilation terminated.
modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/build.make:91: recipe for target 'modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.o' failed
make[2]: *** [modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.o] Error 1
CMakeFiles/Makefile2:12621: recipe for target 'modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/all' failed
make[1]: *** [modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
这些报错都是文件缺失造成的,可能是网络原因造成的无法下载,因此我们可以在opencv/build/CMakeDownloadLog.txt
查找到这些文件及其下载地址,将其下载下来即可(或创建一个同名文件将其代码复制下来)
第二个错误是找不到系统文件错误,发生在features2d
,只需要将opencv下的features2d拷贝到build下即可,最后就会完成编译,编译与安装的指令如下:
sudo make -j8
sudo make install
sudo ldconfig
最终成功后我发现仍然没有cv2模块也找不到cv2的链接,因此妥协了系统自带的cv2链接,我也不知道为什么,这里留个足迹
此部分根据自己环境的需求选用,旨在介绍如何更换CUDA以及CUDNN
由于安装完成后的TensorFlow使用的是CUDA10.0以及CUDNN7,而系统预装的是CUDA10.2以及CUDNN8,因此需要更换CUDA以及CUDNN,首先需要加入下载源,进入sources.list
加入以下行:
deb https://repo.download.nvidia.com/jetson/common r32 main
deb https://repo.download.nvidia.com/jetson/t210 r32 main
然后执行
sudo apt-get update
sudo apt install cuda-toolkit-10-0
sudo apt-get install libcudnn7
完成后,设置环境变量
vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH
source ~/.bashrc
输入nvcc -V
查看CUDA版本
在其目录下我们可以找到自己安装的CUDA10.0以及原始的CUDA10.2,可以自行设置环境变量
通过tf.test.is_gpu_available()
查看是否支持GPU,最终发现为True,说明设置成功(之前CUDA10.2时为False,忘了放图)
这里就完成了一整个TensorFlow的安装以及CUDA、CUDNN的替换