【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置

Jetson xavier nx 开发板

一、镜像安装

参考博文Jetson Xavier NX 烧写系统镜像

1.镜像下载

  • 到英伟达官方下载地址https://developer.nvidia.com/zh-cn/embedded/downloads

下载最新版本的镜像。[英伟达密码需要大写小写数字都有]

(参考的博文https://blog.csdn.net/qq_41990294/article/details/108967558;

其中提供的一个百度网盘下载,是7.11的,官方最新的是10.21的,一般不是最新的镜像不可用,所以我下载的官方的)

【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第1张图片

  • 实测有效的下载方法:复制下载链接到迅雷下载,速度很快。

2.用Win32 Diskimg往SD卡里烧录镜像

  • 首先格式化SD卡,用SD Card Formatter。
    把卡插入读卡器,插入电脑中,会有很多盘符文件框蹦出来,挨个关闭。打开formartter,右下角format就格式化完毕。
  • 下载win32Disking.
    下载下来的镜像一般是未解压的文件,没有后缀名,此时解压一下,6G变为了14G的文件sd-blob.img。
    打开win32Disking,将完整路径写到上面,点击读取。
    大约几分钟之后,写入完毕。

3.装系统

  • 将SD卡插入开发板

  • 按照提示一步一步来就很容易能装好

4.开启散热风扇并设置自启动(xavier nx一般不会自动开启,需要手动开,否则会很烫)

sudo sh -c 'echo 140 > /sys/devices/pwm-fan/target_pwm'

上面这条是打开风扇。

也可以在sudo jtop里面调(jtop是一个图形化界面,5.2有装的教程)

风扇自启动设置

(http://www.bubuko.com/infodetail-3616326.html参考连接如上,实测对于我的开发板只有这一个有效)

英伟达的jetson xavier 或者NX打开风扇都是通过修改下面的文件实现的。

vim /sys/devices/pwm-fan/target_pwm

或者直接

sudo sh -c "echo 150 > /sys/devices/pwm-fan/target_pwm"

但是修改上述文件的时候,重启之后失效,因此可以通过设置开启自启动的方式使风扇的设置重启继续生效,下面简单说一下步骤

1.修改 /sys/devices/pwm-fan/target_pwm文件权限

sudo chmod 777 /sys/devices/pwm-fan/target_pwm

2.将 /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/ 目录下面来

sudo ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

3.查看文件内容

cd /lib/systemd/system
ls -lh
sudo vim rc.local.service在末尾添加[install字段],如下:
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]  
WantedBy=multi-user.target  
Alias=rc-local.service

4.创建/etc/rc.local文件,并添加权限

sudo touch /etc/rc.local 
sudo chmod 777 /etc/rc.local 

5.编辑rc.local

vim /etc/rc.local 

然后在rc.local中添加如下内容

#!/bin/bash

echo "150" > /sys/devices/pwm-fan/target_pwm 

这个值在0-255之间,表示风扇转速大小的设置,150噪音比较小也比较好。

以后重启之后就不用手动开启风扇了。

之后就是连网做下面的工作。

5.正式开始之前的工作

5.1配置环境变量

指令通过Alt+Ctrl+T呼叫命令台,然后在命令行输入以下代码并且运行:

sudo gedit ~/.bashrc

打开环境变量文件,在文件最后插入以下环境变量代码:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

ctrl+s保存,接着在命令行内刷新环境变量:

source ~/.bashrc

刷新环境变量以后可以通过查看nvcc版本的指令来查看是否配置好cuda相关的环境变量。新开命令行输入以下代码:

nvcc -V

如果输出如下所示(出了就对了,版本什么的一般都看你镜像版本,我的镜像是jetpack4.4,cuda-10.2):

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_21:14:42_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

到此cuda的环境路径已经配置完毕。

接下来先跳到配置清华镜像那一部分

然后再把系统更新一下,打开software,会自动提示更新

5.2使用Jtop进行内存/CPU/GPU等等资源监视

Jtop是老外的一个Jetson开发者为Jetson系列开发的一个小App,可以通过pip安装,用来监视系统资源使用,温度等等一些关键参数。

可以为你代码运行调试阶段提供一些支持,也可以查看整体的资源占用率,查看当前温度和内存使用是否处于危险的状态。

指令通过Alt+Ctrl+T呼叫命令台,然后在命令行输入以下代码并且运行:

sudo -H pip3 install jetson-stats 
## 上面这句话也会出错,反复试一试不带-H或者sudo
sudo jtop   

如果提示:

sudo: pip:command not found

说明没有安装pip,可通过一下命令进行安装:(默认的是)

  • 对于python3:
  sudo apt-get install python3-pip
  • 对于python2:
sudo apt-get install python-pip

安装完pip之后

sudo apt update 执行一下

即可安装Jtop了。

交换空间大小暂时没有管,该开发板应该性能足够。

二、中文支持功能安装(输入法装完系统也就自动切换了)

1. Jetson Xavier NX安装输入法说明

Jetson Xavier NX是arm架构,而sougoupinyin只支持amd架构,不支持arm架构,因此可以使用采用googlepinyin

在这一步之前先打开系统设置,语言支持,会提示安装更新包,让他更新一下。

2 . Jetson Xavier NX输入法安装及切换

1、安装googlepinyin

sudo apt-get install fcitx-googlepinyin -y

注意:

如果安装失败提示 E: Unable to locate package fcitx-googlepinyin 时,先执行: sudo apt install fcitx,然后再执行安装googlepinyin的命令

2、安装完googlepinyin后,在右上角打开system setting找到Language Support

【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第2张图片

3、然后把Keyboard input method system设置为fcitx
【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第3张图片

4、重启Jetson NX设备

sudo reboot

5、然后就可以在右上角看到googlepinyin的g标志了

在这里插入图片描述

6、切换中英文输入法快捷键

Ctrl + Space

此处也可以设置切换输入法的快捷键。我切换成了shift

7 一般会出现输入候选框无法显示的问题

Fcitx输入中文时不显示候选词框的解决办法

如上所述,在非KDE桌面环境下,如果安装了fcitx-module-kimpanel,可能会导致Fcitx输入中文时不显示候选词框,移除该组件,然后重启Fcixt。我直接重启计算机就可以。

$ sudo apt remove fcitx-module-kimpanel

参考:https://blog.csdn.net/weixin_41275422/article/details/104500683
参考:https://blog.csdn.net/Snow_cat123456/article/details/109450592
参考:https://blog.csdn.net/Chamico/article/details/89788324

三、 系统基础功能相关的安装

由于jetson xavier nx的相关资料匮乏,我参考的jetson nano安装方式,同样是ubuntu18.04,arm架构,道理应该是一样的,目前还未发现有什么差错

参考博文

3.1 更新系统并移除无用软件(主要是要换镜像源)

  • 移除LibreOffice会为系统省很多空间,这个软件对做深度学习和计算机视觉算法也没有太多用
sudo apt-get purge libreoffice*
sudo apt-get clean
  • 接着,更新系统,首选,更换国内安装源:
  1. 备份原先source.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  1. 修改source.list
sudo vim  /etc/apt/sources.list

将以下内容替换原内容(用的清华的源)

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
  1. 更新软件列表
sudo apt-get update 

可能会有如下问题:
E: The repository ‘https://repo.download.nvidia.com/jetson/common r32 Release’ does not have a Release file
【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第4张图片
原因多半是因为设置代理或网络不好,建意更换网络,并执行如下代码:

sudo add-apt-repository universe

再进行更新。
不安全的处理方式:

sudo mv /etc/apt/sources.list.d/nvidia-l4t-apt-source.list ~

这个源与nvidia官方更新有关,如果报错多半与网络有关,换成网速好可上外网的基本就可以解决
\4. 如果有软件需要更新:

sudo apt-get upgrade
这里补充一些ubuntu命令

Ubuntu软件操作的相关命令

sudo apt-get update  更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show package  获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall   重新安装包
sudo apt-get -f install   修复安装
sudo apt-get remove package --purge 删除包,包括配置文件等
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解使用该包依赖那些包
sudo apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get source package  下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖

3.2配置系统级的安装包

下面这几步还不知道和什么有关,先跟着教程做了。应该是基础的东西。

sudo apt-get install build-essential make cmake cmake-curses-gui
sudo apt-get install git g++ pkg-config curl
sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev

联网成功,网速顺利的话,将花费几分钟(可以改安装源,请自行百度)。
接着安装scipy的依赖和系统级别的cython:

Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。

说白了就是数学工具包,做深度学习,计算啥的要用到

Cython是一个编程语言,它通过类似Python的语法来编写C扩展并可以被Python调用.既具备了Python快速开发的特点,又可以让代码运行起来像C一样快,同时还可以方便地调用C library。

说白了就是用python时要用到这个

sudo apt-get install libfreetype6-dev 
sudo apt-get install protobuf-compiler libprotobuf-dev openssl
sudo apt-get install libssl-dev libcurl4-openssl-dev
sudo apt-get install cython3

如果要装TensorFlow Object Detection (TFOD) API ,还要装xml的工具:

sudo apt-get install libxml2-dev libxslt1-dev

接着安装opencv的系统级依赖,一些编解码的库:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libxvidcore-dev libavresample-dev
sudo apt-get install libtiff-dev libjpeg-dev libpng-dev

3.3更新CMake

Cmake是一个编译工具,目前我用到的代码相关的东西都要用到它,它可以跨平台,所以比较普遍

本步骤为可选步骤,可以不做。更新cmake,能帮助正确从源码来编译安装opencv(尽管nano装完后自带opencv):

这一步我也跟着做的,版本号没换,jetson nano上经过实验没有问题。

wget http://www.cmake.org/files/v3.13/cmake-3.13.0.tar.gz  #下载,版本号可到官网上查
tar xpvf cmake-3.13.0.tar.gz cmake-3.13.0/  #解压
cd cmake-3.13.0/
./bootstrap --system-curl
make -j4 #编译
echo 'export PATH=~/cmake-3.13.0/bin/:$PATH' >> ~/.bashrc
source ~/.bashrc #更新.bashrc

这样就更新完cmake

3.4配置python环境(创建虚拟环境)

先安装pip,python的包管理工具:

sudo apt-get install -y python3-dev python3-testresources python3-setuptools 
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
rm get-pip.py

下文中将使用pip来安装python的一些包,对于一些网络不好的情况,建议先改变pip的安装源到国内:

#如清华的源
https://pypi.tuna.tsinghua.edu.cn/simple
#豆瓣源
https://pypi.doubanio.com/simple
#临时改源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
#持久的设为默认源
pip -U install pip 
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#如果您到 pip 默认源的网络连接较差,临时使用镜像站来升级 pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
1234567891011

我们将使用python的虚拟环境,来保证你使用的环境互相独立,使用体验与全局python环境 一样。

使用virtualenv和virtualenvwrapper安装命令:

sudo pip install virtualenv virtualenvwrapper

安装完之后,需要更新.bashrc

vim ~/.bashrc

在文件底部输入

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs #指定所有的需拟环境的安装位置
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #指定解释器
source /usr/local/bin/virtualenvwrapper.sh #进行激活生效

保存并退出,使用source 重新载入

source ~/.bashrc

更多virtualenv使用的基本命令可以阅读本文
接着创建python的虚拟环境,

mkvirtualenv nano #创建一个名字叫nano的虚拟环境

在这里插入图片描述
创建后直接进入了。

一些virtualenvwrapper的常用命令:

#创建一个环境
mkvirtualenv name #在~/.virtualenvs下安装name的需拟环境
#激活工作环境
workon name
#workon后不加任何东西可以列出所有虚拟环境
#退出当前虚拟环境
deactivate
#删除虚拟环境,需先退出
rmvirtualenv name
#列出所有虚拟环境
lsvirtualenv
#复制虚拟环境
cpvirtualenv sourece_name dest_name

四、安装pytorch(坑比较多,只针对我这次安装的步骤)

参考博客

4.1 首先进入虚拟环境装numpy1.16.1(我装的开发板只有这个版本可行,算是个大坑)

在虚拟环境中安装numpy和cython:

pip install cython
pip install numpy==1.16.1

一定要是numpy1.16.1,后面重装cv2的时候他自动换成了1.19.1,会直接导致报错:非法指令(核心已转储)

这也是一直困扰着我一开始import torch报错的原因,目前还没有博客提到过

因为需要编译,用时大约20分钟。
同时安装numpy时可能会报错:
numpy/core/src/multiarray/numpyos.c:18:10: fatal error: xlocale.h: No such file or directory
在这里插入图片描述

博客中这块还有一部分内容,但是我用了之后反而不行了

安装其他常用库这里也可以先不用,到时候缺什么装什么

4.1.0 Opencv的安装(需安装与numpy1.16.1对应的版本4.1.1)

系统自带4.1.1的opencv,正是因为这个原因,上一步才只能安装numpy1.16.1

系统中已将tensorrt和opencv的相关组件安装完成,如下图:
在这里插入图片描述
可以看到有uff,tensorrt,graphsurgeon,cv2模块,只需要将这些包的路径填加到虚拟环境的环境变量中即可。

workon nano
add2virtualenv /usr/lib/python3.6/dist-packages
lssitepackages #列出所有的包

【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第5张图片

4.2 装pycuda和onnx(可能不需要)

要使用tensorrt对各种主流框架(tensorflow,pytorch,caffe)的模型时行转换和加速,还要安装pycuda和onnx

pip install pycuda
pip install onnx==1.4.1 

关于onnx的版本也选择了较低的,也可以安装最新的,可能会报错,这时也可以再降级。

这两个可能是非必要的,因为当时torchvision提示找不,有人说要装一个pycuda。

4.3 装pytorch和torchvision

这里有几个大坑,不同的开发板情况不一样,仅为我装的这个xavier nx的经验。

这里有不同情况,我装的时候有一次按照官方流程(博文的流程)装只出现了一个错误,就是安装torchvision时提醒找不到cuda.h文件,此时只需要参考末尾,在环境变量里添加两条命令(需要改成10.2)就可以继续安装

第二个不同情况,提示不能执行:/usr/local/cuda:/usr/local/cuda:usr/local:cuda/usr/local/cuda/bin/nvcc,这是因为环境变量里有点毛病,gedit ~/.bashrc看一下环境变量有没有歧义,这里我参照网上的方法,export CUDA_HOME=/usr/local/cuda-10.0

首先贴出我安装的过程:

还是先参考博文的部分内容,本节末尾有总结。


执行jtop命令,按6,查看当前jetpack版本,选择合适的pytorch版本进行安装。
【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第6张图片
可以看来系统版本是jetpack4.4.1,是当前(2020年11月13日)最新的。
下面列举几个版本的要求:
【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第7张图片
选择安装最新版本pytorch1.7

wget https://nvidia.box.com/shared/static/wa34qwrwtk9njtyarwt5nvo6imenfy26.whl -O torch-1.7.0-cp36-cp36m-linux_aarch64.whl #需要科学上网
workon nano_ptch (
pip install torch-1.7.0-cp36-cp36m-linux_aarch64.whl

鉴于网络原因,我把pytorch1.7上传到CSDN中,免费下载。
接着安装torchvision,由于torchvision的版本要与pytorch的版本对应,所以要选择合适版本,版本对应关系如下:
PyTorch v1.0 - torchvision v0.2.2
PyTorch v1.1 - torchvision v0.3.0
PyTorch v1.2 - torchvision v0.4.0
PyTorch v1.3 - torchvision v0.4.2
PyTorch v1.4 - torchvision v0.5.0
PyTorch v1.5 - torchvision v0.6.0
PyTorch v1.6 - torchvision v0.7.0
PyTorch v1.7 - torchvision v0.8.1
安装命令为:

git clone --branch <version> https://github.com/pytorch/vision torchvision   # see below for version of torchvision to download
cd torchvision
export BUILD_VERSION=0.x.0  # where 0.x.0 is the torchvision version  
sudo python setup.py install     # use python3 if installing for Python 3.6
cd ../  # attempting to load torchvision from build dir will result in import error

具体对应pytorch1.7时:

git clone --branch v0.8.1 https://github.com/pytorch/vision torchvision   # see below for version of torchvision to download
cd torchvision
export BUILD_VERSION=0.8.1  # where 0.x.0 is the torchvision version  
sudo python setup.py install     # use python3 if installing for Python 3.6
cd ../  # attempting to load torchvision from build dir will result in import error

如果提示没有setuptools就执行这条命令重新装一下:

sudo apt-get install -y python3-dev python3-testresources python3-setuptools

要验证一下pytorch和torchvision是否安装成功,如下:
【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置_第8张图片
使用命令为如图4条:

import torch
print(torch.__version__)
print('cuda available:'+str(torch.cuda.is_available()))
print('cuDNN version:'+str(torch.backends.cudnn.version()))

到此,完成主流深度学习框架tensorflow和pytorch在jetson nano上的安装。


总结

1. 对应版本装pytorch

目前我的几套算法要在torch1.5和torch1.7上跑

所以在开发板上装的是pytorch1.7

版本对应信息上说是要装torchvision0.8.1

但是我装的这个一直装不上0.8.1版本的,而且我记得装上了也因为有些组件(好像是Ops)用不了,被迫重装低版本的。

2. 开始安装的步骤

(1)首先下载pytorch1.7(上述博文里有链接下载,官网上比较慢)

(2)进入到下载下来.whl文件的目录,执行下面的这条命令。

pip install torch-1.7.0-cp36-cp36m-linux_aarch64.whl

​ 即可看到torch装好了。

但是目前只有执行python3的程序中才可以正常import torch,对于sudo python, sudo python, python里面都不行

报的错误有:

①段错误,核心已转储

②非法指令,核心已转储

③找不到torch

上面两个是因为numpy的原因,下面这个是因为在sudo python下执行的原因,网上有的是环境变量的问题,但是我这个应该不是,具体深入原因我也没弄清

(3)安装torchvision。(我目前jetson xavier nx上装的是0.2.2 jetson nano上装的是0.3.0)(之前装过低版本的发现遇到了功能不全的问题,后面能用的还是0.8.1,注意问题跳转至踩坑经验1)

用的命令是:

pip install --no-deps torchvision==0.2.2

–no-deps就是不会自动让他更新版本(可能不用加这个也行)


至此已装好torch和torchvision。

踩坑经验

1. 遇到一个坑,安装torchvision0.8.1的时候,一个cpp文件找不到,是因为在环境变量中没有添加c++相关的一个环境变量,此时添加

export C_INCLUDE_PATH=/usr/local/cuda-10.2/include/{C_INCLUDE_PATH}

export CPLUS_INCLUDE_PATH=/usr/local/cuda-10.2/include/{CPLUS_INCLUDE_PATH}

在继续执行就可以了。这个再装torchvision0.8.1的时候可能会用到。

2. 找不到torchvision.model模块,这个是因为我一开始装的torchvision0.8.1,装了找不到,不知道是什么原因。

五、根据自己的实际情况安装需要的包

opencv等之前装过的这时候会提示再装一遍。

这部分都很顺利,缺什么就安装什么。

有时候下载会莫名其妙中断,比如下matplotlib的时候,是因为国外服务器下载的问题,这时候多下几次就行,也可以换个网或者换个镜像源。

你可能感兴趣的:(物联网,深度学习,pytorch,边缘计算)