Nvidia-Xavier-NX配置记录

Nvidia嵌入式设备配置记录

前言

目前arrch64架构下可直接利用的二进制文件不多,因此大部分功能包或库都是通过源码编译的形式进行安装,源码编译的方式对平台没有要求,但安装过程比较繁琐且很容易出现路径找不到的问题,所以写了这份文档,记录一下安装过程中遇到的问题,但是目前来看,最新版本的库(如opencv-python)都已经提供了arrch64架构的二进制文件,未来的安装流程应该能够得到简化。

一.安装miniforge(arrch64架构下的anaconda)

参考:https://blog.csdn.net/abc13526222160/article/details/106710163

NVIDIA Jetson Xavier 使用的aarch64架构是没法使用anaconda的,虽然可以自己编译,但是conda指令是没法编译到aarch64架构上运行的。不过有替代品,名字是miniforge。

  1. 进入GitHub主页可以看到需要下载的对应平台的.sh文件的名称:
    在这里插入图片描述

  2. 点击进行下载,下载后执行以下命令:

    sh Miniforge-pypy3-Linux-aarch64.sh
    
  3. 其他步骤与平时在Linux平台安装anaconda无异(一路yes即可)

  4. 镜像源加速:

    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
    
  5. 创建虚拟环境与环境激活

    # 创建虚拟环境,其中envname为环境名称,后边命令可选定python版本,目前arrch64架构下的pytorch只支持3.6
    conda create -n envname python=3.6
    
    # 环境激活
    conda activate envname
    

执行完上面的步骤就可以安装一些库了,如numpy、pillow(推荐先下载,后面会用到):

pip install numpy==x.x.x
# or
conda install numpy==x.x.x

这里推荐的安装方式是指定库的版本,在不指定的情况下(以pip安装为例):

pip install numpy

以上命令将会安装最新版本的numpy,但是最新版本的库都会存在某些不稳定、未完全适配的情况,假如发生类似导入(import)失败的问题,不妨试试降级,选取一些早期较为稳定的版本。

ps:pillow经测试不指定版本直接下载最新版能稳定运行

  1. 关于版本的确定,可以上浏览器搜索pypi(python package index,python包索引),进入后在搜索框输入需要安装的库(这里以numpy为例):

在这里插入图片描述

  1. 对于一些常用库而言,一般第一个就是我们需要的,可以看到目前numpy已经更新到1.20.1版本了,然而这并非我们想要安装的

在这里插入图片描述

  1. 点进去之后,可以看到左侧有历史版本的选项,点击Release history后右侧就会显示该包的所有历史版本,个人建议选择与最新版本相差约半年到一年的版本

在这里插入图片描述

  1. 之后返回终端安装心仪的对应版本即可

二.配置cuDNN

Xavier虽然安装了cuDNN,但没有将对应的头文件、库文件放到cuda目录。Xavier中cuDNN的头文件在:/usr/include,库文件位于:/usr/lib/aarch64-linux-gnu

  1. 将头文件与库文件复制到cuda目录下:

    cd /usr/include && sudo cp cudnn.h /usr/local/cuda/include
    cd /usr/lib/aarch64-linux-gnu && sudo cp libcudnn* /usr/local/cuda/lib64
    
  2. 修改文件权限:

    sudo chmod 777 /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
    
  3. 重新连接:

    cd /usr/local/cuda/lib64
    sudo ln -sf libcudnn.so.8.0.0 libcudnn.so.8
    sudo ln -sf libcudnn_ops_train.so.8.0.0 libcudnn_ops_train.so.8
    sudo ln -sf libcudnn_ops_infer.so.8.0.0 libcudnn_ops_infer.so.8
    sudo ln -sf libcudnn_adv_infer.so.8.0.0 libcudnn_adv_infer.so.8
    sudo ln -sf libcudnn_cnn_infer.so.8.0.0 libcudnn_cnn_infer.so.8
    sudo ln -sf libcudnn_cnn_train.so.8.0.0 libcudnn_cnn_train.so.8
    sudo ln -sf libcudnn_adv_train.so.8.0.0 libcudnn_adv_train.so.8
    
  4. 编译:

    sudo ldconfig
    
  5. 测试:

    sudo cp -r /usr/src/cudnn_samples_v8/ ~/
    cd ~/cudnn_samples_v8/mnistCUDNN
    sudo chmod 777 ~/cudnn_samples_v8
    sudo su		# 获取权限,不然下一步会报错
    sudo make clean && make
    ./mnistCUDNN
    

如果配置成功 测试完成后会显示:“Test passed!”,如下图所示:

img

三.安装Pytorch、TorchVision

参考:

1.Pytorch安装

NVIDIA提供了Pytorch基于Arrch64架构的.whl二进制安装文件,进入相关网站点击相应版本号就可以获取对应二进制文件。

  1. 安装依赖项

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install git cmake python3-dev
    sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
    sudo apt-get install libopenblas-base libopenmpi-dev
    sudo apt-get install libjpeg-dev zlib1g-dev
    
  2. 激活conda环境后,配置python环境

    pip3 install testResources setuptools
    pip3 install mpi4py
    pip3 install Cython
    
  3. 进入https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-8-0-now-available/72048选择对应的PyTorch版本,下载的时候要翻墙

在这里插入图片描述

  1. 进入下载目录,执行以下命令:

    # x代表你下载的版本
    pip install torch-x.x.x-cpxx-cpxxm-linux-arrch64.whl
    
  2. 安装成功后验证

    >>> import torch
    >>> torch.__version__
    
  3. 能够打印版本号即安装成功

2.TorchVision安装

  1. 下载Pytorch对应TorchVision版本:

在这里插入图片描述

  1. 创建一个文件夹专门存放后期编译源码:

    # 从现在开始下载的编译源码全部放在packages的文件夹中
    # 从https://github.com/pytorch/vision下载文件并命名为torchvision,v0.x.0指代对应torchvision版本
    cd ~
    mkdir packages
    cd packages
    git clone --branch v0.x.0 https://github.com/pytorch/vision torchvision
    
  2. 执行安装命令:

    cd torchvision
    # 在激活的环境下执行安装
    sudo python setup.py install
    
  3. 验证安装:

    >>> import torchvision
    >>> torchvision.__version__
    

3.源码编译安装TorchVision遇到的问题

1)找不到cuda系文件

问题描述:fatal error: cuda.h: No such file or directory

在安装过程中会发生定位不到cuda相关文件的问题,如:

command ':/usr/local/cuda/bin/cuda.h' failed with exit status1

unable to execute ':/usr/local/cuda/bin/nvcc': No such file or directory

fatal error: cuda.h: No such file or directory

但开发板是默认安装了cuda并配置好环境变量,一般发生此类情况都是环境变量问题,仔细观察会发现报错的路径里多加了**一个冒号**,因此修改环境变量即可,环境变量中的多个路径一般是以":"作为分割符分开:

~$ echo $PATH							# 显示当前环境变量
/usr/local/sbin:/usr/local/bin     # 显示举例,多个路径中间用":"隔开
~$ PATH="$PATH:/home/workdir"     # 添加"/home/workdir"目录
/usr/local/sbin:/usr/local/bin:/home/workdir    # 显示举例,多个路径中间仍用“:”隔开

那么如果某个环境变量是被第一次定义,此时我想添加"/usr/local/bin"目录:

# 变量MYPATH是第一次定义
~$ export MYPATH="$MYPATH:/usr/local/bin"

打印此变量:

~$ echo $MYPATH
:/usr/local/bin

能够发现此类添加方法会导致输出路径的错误,而cuda的默认环境变量便是这么设置的,由于是第一次定义,因此系统查找的是错误的路径,从而产生无法定位的问题。

解决方案:用vim或gedit修改~目录下的.bashrc文件:

export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
# 将上面的语句修改成:
export CUDA_HOME=/usr/local/cuda
# 或者
export CUDA_HOME=/usr/local/cuda:$CUDA_HOME

保存退出后执行source .bashrc后继续执行安装

2)找不到libavcodec/avcodec.h

问题描述:fatal error: libavcodec/avcodec.h: No such file or directory

  • 方法一:忽略它,修改setup.py文件,将if has ffmpeg改为if False即可:

在这里插入图片描述

  • 方法二:找到文件并复制到指定文件夹下:

    首先先看出错的执行步骤:

在这里插入图片描述

这部分执行了gcc对源码进行编译,其中通过-I命令选择了包含头文件的所在位置,错误的原因就是在这几个位置中找不到libavcodec/avcodec.h,因此找到缺失文件并复制一份到指定目录下即可,这里挑/usr/include的原因就是它最短,方便:

~$ locate avcodec.h			# locate用于查找定位文件
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h		# 可以看到libavcodec这个文件夹并不在所包含的路径内
~$ sudo cp -r /usr/include/x86_64-linux-gnu/libavcodec /usr/include/libavcodec

之后再次执行安装就可以了

四.安装OpenCV(cv2)

安装了jetpack4.2以上版本,通常已经自带opencv,但由于该opencv功能不全面,我们需要删除并自行安装其他版本

强烈建议参考:https://blog.csdn.net/weixin_46135347/article/details/114190250#comments_15215042,顺便给个三连

删除旧版/安装新版
  1. 安装相关依赖并删除原来的opencv:

    # 安装依赖
    ~$ 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 libtiff-dev libdc1394-22-dev
    ~$ sudo apt install libjasper-dev	# 注意这个依赖,很有可能出现定位失败问题
    # 删除原来opencv
    ~$ sudo apt-get purge libopencv*
    ~$ sudo apt autoremove
    ~$ sudo apt-get update
    
  2. 下载opencv及opencv_contrib:

    ~$ cd ~/packages
    ~$ git clone --branch x.x.x https://github.com/opencv/opencv.git			# x.x.x代表opencv版本
    ~$ cd opencv-x.x.x
    ~$ git clone --branch x.x.x https://github.com/opencv/opencv_contrib.git	# 将contrib下载到opencv文件夹内
    ~$ mkdir build		# 在opencv目录下新建build
    
  3. 下载cmake-gui并打开:

    ~$ sudo apt-get install cmake-qt-gui
    ~$ sudo cmake-gui
    
  4. 源代码选择下载的opencv文件夹,存放二进制文件的位置选择刚刚创建的build文件夹,然后点击Configure:

在这里插入图片描述

  1. 之后会生成一堆红色的东西,在里面要使能NONFREE模块并指定EXTRA_MOUDLES_PATH为contrib文件夹下的modules:

在这里插入图片描述

  1. 由于目前还没有相关平台的python版opencv二进制文件,所以python版的opencv也通过编译的方式进行安装,这里推荐用anaconda的base环境下的python3作为编译器:

在这里插入图片描述

  1. 选择完毕后再次执行Configure,直到所有项目变为白色,点击Generate:

在这里插入图片描述

  1. 完成后进入build文件夹:

    ~$ make
    ~$ sudo make install
    
  2. 找到编译完成的so文件并放到需要的环境下:

    ~$ sudo find / -name "cv2.*"
    /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so	# 这几个目录及名称不一定一样,需要根据自己的结果进行放置
    ~$ sudo mv /usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so  /home/sl/miniforge-pypy3/envs/yolo/lib/python3.6/site-packages/cv2.so
    
  3. 测试:

    >>> import cv2
    >>> cv2.__version__
    
  4. 至此opencv-python的配置基本完成,接下来配置C++下的opencv环境变量、链接库:

    ~$ sudo gedit /etc/ld.so.conf.d/opencv.conf		# 可能是个空文件
    
  5. 将以下命令添加到最后:

    /usr/local/lib
    
  6. 退出文件后输入以下命令配置库:

    ~$ sudo ldconfig
    
  7. 更改环境变量:

    ~$ sudo gedit /etc/bash.bashrc
    
  8. 在文件后添加:

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    export PKG_CONFIG_PATH
    
  9. 退出文件后输入以下命令完成配置更新:

    ~$ source /etc/bash.bashrc
    ~$ sudo updatedb
    
依赖包定位失败问题(Ubuntu)

在安装依赖包的过程中,有一个依赖包,libjasper-dev在使用命令

~$ sudo apt-get install libjaster-dev
errorE: unable to locate libjasper-dev

解决方法:

sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
sudo apt update
sudo apt install libjasper1 libjasper-dev
可能遇到的下载问题(以window为例)

一般而言,由于墙的问题,在cmake执行configure后会弹出一些下载错误(下图是IPPICV下载失败的例子):

在这里插入图片描述

我们按照下栏找到编译日志的路径,点开CMakeDownloadLog.txt,看你所缺失的文件,也就是下载失败的文件,我们要做的就是手动下载正确的文件来替换掉他们:

在这里插入图片描述

怎么看这些东西呢,现在举个例子:

#do_copy "boostdesc_bgm.i" "0ea90e7a8f3f7876d450e4149c97c74f" 
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i" 
"D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d"
#missing "D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d/boostdesc_bgm.i"
#check_md5 "D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i"
#copy "D:/OpenCV/opencv/contrib_new/downloads/xfeatures2d/boostdesc_bgm.i" "D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i"

你的缺失文件是:boostdesc_bgm.i,其MD5值是:0ea90e7a8f3f7876d450e4149c97c74f,你需要做的是把这个文件下载回来,并改成相应的文件名放到指定的文件路径下。
下载的网址是:https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i

在这里插入图片描述

其实进去下载网址后会看到像上面这堆东西,你要做的就是"右键-另存为"

同时保存的文件名要改成相应的名称:MD5值+“-”+文件名,即例子中最后一行的:0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
存放文件的路径是:D:/OpenCV/opencv/sources/.cache/xfeatures2d/boostdesc

按着这个方法,去下载所缺失的文件,并放到相应的路径替换掉它们。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值