Jetson Orin Nano 8GB上跑YOLOv8,从安装PyTorch到导出ONNX,我踩过的坑都帮你填平了

张开发
2026/4/11 20:55:19 15 分钟阅读

分享文章

Jetson Orin Nano 8GB上跑YOLOv8,从安装PyTorch到导出ONNX,我踩过的坑都帮你填平了
Jetson Orin Nano 8GB实战YOLOv8从环境搭建到模型导出的避坑指南第一次拿到Jetson Orin Nano 8GB开发板时我本以为按照官方文档就能轻松跑通YOLOv8。但现实给了我一记重拳——ARM架构下的环境配置远比想象中复杂。从PyTorch版本选择到CUDA库缺失从NumPy兼容性问题到ONNX导出失败几乎每一步都暗藏玄机。本文将分享我在这个巴掌大的AI开发板上踩过的所有坑以及如何一步步填平它们的过程。1. 环境准备那些官方文档没告诉你的细节1.1 系统初始化的隐藏陷阱刚拿到开发板时我习惯性地执行了sudo apt update sudo apt upgrade -y结果导致JetPack部分组件出现版本冲突。后来发现Jetson系列设备对系统更新极其敏感必须遵循特定顺序# 正确的更新顺序 sudo apt-mark hold *cuda* *tensorrt* *nvidia* # 先锁定关键组件 sudo apt update sudo apt upgrade -y --allow-downgrades # 允许降级处理冲突 sudo apt-mark unhold *cuda* *tensorrt* *nvidia*提示更新后务必检查CUDA版本nvcc --version确保仍然是JetPack默认版本如12.41.2 依赖安装的ARM架构特有问题在x86平台稀松平常的apt install在ARM架构上可能引发连锁反应。例如安装OpenCV依赖时# 推荐的精简依赖列表避免引入冲突 sudo apt install -y \ libjpeg-dev \ libpng-dev \ libopenblas-dev \ libomp-dev # ARM平台需要显式安装OpenMP常见报错E: Unable to locate package libpython3.10-dev的解决方案是# ARM架构的特殊包名 sudo apt install -y libpython3-dev2. PyTorch安装ARM架构的专属挑战2.1 官方wheel的版本迷宫在PyTorch官网找不到Jetson专用版本需要从NVIDIA开发者论坛获取预编译wheel。但要注意版本匹配矩阵JetPack版本PyTorch版本CUDA版本下载来源6.22.5.0a0nv24.0812.4NVIDIA开发者论坛5.1.22.1.0a0nv23.0511.4PyTorch官方ARM仓库安装命令示例pip install torch-2.5.0a0*.whl --no-cache-dir # 必须禁用缓存2.2 令人抓狂的libcudnn问题运行import torch时出现libcudnn.so.0 not found错误解决方法不是重装CUDA而是# 创建符号链接具体路径随版本变化 sudo ln -s /usr/lib/aarch64-linux-gnu/libcudnn.so.8 /usr/lib/aarch64-linux-gnu/libcudnn.so.0验证安装成功的正确姿势import torch print(torch.__version__) # 应显示nv24.08等后缀 print(torch.cuda.get_device_capability()) # 检查计算能力3. YOLOv8安装版本兼容性雷区3.1 NumPy版本的地雷阵Ultralytics官方要求NumPy1.22但PyTorch for Jetson可能依赖特定版本。当看到A module was compiled against NumPy 1.x错误时# 精准版本控制方案 pip install numpy1.26.4 --force-reinstall # 实测兼容性最佳3.2 模型下载的替代方案国内开发者常遇到Downloading https://github.com/... timeout问题可以手动下载模型到~/.cache/ultralytics/使用国内镜像源from ultralytics import YOLO model YOLO(https://mirror.sjtu.edu.cn/ultralytics/assets/yolov8n.pt)4. ONNX导出跨平台部署的最后一道坎4.1 导出时的形状推断问题直接运行yolo export可能得到警告WARNING: Input shape is not specified正确做法yolo export modelbest.pt formatonnx imgsz640 batch1 dynamicFalse注意Jetson上必须设置dynamicFalse否则ONNX Runtime会报错4.2 ONNX Runtime的正确打开方式在ARM平台需要使用特定版本的ONNX Runtimepip install onnxruntime1.16.3 -f https://developer.download.nvidia.com/compute/redist/jp/v50验证导出的ONNX模型import onnxruntime as ort sess ort.InferenceSession(best.onnx, providers[CUDAExecutionProvider]) # 必须显式指定CUDA5. 性能调优榨干Orin Nano的每一分算力5.1 电源管理模式设置sudo nvpmodel -m 0 # 最大性能模式 sudo jetson_clocks # 锁定最高频率5.2 训练参数黄金组合在data.yaml中添加这些魔法参数train_args: batch: 8 imgsz: 320 workers: 2 # 超过2会导致内存溢出 patience: 20 device: 0 half: True # 必须启用半精度6. 那些让我熬夜的诡异问题6.1 内存泄漏之谜训练过程中突然崩溃日志显示CUDA out of memory。解决方法export PYTORCH_CUDA_ALLOC_CONFmax_split_size_mb:32 # 限制内存块大小6.2 神秘的进程残留多次运行训练后出现RuntimeError: CUDA error: out of memory其实是之前的进程没清理pkill -f python.*yolo # 强制终止残留进程7. 实用脚本一键环境配置创建setup_yolov8.sh#!/bin/bash echo [1/5] 系统配置... sudo apt-mark hold *cuda* *tensorrt* *nvidia* sudo apt update sudo apt install -y python3-pip libopenblas-dev echo [2/5] 创建虚拟环境... python3 -m venv ~/yolov8_env source ~/yolov8_env/bin/activate echo [3/5] 安装PyTorch... pip install --pre torch torchvision --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v50 echo [4/5] 安装YOLOv8... pip install ultralytics numpy1.26.4 echo [5/5] 性能优化... sudo nvpmodel -m 0 sudo jetson_clocks记得给执行权限chmod x setup_yolov8.sh经过两周的反复折腾我的Jetson Orin Nano现在可以稳定运行YOLOv8训练。最大的教训是ARM架构下的AI开发永远不要假设任何组件能开箱即用。建议每次修改环境后创建系统快照毕竟你永远不知道下一个坑会在哪里等着。

更多文章