英伟达 Jetson Nano, Orin 系列加速板初始化安装
1、Jetson Nano的系统安装
1.1 安装准备
参考资料:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit
Jetson Nano 的系统通过SD卡镜像安装,安装完成即包含所有软件
镜像地址:https://developer.nvidia.com/jetson-nano-sd-card-image
1.2 安装步骤
1)准备好高质量SD卡,容量>=64G
2)格式化SD卡,软件:https://www.sdcard.org/downloads/formatter_4/eula_windows/
3)烧写SD卡,软件:https://www.balena.io/etcher
4)等待烧写完成,完成后弹出的格式化窗口务必不要格式化
5)插入带有Jetson镜像的SD卡、U盘等介质疯狂弹窗是正常现象,不用怀疑中毒。
1.3 初始化系统
1)插入SD卡到板卡上
2)供电开机
寻找载板上J48跳线座
5v micro USB供电时拔掉跳线
直流供电时跳线J48
3)第一次登录时的选项
-
Review and accept NVIDIA Jetson software EULA
- 同意英伟达的条款
-
Select system language, keyboard layout, and time zone
- 选择系统语言。。。
-
Create username, password, and computer name
- 创建用户,密码和计算机名
-
Select APP partition size—it is recommended to use the max size suggested
- 选择分区大小-建议直接选择推荐的最大值
4)第一次登录时的选项
-
Review and accept NVIDIA Jetson software EULA
- 同意英伟达的条款
-
Select system language, keyboard layout, and time zone
- 选择系统语言。。。
-
Create username, password, and computer name
- 创建用户,密码和计算机名
-
Select APP partition size—it is recommended to use the max size suggested
- 选择分区大小-建议直接选择推荐的最大值
进入桌面,分别验证系统软件的版本
//查看系统版本
cat /proc/version
//查看python版本
python3 --version //应为python3.6
//验证JetPack
sudo apt-cache show nvidia-jetpack //jetpack版本号
cat /etc/nv_tegra_release //L4T(linux for tegra)版本号
//查看cuda版本
nvcc --version
// nvcc会找不到,要将cuda加入环境变量
//查找cuda路径
whereis cuda
//修改bash启动文件
vim ~/.bashrc
//在文件末尾增加内容
export PATH=/usr/local/cuda-xx.x/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-xx.x/lib64:$LD_LIBRARY_PATH
//source bash启动文件
source ~/.bashrc
nvcc --version //应为cuda-10.2
验证完成,安装成功
2、Jetson Nano部Yolo v8项目
2.1背景与限制
Jetson nano最高只能安装Jetpack4.6.x版本的系统,对应的python版本为3.6.x。py36因对应cuda、tensorrt,因此也不建议升级使用。ultralytics的最低要求为python3.8,因此无法在Jetson nano上像其他途径一样使用yolov8。因此,为了安装ultralytics需要创建虚拟环境,安装python3.8及对应的torch、torchvision。
2.2 安装ultralytics
1)创建虚拟环境
sudo apt update
sudo apt install -y python3.8 python3.8-venv python3.8-dev python3-pip \
libopenmpi-dev libomp-dev libopenblas-dev libblas-dev libeigen3-dev libcublas-dev
// 安装python3.8(系统ln不变,不影响系统主环境为py3.6)
python3.8 -m venv venv // 创建名为venv的虚拟环境
source venv/bin/activate // 激活venv虚拟环境
2)安装torch,torchvision
大神已预编译,下载地址:
torch:https://drive.google.com/uc?id=1hs9HM0XJ2LPFghcn7ZMOs5qu5HexPXwM
torchvision:https://drive.google.com/uc?id=1m0d8ruUY8RvCP9eVjZw4Nc8LAwM8yuGV
pip install -U pip wheel
pip install torch*.whl torchvision*.whl
验证torch与是否可以加速
python3 -c "import torch; print(torch.cuda.is_available())"
// True表示cuda可以加速
3)安装ultralytics
pip install ultralytics
4)运行yolov8
yolo task=detect mode=predict model=yolov8n.pt source=0 show=True
yolo task=segment mode=predict model=yolov8n-seg.pt source=0 show=True
3、tensorrt加速yolov8-detect
由于在python 3.8的环境下无法安装对应jetpack版本的tensorrt,因此也不能使用ultralytics提供的export engine功能。这时候需要借助第三方的帮助。
1)clone以下仓库:https://github.com/wang-xinyu/tensorrtx
2)进入yolov8文件夹
3)复制gen_wts.py到yolo权重目录
4)转换yolo的pt权重到wts中间格式
5)回到tensorrtx/yolov8目录
6)创建build文件夹
7)刚刚生成的wts文件放到build文件夹中
8)编译:
cmake ..
make
sudo ./yolov8_det -s [.wts] [.engine] [n/s/m/l/x] //转换权重到engine
sudo ./yolov8_det -d yolov8n.engine ../images g //运行yolov8n
加速效果:在python3.8环境中推理yolov8n detection约140ms一图,使用tensorrt加速后yolov8n为50ms一图
4、Jetson Orin nano/Nx 系统安装
4.1 先给一个正常流程(不使用SDK Manager)
Jetson Orin不建议使用SD卡作为镜像硬件,配备NVMe固态硬盘作为存储介质,因此镜像烧录和启动与jetson nano差别较大。需要使用SDK Manager或命令行烧写。
0)准备ubuntu18.04 or ubuntu20.04主机用来烧写设备
全新安装一个ubuntu18.04虚拟机,授予虚拟机USB权限,不要配置国内的apt镜像源(非常重要)。
安装必要组件
sudo apt-get install qemu-user-static
sudo apt-get install python // python2.7
1)下载喜欢的Jetson Linux版本
https://developer.nvidia.com/embedded/jetson-linux-archive
Jetson Linux(L4T),JetPack(cuda, tensorrt)的版本关系后面再列个表出来。
本文档使用R35.3.1。千万别用R35.5.0(2024年3月8日)其它版本理论上随意选择。
下载Driver Package(BSP)和Sample ROOT Filesystem
安装过程官方参考:https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/IN/QuickStart.html
2)解压镜像
在下载文件的根目录中执行命令
tar -xf Jetson_Linux_R35.3.1_aarch64.tbz2 //解压Linux基础文件
sudo tar xpf Tegra_*.tbz2 -C Linux_for_Tegra/rootfs/ //解压文件系统到L4T的rootfs文件夹
cd Linux_for_Tegra/
sudo ./apply_binaries.sh
sudo ./tools/l4t_flash_prerequisites.sh
至此文件准备完成,设置jetson orin为recovery模式,准备烧写
3)jetson orin设置recovery模式
短接引脚REC-GND,直流电源供电,USB-C接口与主机相连
主机发现设备“Nvidia AGX”则状态正确
4)烧写启动 to NVMe
直接运行官网的指令,官网提供了烧写到各种介质的指令,根据实际情况选择。我们烧写到NVMe SSD中
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
--showlogs --network usb0 jetson-orin-nano-devkit internal
等待直到完成。
期间Jetson orin会重启一次,使用虚拟机需要及时响应USB硬件分配,否则超时需要重新烧写过程。
4.2 系统安装的注意事项
实际使用虚拟机烧写镜像非常非常慢,无论是SDK Manager还是命令行。主要是镜像制作、打包时间非常长,对虚拟机的配置、内存有很高的要求。我的i5-16G内存笔记本中这个过程以小时记。
后改为基础系统为ubuntu的志强-64G内存工作站,使用命令行模式安装,整个烧写过程大约15分钟。差别非常巨大。
坑货英伟达,烧写过程非常吃硬件配置。
4.3 启动Jetson Orin 安装推理环境
4.3.1 第一次登录时的选项(可能要退出刷机模式,拔掉跳线)
-
Review and accept NVIDIA Jetson software EULA
- 同意英伟达的条款
-
Select system language, keyboard layout, and time zone
- 选择系统语言。。。
-
Create username, password, and computer name
- 创建用户,密码和计算机名
-
Select APP partition size—it is recommended to use the max size suggested
- 选择分区大小-建议直接选择推荐的最大值
进入桌面,分别验证系统软件的版本
//查看系统版本
cat /proc/version //Ubuntu 20.04
//查看python版本
python3 --version //应为python3.8.10
// 安装Jetpack
sudo apt update
sudo apt install nvidia-jetpack // 9G大小
//验证JetPack
sudo apt-cache show nvidia-jetpack //jetpack版本号 5.1.1
cat /etc/nv_tegra_release //L4T(linux for tegra)版本号 35.3.1
//查看cuda版本
nvcc --version
// nvcc会找不到,要将cuda加入环境变量
//查找cuda路径
whereis cuda
//修改bash启动文件
vim ~/.bashrc
//在文件末尾增加内容
export PATH=/usr/local/cuda-xx.x/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-xx.x/lib64:$LD_LIBRARY_PATH
//source bash启动文件
source ~/.bashrc
nvcc --version //应为cuda-11.4
至此基础镜像安装全部完成
5 Jetson Orin YOLO v8部署
Jetson orin 对应的L4T版本所带python为3.8,满足ultralytics的最低要求,因此可以直接pip安装
1)完善python3
sudo apt-get install python3-pip
sudo pip3 install -U pip
sudo pip3 install -U jetson-stats //jetson的性能监控组件
// 安装torch使用依赖
sudo apt-get install -y libopenblas-base libopenmpi-dev libjpeg-dev zlib1g-dev
2)安装torch, torchvision
找到你喜欢的pytorch版本:
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048
_知道为什么不用L4T 35.5了吧!它没有预编译的对应pytorch版本!坑!
也可以自己从源码编译pytorch
pip3 install torch-*.whl
互联网冲浪,找到你的pytorch对应的torchvision版本
git clone https://github.com/pytorch/vision --tag=0.14.1
cd vision
python3 setup.py install --user
// 等待非常漫长
3)安装ultralytics
pip3 install ultralytics
pip3 install onnx
pip3 install numpy==1.20.3
4)验证功能
yolo obb predict model=yolov8n-obb.pt source=0 save=False show=False device=0
由于安装目录不在PATH中,这个验证是会报错的。我们编写一个python脚本来验证
from ultralytics import YOLO
model = YOLO('yolov8n-obb.pt', task='obb')
model('img.png')
6 Jetson Orin YOLO v8 tensorrt 加速
参考文件:https://docs.ultralytics.com/modes/export/#arguments
从里面找好export函数的format参数与格式对应的其他参数
编写权重转换脚本,并python运行
from ultralytics import YOLO
model = YOLO('yolov8n-obb.pt', task='obb')
model.export(format='engine', imgsz=1024, int8=True, device=0) // int8量化
测试加速效果
from ultralytics import YOLO
model = YOLO('yolov8n-obb.engine', task='obb')
model('img.png')
完成!!!
Jetson Orin由于使用高版本Jetpack,拥有更强的性能同时对当今SOTA模型的支持更好。大大简化了部署的工作量。
6、安装虚拟环境并复制tensorrt推理
Jetson无法安装miniconda,需要安装miniforge或者mambaforge
下载地址:https://github.com/conda-forge/miniforge/releases/tag/23.11.0-0
sh manba*.sh
安装完成后重新进入shell激活虚拟环境
python的安装与其它包安装与conda一致,tensorrt由于要与jetpack版本保持对应,直接从系统包中复制
使用如下指令
cp -r /usr/bin/python3.8/site-packages/tensorr* ~/mambaforge/envs/yolo/lib/python3.8/site-packages