因为实验室项目,需要在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平台上,相比于htop
或top
,jtop
展示的信息更为详细,如下是htop
和top
的效果。
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了,所以将torch
和torchvision
两行注释掉。然后按如下代码安装所需依赖。
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上也有类似工作,点击查看。而top
、htop
、jtop
则不赘述了,前面已经介绍了。
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
本文作者原创,未经许可不得转载,谢谢配合