一、 基本介绍

NX开发板全名Jetson Xavier NX(后简称为NX),是NVIDIA英伟达提供的模组和开发者套件,保持Jetson Nano小巧尺寸的同时拥有相当于Jetson TX2的10倍以上的高性能。其预制基于ARM架构下的Ubuntu系统,提供GPU环境,大大提升了强化学习算法的训练速度。

图为NX开发板示意图,其中各部分组成如下:
1.用于主存储的microSD卡插槽
2.40针扩展引脚
3.Micro-USB端口
4.千兆以太网端口
5.USB 3.1 A 端口 (x4)
6.HDMI 输出端口
7.DP接口
8.19V直流电源插孔
9.MIPI CSI 摄像头接口

表1  NX技术参数

GPU

NVIDIA Volta architecture with 384 NVIDIA CUDA® cores and 48 Tensor cores

CPU

6-core NVIDIA Carmel ARM®v8.2 64-bit CPU 6 MB L2 + 4 MB L3

DL Accelerator

2x NVDLA Engines

Vision Accelerator

7-Way VLIW Vision Processor

Memory

8 GB 128-bit LPDDR4x @ 51.2GB/s

Storage

microSD (not included)

Video Encode

2x 4K @ 30 | 6x 1080p @ 60 | 14x 1080p @ 30 (H.265/H.264)

Video Decode

2x 4K @ 60 | 4x 4K @ 30 | 12x 1080p @ 60 | 32x 1080p @ 30 (H.265)
2x 4K @ 30 | 6x 1080p @ 60 | 16x 1080p @ 30 (H.264)

Camera

2x MIPI CSI-2 DPHY lanes

Connectivity

Gigabit Ethernet, M.2 Key E (WiFi/BT included), M.2 Key M (NVMe)

Display

HDMI and display port

USB

4x USB 3.1, USB 2.0 Micro-B

Others

GPIO, I2C, I2S, SPI, UART

Mechanical

103 mm x 90.5 mm x 34.66 mm

       为实现强化学习算法在NX上成功运行,需要配置相应的环境。其主要难点在于ARM架构下强化学习相关平台的调用,例如Pytorch和Tensorflow的安装。由于官方基本不提供ARM架构下的软件支持,NVIDIA推出了一系列安装包以使得强化学习平台适配NX。

  1. 预先准备

空白TF(MicroSD)卡(建议SanDisk 64GB金卡及以上,保证容量和读写速度)

读卡器(保证读写速度)

支持DP或HDMI接口的外接显示器

USB键鼠(NX需要外接显示器及键鼠实现输出、输入)

  1. 环境配置具体流程

3.1  NX刷机

NX通过调用SD卡中的内容运行系统,因此需要预先对SD卡进行烧录,此过程需要利用空白SD卡。

1)下载NX开发板套件(SDCard Image)

下载链接:https://developer.nvidia.com/embedded/downloads

点击下载可能需要登录Nvidia的账号,文件大小大概6GB左右。

或使用链接:

https://developer.nvidia.com/jetson-nx-developer-kit-sd-card-image

2)下载烧录工具

下载链接:https://www.balena.io/etcher/

下载解压后安装软件,准备烧录TF卡。

3)烧录TF卡

点击Flash form file选择刚才下载好的SD Card Image压缩包

将TF卡插入到读卡器,并插入到电脑主机的USB口,点击select target选择要烧录到的TF卡(有的也会自动识别TF卡)

点击Flash,输入root密码后,进行烧录,根据读卡器、TF卡等的速度不同,烧录花费的时间也有不同。

4)开机启动

将烧录好的TF卡插入NX开发板,按照NVIDIA官方说明的操作,连接好鼠标、键盘、显示器、最后连接电源,开发板将自动启动。

开机后将进入系统配置的界面,语言选择”English”,地点选择中国上海,创建用户名、密码和计算机名,配置完成后系统会重新启动。

刷机成功!

3.2  NX相关组件安装

1)版本检查命令行

驱动版本:head -n 1 /etc/nv_tegra_release

内核版本:uname -r

操作系统:lsb_release -i -r

CUDA版本:nvcc -V

cuDNN版本:dpkg -l libcudnn8

opencv版本:dpkg -l libopencv

Tensorrt版本:dpkg -l tensorrt

若无法查询到CUDA和cuDNN版本,解决方法如下:

利用gedit打开 ~ 路径下.bashrc文件,终端输入:

sudo vim ~./bashrc

在文件的最后添加以下内容(按a进入编辑模式,按esc退出编辑模式,按:wq保存文件后回车即可退出(注意有冒号)):

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

重新执行.bashrc文件,直接生效;

source ~./bashrc

此时即可利用前述命令查看CUDA和CUDNN版本。

2)换源

添加国内清华源,首先需要备份原本的source.list文件,防止误操作后无法恢复。

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak    #备份原文件
sudo gedit /etc/apt/sources.list

然后删除所有内容,复制下列内容到到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

之后打开终端输入:

sudo apt-get update

换源成功!注意处理器是aarch64架构的Ubuntu 18.04.2 LTS系统类型的,要使用与之匹配的源。

3)python3及pip3安装

NX开发套件中预装的python版本为2.7,但由于现在强化学习用到的更多的版本为python3,在此介绍直接安装python3的方法,下一节将介绍如何在NX中利用anaconda配置python3及强化学习环境。

直接在终端输入:

sudo apt-get install python3-pip python3-dev

之后将pip升级为最新版:

python3 -m pip install --upgrade pip  #升级pip

4)远程桌面控制软件NoMachine

软件下载地址:https://www.nomachine.com/

注意NX开发板要选择对应的NoMachine for ARM版

下载后安装即可使用。

Ubuntu系统下安装deb文件命令:

sudo dpkg -i nomachine_6.10.12_1_arm64.deb 

5)安装Jetson-stats管理工具

利用该软件可以查看cpu 电源,gpu的使用 频率和调度等情况。

在pip配置好的情况下,直接在终端pip3安装:

pip3 install jetson-stats

安装好后输入:

jtop

即可查看NX开发套件的各项资源使用情况,按 q 结束退出。

3.3  强化学习环境配置

运行强化学习需要的基本环境有:python3、tensorflow、pytorch及其他依赖等。通常利用anaconda对不同项目进行管理,conda可以为不同的项目创建不同的虚拟环境,不同的虚拟环境中python版本和依赖均可不同。便于项目的管理、运行和迁移。NX通常以强化学习算法的运行平台而不是算法的训练平台出现,因此不需要利用conda对环境进行管理。且由于conda中的许多命令不支持arm架构下的算法环境,通常不采用此方法。接下来的环境配置将基于前文中已做换源处理的系统python3展开,直接在终端进行配置即可。同时,对conda的安装和使用也做简要介绍,配置者可根据需要灵活运用。

1)Miniconda安装

下载链接:

https://docs.conda.io/en/latest/miniconda.html

创建文件夹:mkdir miniconda

下载安装包至文件夹中并转到文件夹:cd miniconda

安装:

bash Miniconda3-latest-Linux-x86_64.sh

安装过程中会弹出软件协议条款,直接按下Ctrl+C便可以跳过阅读过程,直接按照提示,输入yes,然后按回车键,同意软件协议条款。接下来继续按回车,将miniconda安装到电脑上。安装好之后,出现提示:

这一步务必输入yes,保证安装之后的正常使用。重启终端之后,就可以正常使用miniconda了。

重启终端,然后分别执行如下命令,更换conda和pip的软件源,提高软件的下载安装速度:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

再次重启终端之后,你会发现每次打开终端默认都会自动进入到miniconda的base环境中,终端中多了“base”字样。将拖慢终端打开速度,并且有可能干扰到其它软件的安装。每次打开终端之后先执行conda deactivate命令退出则非常麻烦。执行如下命令,便可以解决终端每次打开都进入conda的base环境的问题:

conda config --set auto_activate_base false

创建conda环境:

conda create -n RL python=3.7

其中RL为创建的虚拟环境名称,可自定义。

查看conda环境:

conda env list

激活conda环境:

conda activate RL

关闭conda环境:

conda deactivate RL

删除conda环境:

conda env remove --name RL

 值得注意的是,conda环境在现有的源中已无法直接在ARM结构下创建python3.6的虚拟环境,因此前文所写为3.7。若采用conda环境配置后续环境,需要注意python版本与Pytorch、Tensorflow等的版本对应关系!接下来的安装与配置均建立在系统环境基础上,不建立在conda环境基础上。 

2)Pytorch安装

官方下载链接:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-11-now-available/72048

安装依赖:

sudo pip3 install -U pip testresources setuptools
sudo apt-get install libopenblas-base libopenmpi-dev
sudo pip3 install mpi4py
sudo pip3 install Cython

下载Pytorch-1.6.0的.whl文件:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-6-0-now-available/72048

下载完成拷贝到NX后,进行安装,注意文件存放位置和执行命令的位置相一致,输入命令:

pip3 install torch-1.6.0-cp36-cp36m-linux_aarch64.whl

安装完成后测试:

python
>>>import torch
>>>print(torch.cuda.is_available())  #测试cuda是否能用
>>>True  #返回Ture说明cuda能用

安装torchvision:

sudo apt-get install libjpeg-dev zlib1g-dev
git clone --branch  v0.7.0 https://github.com/pytorch/vision torchvision

如果git下载失败,可以使用码云将https://github.com/pytorch/vision导入,然后如图选择,选择完成后进行下载。

cd进入到目录中,git命令下载时修改了文件名称,为torchvision(码云默认下载为vision,无修改)cd路径自行判断。

cd vision
sudo python3 setup.py install

安装到最后需要pillow包,最后可能会下载失败。但是torchvision已经安装成功了,输入命令pip3 list可以看到。

pip3 install ‘pillow<7’

安装pillow包即可。

验证程序:

import torch
print(torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print('cuDNN version: ' + str(torch.backends.cudnn.version()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))

 

3)Tensorflow安装

官方教程:https://forums.developer.nvidia.com/t/official-tensorflow-for-jetson-agx-xaviernx/141306

查看jetpack版本:

sudo apt-cache show nvidia-jetpack

安装依赖:

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
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools
sudo pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11

安装tensorflow:

Tensorflow与nv和jetpack版本对应表如下:

https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform-release-notes/tf-jetson-rel.html#tf-jetson-rel

tensorflow-gpu已更名为tensorflow,因此根据官方教程安装:

sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 ‘tensorflow<2’

 4)Pycharm安装

由于采用ARM架构,NX中的Pycharm安装首先需要配置java环境,终端输入:

sudo apt-cache search openjdk 
sudo apt-get install openjdk-8-jdk

安装结束后可输入 java -version 确认是否安装成功

输入

which javac

输入

file /usr/bin/javac

输入

file /etc/alternatives/javac

输入

file /usr/lib/jvm/java-8-openjdk-arm64/bin/javac

输入

sudo gedit ~/.bashrc 

在文件的最下方输入:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存后,关闭gedit

输入

source ~/.bashrc

Java环境配置完成!

Pycharm安装包官方下载链接:https://www.jetbrains.com/pycharm/download/#section=linux

网盘链接:

链接:https://pan.baidu.com/s/1tQfSeoO8WmpgHKX6q_51fA

提取码:4umy 
在下载位置输入解压命令

tar -zxvf pycharm-community-2020.1.1.tar.gz

解压完成后输入sudo mv pycharm-community-2020.1.1/ /opt将安装文件移动到opt下。

输入

/opt/pycharm-community-2020.1.1/bin/pycharm.sh启动Pycharm

安装过程中的数据分享选择Don't Send,设置选择Skip Remaining and Set Defaults,安装成功!

打开Pycharm后将其锁定在左侧菜单栏中,以便下次打开。

若未锁定则通过/opt/pycharm-community-2020.1.1/bin/pycharm.sh打开

 

Pycharm安装完成后若遇到不报错但无法运行强化学习代码的情况,例如Illegal instruction(core dumped)问题,解决方法如下:

终端输入

sudo vi ~/.bashrc

在最后添加:

export OPENBLAS_CORETYPE=ARMV8

然后再输入

source ~/.bashrc

即可成功运行!