新到一块Nvidia Jetson AGX Orin 32G的板子,想压测下GPU性能时发现里边没有带CUDA,重新刷下机,记录下刷机过程。
一、准备工作
要开始刷写Jetson AGX Orin,需要准备一下内容:
- AGX Orin板子
- Ubuntu PC机(安装SDK-Manager/刷写Orin用,Ubuntu20/22版本均可)
- DP转HDMI线(Orin只有DP口)
- Type-C转USB线(Orin只能用这个线才能刷写,miniUSB转USB确认不行)
- 无线键盘和鼠标(给Orin用)
Jetson不同板子的算力和配置参数,供选板子时参考:
二、安装SDK-Manager
PC机安装NVIDIA SDK Manager,会提示在NVIDIA官网注册账号,下载安装SDK Manager后,使用SDK-Manager时需要先登录Nvidia账户。
sudo apt install ./sdkmanager_1.9.1-10844_amd64.deb
sudo apt-get update
具体参考:Download and Run SDK Manager
三、物理连线与板卡识别
1. 物理连线
将主机与AGX ORIN用USB转Type-C线连接,Type-C接AGX ORIN:
Orin接上显示器和电源,默认此时会自动进入刷机模式,显示器黑屏等待刷机:
2. 进入刷写模式
默认此时SDK-Manger会自动检测到Orin的板子,但是如果没有检测到,可以尝试强制将板子进入Recovery模式,方法有两种:
- Orin处于未开机状态:先长按住②键(Force Recovery键),然后给Orin接上电源线通电,此时白色指示灯亮起,但进入Recovery模式后连接Orin的显示屏是黑屏的。
- Orin处于已开机状态:先长按住②键,然后按下③键(Reset键),先松开③键,再松开②键。
在PC端执行lsusb,检查是否存在NVIDIA的设备,如有则可以确认Orin已进入刷机模式:
lsusb
Bus 001 Device 008: ID 0955:7020 NVIDIA Corp. L4T (Linux for Tegra) running on Tegra
四、系统刷写
刷写选项需要注意的地方:
- SDK-Manager取消勾选Host Machine,PC不需要安装,仅选中TargetHardware的Orin板子即可。
- SDK VERSION版本必须选择JetPack 6.0,
- JetPack 6.0基于Ubuntu 22.04、CUDA 12.2、CuDNN 8.9、Tensorrt 8.6,满足Autoware.universe的工作条件。
- JetPack 6.1基于Ubuntu 22.04、CUDA 12.6、CuDNN 9.3、Tensorrt 10.3,Autoware目前暂不支持。
- JetPack 5.14基于Ubuntu20.04、CUDA 11.4、CuDNN 8.6、Tensorrt 8.5,满足Autoware.ai docker的工作条件。
- DeepStream建议选中直接安装好,省的后边自己再手动安装。
1. 环境配置
点击继续,会开始下载安装包到本地:
2. 烧写系统镜像
等到下载完并且安装一定时间后,会弹出如下Pre-Config界面,设置用户名和密码,点击Flash后会开始刷写操作系统:
可以看到Flash Jetson Linux状态处于Flashing刷写中,其他的都处于Pending状态,等待操作系统刷写并启动完毕后才能开始:
刷机完成后,Orin连接的显示器会亮起,Ubuntu 22.04 的系统安装成功,Orin操作系统会进入设置引导界面,需要完成系统引导和网络配置。
SDK-Manager会处于等待配置Orin IP并安装SDK组件的界面,需要等Orin操作系统都初始化完毕并配置好网络后再继续(Orin需要与PC处于统一局域网中,因为后续SDK组件是通过ssh Orin的IP进行安装的)。
我这里把Orin板子和PC都连到手机热点,查看Orin的IP为172.20.10.2,检查从PC端ping和ssh正常:
ping 172.20.10.2
ssh work@172.20.10.2
3. 安装Jetson SDK
Jetson平台的系统镜像和SDK安装是分开的,先烧录系统镜像,再安装SDK。在烧录系统镜像时,Jetson平台需要处于Recovery模式。在安装SDK时,Orin板子操作系统处于正常运行状态,不是在Recovery模式。
如果想安装速度快点,有以下两个方法:
- orin apt源更换为国内清华源
wget http://fishros.com/install -O fishros && . fishros
- orin 增加hosts
sudo vim /etc/hosts
23.213.41.22 www.nvidia.com
152.199.39.144 developer.nvidia.com
我们回到SDK-Manager,填写Orin设置好的IP后点击Install继续:
开始安装Jetson Runtime Components:
有一部分SDK Components下载失败了,看detail原因是访问nvidia.com失败了,添加orin的hosts并修改apt源后,重启orin板子和SDK-Manager,连到一个网络更好的wifi,只勾选失败的Jetson SDK部分或使用STEP-01左下方的Repair按钮重新安装即可。
4. 版本检查
最终安装的版本为:
- CUDA 12.2
- CuDNN 8.9.4.25-1+cuda12.2
- TensorRT 8.6.2.3-1+cuda12.2
- OpenCV 4.8.0
添加环境变量:
vim ~/.bashrc
export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
export CUDA_HOME=/usr/local/cuda
source ~/.bashrc
版本检查:
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.2.r12.2/compiler.33567101_0
$ dpkg -l | grep -i cudnn
hi libcudnn8 8.9.4.25-1+cuda12.2 amd64 cuDNN runtime libraries
hi libcudnn8-dev 8.9.4.25-1+cuda12.2 amd64 cuDNN development libraries and headers
$ dpkg -l | grep -i libnvinfer-dev
hi libnvinfer-dev 8.6.2.3-1+cuda12.2 amd64 TensorRT development libraries
or
$ dpkg-query -W tensorrt
tensorrt 8.6.2.3-1+cuda12.2
$ opencv_version
4.8.0
5. 编译opencv contrib
autoware use opencv4/opencv2/ximgproc/segmentation.hpp, so need install opencv_contrib
# depend
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev
# download source
cd ~/tools
git clone -b 4.8.0 https://github.com/opencv/opencv.git
cd ~/tools/opencv
git clone -b 4.8.0 https://github.com/opencv/opencv_contrib.git
# build
cd ~/tools/opencv
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DCMAKE_INSTALL_PREFIX=/usr ..
make -j8
sudo make install # DESTDIR=/usr/local
五、挂载NVME盘
Orin开发板内置的emmc只有64G,我这里买了块1T的西数SN770 NVME盘,插在了Orn底部的nvme插槽里(这时重启开机如果无法顺利进入emmc里的系统,可以在开机时按F11选择emmc device启动),这里记录下挂载过程:
# 1.格式化nvme
# format nvme
sudo mkfs.ext4 /dev/nvme0n1
# check nvme
sudo blkid /dev/nvme0n1
/dev/nvme0n1: UUID="5060597f-17b0-42c5-8bb8-8efb05bfcb34" BLOCK_SIZE="4096" TYPE="ext4"
# 2.挂载nvme
# 备份要挂载的目录
sudo mv /home/work /home/work.bak
sudo mkdir /home/work
# 挂载
sudo mount /dev/nvme0n1 /home/work
# 权限设置
sudo chown work:work work -R
# 恢复备份的文件到nvme
cd /home/work.bak/
mv * .* /home/work/
# 3.开机自动挂载
sudo vim /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/nvme0n1 /home/work ext4 defaults 0 2
六、GPU性能检测
Jetson GPU Burn 是一个专为NVIDIA Jetson系列嵌入式计算模块设计的多GPU CUDA压力测试工具。此项目源自wilicc/gpu-burn,并进行了修改以适应Jetson系统独特的硬件架构,尤其是其集成图形处理器(iGPU)。通过这个工具,开发者和研究人员能够全面测试Jetson平台上GPU的稳定性与极限性能,对于散热设计验证及性能调优至关重要。Jetson GPU Burn依赖CUDA等基础工具包。
1. 压测
1.1 gpu_burn压力测试
# 克隆项目源代码
git clone https://github.com/anseeto/jetson-gpu-burn.git
# 切换到项目目录并编译
cd jetson-gpu-burn
make
# 运行GPU烧毁测试(默认10秒,若需自定义时间,请在命令中指定,例如:./gpu_burn 600表示600秒)
./gpu_burn 1000 # 此命令如果没有指定运行时间,将默认运行10秒
在部署任何烧毁测试前,务必确认设备的散热方案能够应对极端的工作负载。通过调整Jetson的电源管理模式至MAXN或其它高性能模式,可以最大化测试条件。长时间运行此类高压力测试可能会导致系统自动重启,特别是在散热不足的情况下。因此,建议在受控环境中,并伴有适当的散热措施下进行。
1.2 CuDNN测试
手写数字识别等测试:
sudo cp -r /usr/src/cudnn_samples_v9/ ~/tools/gpu/
sudo chown work:work ~/tools/gpu/cudnn_samples_v9 -R
cd ~/tools/gpu/cudnn_samples_v9/mnistCUDNN
make
./mnistCUDNN
Result of classification: 1 3 5
Test passed!
2. 监控
使用jtop或其他监控工具,如nvidia-smi(尽管后者不直接支持Jetson iGPU的全部功能),来观察GPU和CPU的使用率、温度和功耗。
jtop查看:
# 更新pip到最新版本
sudo apt install python3-pip
sudo pip install -U pip
# 安装jetson-stats,用于监控GPU和CPU状态(非必需,但推荐)
sudo pip install -U jetson-stats
# 启动jtop
sudo jtop
Jetson Power GUI:(在Orin右上角Nvidia工具栏里)
六、ReBuild exfat
# 0. tools
sudo apt install build-essential bc git
# 1. check Jetson Linux version
head -n 1 /etc/nv_tegra_release
# R36 (release), REVISION: 3.0, GCID: 36923193, BOARD: generic, EABI: aarch64, DATE: Fri Jul 19 23:24:25 UTC 2024
dpkg -l | grep 'nvidia-l4t-core'
ii nvidia-l4t-core 36.3.0-20240719161631 arm64 NVIDIA Core Package
# 2. download kenerl source and build tools
# https://developer.nvidia.com/embedded/jetson-linux-r363
mkdir -p ~/nvidia/ && cd ~/nvidia/
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/sources/public_sources.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/toolchain/aarch64--glibc--stable-2022.08-1.tar.bz2
tar -xjf aarch64--glibc--stable-2022.08-1.tar.bz2
tar -xjf public_sources.tbz2
cd ~/nvidia/Linux_for_Tegra/source
tar xf kernel_src.tbz2
tar xf kernel_oot_modules_src.tbz2
tar xf nvidia_kernel_display_driver_source.tbz2
# 3. build (https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/SD/Kernel/KernelCustomization.html#to-sync-the-kernel-sources-with-git)
cd ~/nvidia/Linux_for_Tegra/source
# export CROSS_COMPILE=~/nvidia/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
# build kernel
make -C kernel
mkdir ~/nvidia/Linux_for_Tegra/install/kernel/boot/ -p
make install -C kernel INSTALL_MOD_PATH=~/nvidia/Linux_for_Tegra/install/kernel
# build module
export KERNEL_HEADERS=~/nvidia/Linux_for_Tegra/source/kernel/kernel-jammy-src
cd ~/nvidia/Linux_for_Tegra/source/kernel/kernel-jammy-src/
vim arch/arm64/configs/defconfig
CONFIG_EXFAT_FS=y
make ARCH=arm64 LOCALVERSION=-tegra defconfig
make ARCH=arm64 LOCALVERSION=-tegra modules -j$(nproc)
make ARCH=arm64 LOCALVERSION=-tegra modules_install INSTALL_MOD_PATH=~/nvidia/Linux_for_Tegra/install/modules
cd ~/nvidia/Linux_for_Tegra/install/modules
find . -name *.ko|grep exfat
cp -r ./lib/modules/5.15.136-tegra/kernel/drivers/exfat /lib/modules/5.15.136-tegra/kernel/drivers/
# build dtb
make dtbs
# cp nvidia-oot/device-tree/platform/generic-dts/dtbs/* <install-path>/Linux_for_Tegra/kernel/dtb/
# 4. load module
sudo depmod -a $(uname -r)
sudo modprobe exfat
参考:
【AGX ORIN】系列(1)—AGX ORIN使用SDK Manager
Install Jetson Software with SDK Manager
Jetson GPU Burn: 针对NVIDIA Jetson平台的CUDA GPU压力测试工具
[Orin Nx] 如何跑满GPU和CPU,观察温度和散热性能?
Ubuntu20.04部署CUDA11.8/cuDNN8.7
Jetson AGX Xavier 如何看nvidia-smi?调风扇?用jtop
ubuntu22.04安装opencv4和opencv_contrib
TensorRT 10.x NOTFOUND TENSORRT_NVPARSERS_LIBRARY 问题
Jetson Linux 5.15.136-tegra missing exfat kernel drivers
无法向 Jetson Orin NX 16GB(内核 5.15.136-tegra)添加缺失的驱动程序
