1.基本介绍
NX开发板全名Jetson Xavier NX(后简称为NX),是NVIDIA英伟达提供的模组和开发者套件,保持Jetson Nano小巧尺寸的同时拥有相当于Jetson TX2的10倍以上的高性能。
其预制基于ARM架构下的Ubuntu系统,提供GPU环境,大大提升了强化学习算法的训练速度。
为实现强化学习算法在NX上成功运行,需要配置相应的环境。其主要难点在于ARM架构下强化学习相关平台的调用,例如Pytorch和Tensorflow的安装。由于官方基本不提供ARM架构下的软件支持,NVIDIA推出了一系列安装包以使得强化学习平台适配NX。
NX开发板深度学习环境和普通Ubuntu电脑配置有所区别
NX开发板先配置cuda/cudnn基准环境(固定),后配置conda
普通Ubuntu电脑先配置conda基准环境,后建环境可配置多种cuda/cudnn
2. 预先准备
我购买是这一套包含主板和其他附属外设
京东地址:https://item.m.jd.com/product/10020215075135.html?utm_campaign=t_1001328990
●国产NX 8+16
●128G M.2 接口的固态硬盘
●支持DP或HDMI接口的外接显示器
●USB键鼠(NX需要外接显示器及键鼠实现输出、输入)
3. NX系统基本环境搭建
3.1 安装 NVIDIA SDK管理器
接下需要你在安装有ubuntu 系统的电脑内配置 sdkmanager 工具,可直接安装 u 盘资料里面提供的 sdkmanager 安装文件,或者在 ubuntu 系统访问官方网址下载对应版本https://developer.nvidia.com/nvidia-sdk-manager,注册NVIDIA 开发者账号后就可以下载,使用网易、新浪、Yeah 邮箱等注册,详情可看指导视频。
3.2 准备硬件
DC 电源端口接入 19V 电源, Micro-usb 端口接入配套的 Micro USB 线连到上一步骤配置好ubuntu 系统的电脑上,载板引脚 FC REC 与 GND 用跳线短接进入恢复模式即进入了刷机状态。(从右往左短接第二个和第三个引脚)
3.3 NX刷机
在 ubuntu 系统上打开一个终端,输入sdkmanager登录 NVIDIA 账号,选择登录方式为 Developer 账户(跳转到 NVIDIA 网页登录确认)。
3.3.1 配置开发环境
在 Step 01 Development Environment 窗口中,选择以下内容:
从 Product Category 面板中,选择 Jetson。
在 Hardware Configuration
中,选择主机和目标硬件(不用勾选 Host Machine)。
(如果连接了 Jetson 设备,虚拟机会弹出一个连接 USB 设备的窗口 ,选择连接到虚拟机。
SDK Manager
将在“目标硬件”下拉列表中自动选择它(Jetson Xavier NX)。如果未自动检测到设备,单击刷新,确保Detected。若仍不行可以尝试换根数据线,一定要确保自动检测到硬件设备才可进行下一步;)
在 Target Operating System 中,选择操作系统和 JetPack 版本,我的设备是 Jetson Xavier NX ,选择的是 Jetpack4.5.1 版本,大家根据情况自行选择;
单击继续以进行下一步。
3.3.2 查看组件并接受许可
在 Step 02 Details and License 窗口中,您可以展开主机组件和目标组件面板以查看将安装在系统上的组件,这里因为核心模组 eMMC 只有 16G,我们只选择 Jetson OS 主机组件。
如果希望安装文件下载到默认路径以外的位置,可以手动选择 change 安装路径;
选择我接受,以接受许可协议的条款和条件;选择继续下一步。
3.3.3 开始安装
在安装开始之前,SDK Manager 会提示输入 ubuntu 主机密码。
如果需要查看IP,登录路由器查看即可
然后会显示软件下载和安装的进度,这时可以把短接的跳线拔了
下载完成
刷机完成后,断开电源,接上显示屏连接线,再通电启动就能进入 ubuntu 系统设置界面。
官网 SDK Manager 教程 https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html
3.4 设置SSD启动
产品配套的资料 U 盘里面有挂载 SSD 配套的视频教程,也可以参考视频教程配置,改成以 SSD
3.4.1 设置您已安装的SSD
运行系统可以加快读取速度,让使用上更顺畅。
安装您的 并启动,然后打开菜单并进行搜索 Disks
启动磁盘应用程序,您将看到安装好的 128G 固态硬盘,单击右上角三条横项选项,选择格式化(Format Disk),选择预设的 GPT,再次确认要格式化(Format),接着输入系统密码,授权进行格式化。
单击+号进行分区,选择主分区的大小,本文建议主分区容量为 112GB,大家可以根据自身需求做调整,单击 NEXT进行下一步。
给分区起个名称,类型要选择 Ext4,然后单击 Create,提示输入系统密码,设置完成。
现在,您已成功创建分区,但它还没有挂载。让我们使用命令安装它,幸运的是,Jetson 系统已经将这些命令集成到外壳脚本中。让我们运行它,使系统启动从 SSD 启动。
3.4.2 将根源从eMMC复制到SSD
先更新一下系统软件,方便进入github
首先,复制该项目,打开一个终端,输入
git clone https://github.com/jetsonhacks/rootOnNVMe.git
进入目录
cd rootOnNVMe
根源文件复制到您的 SSD
./copy-rootfs-ssd.sh
3.4.3 启用从SSD启动
运行./setup-service.sh 后重新启动系统以使服务生效。
重启系统后桌面左侧列表出现如下红色 SD 文件夹表示 SSD 挂载成功。
这样所有16G的系统盘就迁移到了SSD固态硬盘中,后期开发再也不会遇到存储空间不够的情况。如果NX不能正常启动,就把SSD固态硬盘拆下来格式化在装上去就会退回到NX刷机的系统。
3.5 Jetson SDK Components
接下来开始第二次刷机,就会在SSD固态硬盘中安装这些组件,如cuda、cudnn
版本:
Jetpack 4.5.1 》cuda 10.2》cudnn 8.0
这次刷机完成之后就可以打开终端重启sudo reboot,接下来会检查安装的效果。
第2种方法:直接输入
安装cuda10.2 sudo apt-get update sudo apt-get install cuda-toolkit-10-2
安装cuDNN
首先查看仓库提供的cuDNN有哪一些。terminal输入
sudo apt-cache policy libcudnn8
如果没有的话可以查看
sudo apt-cache policy libcudnn7
以此类推
我NX的JetPack 4.5.1安装cuda-10.2之后libcudnn8只有一个版本.则键入
sudo apt-get install libcudnn8
即可。若有要选择版本的话
sudo apt-get install libcudnn8=(*.*.*.**+cuda*** )
3.6 NX相关组件安装
3.6.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
在文件的最后添加以下内容(按i进入编辑模式,按esc退出编辑模式,按:wq保存文件后回车即可退出(注意有冒号)):
export PATH=/usr/local/cuda-10.2/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export CUDA_ROOT=/usr/local/cuda
重新执行.bashrc文件,直接生效;
source ~./bashrc
此时即可利用前述命令查看CUDA和CUDNN版本。
3.6.2 换源
一般国内使用Ubuntu系统无法定位软件包就是网络问题,这种情况就采用换源的方法解决。因此添加国内清华源,首先需要备份原本的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.6.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
超级终端开发得力助手
sudo apt install terminator
3.6.4 xrdp 远程桌面工具
Linux配置
#安装xrdp服务 sudo apt-get install xrdp #安装xfce4并配置相关文件 sudo apt-get install xfce4 echo xfce4-session > ~/.xsession cd ~ touch .session sudo vim /etc/xrdp/startwm.sh # 在文件前面添加: xfce4-session
此时使用远程桌面连接可能会出现登录闪退
Jetson NX的Ubuntu系统只允许每个账户在一个设备上登录,无法同时在两个设备上登录。而
nano在插电开机时默认自动登录账户,因此需要取消自动登录,具体方法:
sudo gedit /etc/gdm3/custom.conf # 找到AutomaticLoginEnable和Automatic Login行,注释掉 # AutomaticLoginEnable=true # Automatic Login=[user1]
重启xrdp,重启机器
# 重启服务 sudo service xrdp restart # 重启机器 sudo reboot
Windows打开远程桌面工具
采取Windows自带远程桌面工具,使用win+r输入打开mstsc
输入目标ip,以及用户名(在显示选项中打开输入用户名)
使用Windows远程连接,输入ip、用户名、密码,成功获得Linux桌面界面
如果需要安装qq,官网地址:https://im.qq.com/linuxqq/index.shtml
安装方法一直
sudo dpkg -i 《qq文件名》
3.6.5 安装Jetson-stats管理工具
利用该软件可以查看cpu 电源,gpu的使用 频率和调度等情况。
在pip配置好的情况下,直接在终端pip3安装:
打开terminal
sudo apt-get install python3-pip sudo -H pip3 install jetson-stats
安装完成之后直接在terminal中输入
jtop
即可查看NX开发套件的各项资源使用情况,用鼠标查看和控制NX的相关外设,按 q 结束退出。
6.功耗模式选择,风扇输出速度控制
7.NX系统环境信息
4. 深度学习环境配置
运行强化学习需要的基本环境有:python3、tensorflow、pytorch及其他依赖等。通常利用anaconda对不同项目进行管理,conda可以为不同的项目创建不同的虚拟环境,不同的虚拟环境中python版本和依赖均可不同。便于项目的管理、运行和迁移。NX通常以强化学习算法的运行平台而不是算法的训练平台出现,因此不需要利用conda对环境进行管理。且由于conda中的许多命令不支持arm架构下的算法环境,通常不采用此方法。接下来的环境配置将基于前文中已做换源处理的系统python3展开,直接在终端进行配置即可。同时,对conda的安装和使用也做简要介绍,配置者可根据需要灵活运用。
检查cuda版本与其支持的算力匹配:
4.1 Miniforge3安装
下载链接:https://github.com/conda-forge/miniforge/releases
创建文件夹:
mkdir Miniforge3
下载安装包至文件夹中并转到文件夹:cd Miniforge3
安装:
chmod 777 Mambaforge-23.1.0-2-Linux-aarch64.sh bash Mambaforge-23.1.0-2-Linux-aarch64.sh
安装过程中会弹出软件协议条款,直接按下Ctrl+C便可以跳过阅读过程,直接按照提示,输入yes,然后按回车键,同意软件协议条款。接下来继续按回车,将Miniforge3安装到电脑上。安装好之后,出现提示:
这一步务必输入yes,保证安装之后的正常使用。重启终端之后,就可以正常使用Miniforge3了。
重启终端,然后分别执行如下命令,更换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 LP python=3.6
其中RL为创建的虚拟环境名称,可自定义。
查看conda环境:
conda env list
激活conda环境:
conda activate LP
关闭conda环境:
conda activate LP
删除conda环境:
conda activate LP
值得注意的是。若采用conda环境配置后续环境,需要注意python版本与Pytorch、Tensorflow等的版本对应关系!接下来的安装与配置均建立在系统环境基础上,不建立在conda环境基础上。
4.2 Pytorch安装
注意Pytorch余torchvision匹配,https://pypi.org/project/torchvision/0.15.2/#history
±-------------------------±-------------------------±--------------------------------+
| torch | torchvision | python |
+++=================================+
| main / nightly | main / nightly | >=3.8, <=3.10 |
±-------------------------±-------------------------±--------------------------------+
| 1.13.0 | 0.14.0 | >=3.7.2, <=3.10 |
±-------------------------±-------------------------±--------------------------------+
| 1.12.0 | 0.13.0 | >=3.7, <=3.10 |
±-------------------------±-------------------------±--------------------------------+
| 1.11.0 | 0.12.0 | >=3.7, <=3.10 |
±-------------------------±-------------------------±--------------------------------+
| 1.10.2 | 0.11.3 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.10.1 | 0.11.2 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.10.0 | 0.11.1 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.9.1 | 0.10.1 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.9.0 | 0.10.0 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.8.2 | 0.9.2 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.8.1 | 0.9.1 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.8.0 | 0.9.0 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.7.1 | 0.8.2 | >=3.6, <=3.9 |
±-------------------------±-------------------------±--------------------------------+
| 1.7.0 | 0.8.1 | >=3.6, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.7.0 | 0.8.0 | >=3.6, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.6.0 | 0.7.0 | >=3.6, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.5.1 | 0.6.1 | >=3.5, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.5.0 | 0.6.0 | >=3.5, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.4.0 | 0.5.0 | ==2.7, >=3.5, <=3.8 |
±-------------------------±-------------------------±--------------------------------+
| 1.3.1 | 0.4.2 | ==2.7, >=3.5, <=3.7 |
±-------------------------±-------------------------±--------------------------------+
| 1.3.0 | 0.4.1 | ==2.7, >=3.5, <=3.7 |
±-------------------------±-------------------------±--------------------------------+
| 1.2.0 | 0.4.0 | ==2.7, >=3.5, <=3.7 |
±-------------------------±-------------------------±--------------------------------+
| 1.1.0 | 0.3.0 | ==2.7, >=3.5, <=3.7 |
±-------------------------±-------------------------±--------------------------------+
| <=1.0.1 | 0.2.2 | ==2.7, >=3.5, <=3.7 |
±-------------------------±-------------------------±--------------------------------+
官方下载链接: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.10.0的.whl文件:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-6-0-now-available/72048
下载完成拷贝到NX后,进行安装,注意文件存放位置和执行命令的位置相一致,输入命令:
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
安装完成后测试:
python3 import torch print(torch.cuda.is_available()) #测试cuda是否能用 True #返回Ture说明cuda能用
4.3 安装torchvision:
4.3.1 下载源码
sudo apt-get install libjpeg-dev zlib1g-dev git clone --branch v0.11.0 https://github.com/pytorch/vision torchvision
如果git下载失败,可以使用码云将https://github.com/pytorch/vision导入,然后如图选择,选择完成后进行下载。
cd进入到目录中,git命令下载时修改了文件名称,为torchvision(码云默认下载为vision,无修改)cd路径自行判断。
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev pip install pillow==6.2.2 cd vision export BUILD_VERSION=0.11.0 # where 0.x.0 is the torchvision version sudo python3 setup.py install cd ../ # attempting to load torchvision from build dir will result in import error
安装到最后需要pillow包,最后可能会下载失败。但是torchvision已经安装成功了,输入命令pip3 list可以看到。
4.3.2 直接安装
pip install torchvision==0.11.1
验证程序:
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))
import torchvision print(torchvision.__version__)
4.4 cuDNN
首先查看仓库提供的cuDNN有哪一些。terminal输入
sudo apt-cache policy libcudnn8
如果没有的话可以查看
sudo apt-cache policy libcudnn7
以此类推
我NX的JetPack 4.5.1安装cuda-10.2之后libcudnn8只有一个版本.则键入
sudo apt-get install libcudnn8
即可。若有要选择版本的话
sudo apt-get install libcudnn8=(*.*.*.**+cuda*** )
括号中为你之前查看到的版本列表中选择。
5. 总结
事已至此,我们手把手教大家Jetson Xavier NX 开发板深度学习环境配置流程,涉及系统安装,后期会做UR机械臂的移植,期待你的关注😘😘😘。从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
参考文献:
arm64下安装pytorch,torchvision,torchaudio以及它们之间的版本对应关系:
https://pypi.org/project/torchvision/0.15.2/#history
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048
https://docs.conda.io/en/latest/miniconda.html
Jetson 系列——基于yolov5对是否带口罩的检测,部属于jetson xavier nx,使用tensorrt、c++和int8加速,可用于边缘计算