Nvidia Jetson AGX Orin开发板配置与使用

Mar 27,2024   10155 words   37 min


因为实验室项目,需要在Nvidia Jetson Orin平台上测试一些算法。尽管之前零零散散配置过Nano、TX2、Xavier等板子,但还是不够完整和全面。所以这篇博客就简单再记录一下配置过程,方便以后查阅。

首先,根据官方文档,给出AGX Xavier和AGX Orin的硬件参数比较,如下。 总体而言,相比于之前用的Xavier,硬件参数提升还是比较明显的。

1. 硬件准备

Nvidia AGX Orin是一个方形盒子,其不同侧面有不同的接口,如下所示。 其中,核心的便是后面部分,也就是第三张图。我们接通电源适配器,然后插到圆形电源接口上方的Type-C口,然后最右边的DP口连接显示器,中间两个USB口连接键盘鼠标,即可完成,如下图所示。 需要注意的是,DP口不是HDMI口,得要专门的数据线才可以,如下图所示。 此外,在Orin盒子的另一面,是一个可以拆卸的盖子,里面是PCIe的插槽,可以进行硬件扩展,如下所示。 Nvidia AGX Orin Developer Kit套件里自带了电源,其输出功率如下所示。 可以看到输出功率从15W到27W、36W、45W、90W。如果你能找到对应功率的其它电源适配器,也可以使用。当连接电源以后,Orin就会自动开机启动了。如果需要手动开机,则按三个按钮中左边的电源按钮即可。

2. 系统安装

默认情况下,Orin出厂时就已经烧录了一个系统在板子上,无需自己再重新烧录(如果需要自己重新烧录,移步之前这篇笔记)。启动后,依次会进入系统的安装与配置界面,包括选择语言、设置密码等。这一步基本没有什么特别需要注意的内容,基本一路默认选项即可,如下。 系统安装好以后,就会到登录界面,输入密码登录,即可进入桌面。系统安装完成。 这里稍微需要注意的是,在安装过程中,会让你选择Orin的不同工作模式。为了方便查找,这里我把Orin支持的工作模式和对应功率贴出来。 可以看到,Orin最高支持12核同时运行,功耗50W。

3. 系统基础配置

在进入系统以后,为了更好用,需要进行一些基础配置。首先查看系统信息页,如下所示。 可以看到,本机运行内存为32GB,CPU包含12个ARMv8核,GPU显卡是Tegra Orin,硬盘大小为64GB。自带的系统为Ubuntu 20.04 64位版本。

3.1 更换国内源(非必需)

和以前类似的,为了更快的安装速度,可以更换国内源。做法是在所有程序中找到Softwares & Updates,选择中国的服务器,如下。 等待刷新完成即可。如果网络条件较好,则不需要这一步。

3.2 更新apt资源

输入如下命令,更新apt源,使得系统能够安装相关依赖库。

sudo apt-get update

更新完后如下图所示。

3.3 安装中文输入法

参考之前树莓派安装中文输入法的办法,输入如下命令进行安装。

sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin

安装完成后如下所示。 然后打开系统的Language Support界面,在Keyboard Input Method System中选择“fcitx”,如下。然后重启即可使用中文输入法。

3.4 安装jtop工具

参考之前这篇笔记jtop可以展示Jetson系列CPU、GPU等硬件的使用情况,输入如下命令安装。

sudo apt-get install python3-dev
sudo apt-get install python3-pip
sudo pip3 install jetson-stats

运行界面如下: 在Jetson平台上,相比于htoptopjtop展示的信息更为详细,如下是htoptop的效果。

3.5 CMake工具
sudo apt-get install cmake
sudo apt-get install cmake-gui

安装完成如下所示。

至此,基本的系统配置就完成了,剩下的则是一些专业软件和依赖库的安装,如SLAM环境、深度学习等。

4. 系统进阶配置

4.1 JetPack安装

首先,输入下面命令,打开nvidia-l4t-apt-source.list

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

检查其中的版本是否为r34.1,如果不是,则修改保存,然后输入如下命令更新apt:

sudo apt-get update

此步的目的是使得系统能够找到对应版本的JetPack库,否则就会报“E: Unable to locate package nvidia-jetpack”的错误。修改完成之后,打开终端,输入如下命令,则开始安装,如下所示。

sudo apt install nvidia-jetpack

然后就是漫长的等待。完成之后的界面如下所示。 重启电脑相关安装就可以生效了。根据官方技术文档描述,目前最新的JetPack 5.0版本主要包含以下几个模块:

  • CUDA 11.4
  • cuDNN 8.3.2
  • TensorRT 8.4.0
  • OpenCV 4.5.4
  • Vulkan 1.3
  • VPI 2.0
  • Nsight Systems 2021.5
  • Nsight Graphics 2021.5

其中,各模块默认安装和对应示例位置总结如下:

  • TensorRT: /usr/src/tensorrt/samples/
  • cuDNN: /usr/src/cudnn_samples_v8/
  • CUDA: /usr/local/cuda-11.4/samples/
  • MM API: /usr/src/jetson_multimedia_api
  • VPI: /opt/nvidia/vpi2/samples/
4.2 CUDA安装

事实上,如果顺利安装了JetPack,其实就已经自带CUDA了,无需额外安装。根据上文,我们可以在/usr/local/cuda-11.4/bin文件夹下找到nvcc可执行文件。在该目录下打开终端,输入./nvcc -V即可检查CUDA版本,如下。 当然,由于我们没有把CUDA路径添加进系统变量,所以并不能在任何地方执行该命令。和之前一样的,我们可以修改.bashrc文件。在终端中输入sudo gedit ~/.bashrc,并在末尾添加如下内容:

# CUDA
export PATH=$PATH:/usr/local/cuda-11.4/bin
export LD_LIBRARY=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH

保存文件,并source ~/.bashrc,便可以生效了。输入cat /proc/driver/nvidia/version可以查看GPU驱动,如下。

4.3 OpenCV安装

前面也说了,JetPack自带OpenCV,可以通过pkg-config opencv4 --modversion查看OpenCV版本,如下。

5. SLAM环境安装

这一部分主要参考之前的这篇笔记,为了方便就把相关部分贴过来。总体没有什么特别大的问题,按照命令安装即可。

5.1 Eigen
wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.zip
unzip eigen-3.3.9.zip
cd eigen-3.3.9
mkdir buildbest
cd build
cmake ..
make
sudo make install
5.2 g2o
sudo apt-get install libeigen3-dev
sudo apt-get install libspdlog-dev libsuitesparse-dev
sudo apt-get install qtdeclarative5-dev qt5-qmake
sudo apt-get install libqglviewer-dev-qt5

git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake ..
make
sudo make install
5.3 OctoMap
git clone https://github.com/OctoMap/octomap.git
cd octomap
mkdir build
cd build
cmake ..
make
sudo make install
5.4 Sophus
git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build
cd build
cmake ..
make
sudo make install
5.5 Pangolin
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt install libdc1394-22-dev libraw1394-dev
sudo apt install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make
sudo make install
5.6 glog
git clone https://github.com/google/glog.git
cd glog
cmake -H. -Bbuild -G "Unix Makefiles"
cmake --build build
cmake --build build --target test
cmake --build build --target install
5.7 gflags
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON ..
make
sudo make install
5.8 Ceres
sudo apt-get install libatlas-base-dev liblapack-dev
sudo apt-get install libsuitesparse-dev libcxsparse3
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
mkdir build
cd build
cmake ..
make
sudo make install
5.9 OpenCV

JetPack已经自带了OpenCV,可以不用单独安装。如果因为版本不兼容等问题,需要单独安装或者定制功能模块,可以参考这篇笔记安装,也简单把核心命令贴在下面。

sudo apt-get install libgtk2.0-dev libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install ccache libgphoto2-dev libopenblas-base libopenblas-dev
sudo apt-get install doxygen openjdk-8-jdk libvtk6-dev
sudo apt-get install libgtk-3-dev liblapacke-dev
sudo apt-get install tesseract-ocr libtesseract-dev
cd opencv-3.4.12
mkdir build
cd build
cmake ..
make
sudo make install
5.10 DBoW3
git clone https://github.com/rmsalinas/DBow3.git
cd DBoW3
mkdir build
cd build
cmake ..
make
sudo make install
5.11 ROS

推荐使用鱼香ROS一键安装脚本。

wget http://fishros.com/install -O fishros && . fishros

安装完成后如下所示。 在新的终端中输入roscore即可启动ROS,如下。

5.12 librealsense(非必须)

安装Intel RealSense SDK可以实现一些对RealSense硬件的交互。这个并非必须安装。

sudo apt-get install libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev
sudo apt-get install git wget cmake build-essential
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev

git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
./scripts/setup_udev_rules.sh
./scripts/patch-realsense-ubuntu-lts-hwe.sh

mkdir build
cd build
cmake
make
sudo make install
5.13 ORB-SLAM2实例配置

在配置好SLAM运行环境以后,可以简单编译ORB-SLAM2作为测试。在终端输入如下命令进行编译。

git clone https://github.com/raulmur/ORB_SLAM2.git
cd ORB_SLAM2/Thirdparty/DBoW2
mkdir build
cd build
cmake ..
make
cd ../../g2o
mkdir build
cd build
cmake ..
make
cd ../../../
mkdir build
cd build
cmake ..
make

当然,如果在编译时遇到各种奇奇怪怪的的小问题,多搜一搜一般会有答案。或者可以参考之前笔记。编译成功后,运行界面如下所示。 我们可以进一步利用EVO工具绘制轨迹。当然也可以配置ORB-SLAM3,过程是类似的,运行效果如下。

6. 深度学习环境安装

深度学习环境其实核心就是PyTorch、CUDA等依赖库。

6.1 CUDA

CUDA其实我们在前面已经装过了,所以这里无需再额外安装。除非对CUDA版本有特殊要求,可以尝试使用多版本CUDA安装方案。

6.2 PyTorch

本部分主要参考这个文档这个文档。由于Orin为ARM aarch64架构,因此普通的PyTorch安装方式无法正常使用。

首先,我们需要明确自身的Orin当前的JetPack版本和系统版本是多少,根据前面3.4部分的介绍,我们可以通过jtop命令查看相关信息。例如在本机,JetPack版本为5.0.1,L4T版本为34.1.1。有了以上信息,我们就可以去这个网页查找可以下载的PyTorch的whl文件,如下所示。 可以看到,对于JetPack 5,L4T 34.1.1,最高可以支持到PyTorch 1.13。这里我们选择下载量最大的1.12版本。点击文件名即可下载。下载好后,终端输入如下命令安装。

sudo pip install torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl

这样便可以完成安装,如下。

6.3 TorchVision

TorchVision是一些和视觉处理相关的函数集合,也需要安装。TorchVision和PyTorch有对应关系。还是在刚刚下载whl文件的网页中,可以找到对应关系,这里简单列举:

  • 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
  • PyTorch v1.8 - torchvision v0.9.0
  • PyTorch v1.9 - torchvision v0.10.0
  • PyTorch v1.10 - torchvision v0.11.1
  • PyTorch v1.11 - torchvision v0.12.0
  • PyTorch v1.12 - torchvision v0.13.0
  • PyTorch v1.13 - torchvision v0.13.0
  • PyTorch v1.14 - torchvision v0.14.1
  • PyTorch v2.0 - torchvision v0.15.1
  • PyTorch v2.1 - torchvision v0.16.1

由于上面我们选择了1.12版本,所以这里对应的torchvision版本为0.13.0。按如下命令安装:

sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.13.0 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python setup.py install

我们可以使用如下Python脚本简单验证安装。

# for torch test
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))

# for torchvision test
import torchvision
print(torchvision.__version__)

可以看到,程序正常输出了对应结果,表示PyTorch和TorchVision安装完成且可以正常使用。

6.4 YoLoV5实例配置

本部分主要参考Ultralytics的官方文档。首先,输入如下命令从Github上clone对应代码。

git clone https://github.com/ultralytics/yolov5

然后,找到项目的requirements.txt。因为前面已经安装过Torch和TorchVision了,所以将torchtorchvision两行注释掉。然后按如下代码安装所需依赖。

sudo apt install -y libfreetype6-dev
pip install -r requirements.txt

安装完成后如下。 然后输入如下命令,直接启动detect.py脚本即可启动推理,脚本会自动下载模型参数文件。

python detect.py

运行结果如下。 可以看到,在Orin上,YoLoV5没有任何加速手段的情况下推理时间大约为20ms,算上前后处理的时间,差不多30ms一帧,因此FPS可以达到约30FPS。结果默认输出到runs/detect文件夹下,如下图所示。 关于YoLoV5的更多用法参考其官方文档。此外,我们还测试了同一个网络在不同性能模式下的差别,如下图所示。 可以看到,对于YoLoV5网络,MAXN模式具有最好的表现。进一步我们进行相关数据统计,如下所示。 可以看到,在测试数据为640×480大小情况下,YoLoV5 small网络在MAXN模式下可以达到约58FPS,在30W下约31FPS,已经算是比较快了。这里需要注意的是,对于YoLoV5网络而言,其输入影像大小默认最大为640×640。如果输入影像小于该尺寸,则按照原始尺寸输入,如果长宽有任意一边超过640,则对原图进行缩放,使得长边为640。 因此,从这个角度来说,1920×1440和640×480影像没有本质区别,因为在推理之前都会进行缩放。但你也确实可以说,你可以对1920×1440的影像跑到30FPS以上,没毛病。只是说是因为你做了预处理,进行了缩放。

7. Jetson平台一些常见命令

7.1 查看当前工作模式
sudo nvpmodel -q verbose

输出结果如下:

7.2 指定工作模式
sudo nvpmodel -m 0

其中数字表示不同模式的代号。在Orin中,支持如下4种模式: 在TX2中,同样也支持如下4种模式: 而在Nano中,最多支持两种模式,如下: 不同模式的情况汇总如下图所示。 在实际使用中按需选择即可。不仅如此,我们也在TX2上测试了不同模式下,同一算法的耗时情况,对比汇总如下。 可以看到,MAXN模式的平均耗时约为0.61秒,MAXP-ALL模式的平均耗时约为0.87秒,MAXP-ARM模式的平均耗时约为0.64秒,MAXQ模式的耗时约为1.02秒。

7.3 查看硬件使用情况
tegrastats
top
htop
jtop

tegrastats会以纯文本的形式返回时间戳、内存使用、CPU使用率、GPU使用率等信息,如下。 因此,通过Python脚本进行文本的读写,即可进行资源使用情况记录。Github上也有类似工作,点击查看。而tophtopjtop则不赘述了,前面已经介绍了。

7.4 查看软硬件信息

查看CPU硬件信息

cat /proc/cpuinfo

运行如下图所示。

查看Nvidia Jetson状态和所有信息

jetson_release

运行如下图所示。

8. 参考资料

  • [1] https://bbs.huaweicloud.com/blogs/349247
  • [2] https://zhuanlan.zhihu.com/p/668414234
  • [3] https://developer.nvidia.com/sites/default/files/akamai/Jetson_AGX_Orin_Developer_Kit_RG.pdf
  • [4] https://docs.ultralytics.com/zh/yolov5/tutorials/running_on_jetson_nano/
  • [5] https://blog.csdn.net/guaijie0530/article/details/135174671
  • [6] https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html
  • [7] https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048
  • [8] https://blog.csdn.net/weixin_34910922/article/details/108503319
  • [9] http://blog.chinaunix.net/uid-27875-id-5856040.html
  • [10] https://cloud.tencent.com/developer/article/1081166
  • [11] https://blog.csdn.net/qq_43134830/article/details/129358194

本文作者原创,未经许可不得转载,谢谢配合

返回顶部