保姆级教程:用Miniconda在Jetson Xavier NX上为YOLOv8搭建纯净Python 3.8 + PyTorch 2.0.0环境
在Jetson Xavier NX上搭建YOLOv8开发环境的完整指南
对于希望在边缘计算设备上部署计算机视觉模型的开发者来说,NVIDIA Jetson Xavier NX是一个极具吸引力的选择。这款小巧但功能强大的AI计算平台,结合YOLOv8这一当前最先进的目标检测算法,能够为各种实时视觉应用提供强有力的支持。本文将详细介绍如何在Jetson Xavier NX上为YOLOv8搭建一个稳定可靠的开发环境,包括Python 3.8、PyTorch 2.0.0及其依赖项的安装配置。
1. Jetson Xavier NX平台准备
在开始环境配置前,我们需要确保Jetson Xavier NX系统本身已正确设置。Jetson Xavier NX运行的是基于ARM架构的Ubuntu系统,这与其他常见的x86平台有所不同,因此在软件安装时需要特别注意选择适配ARM64架构的版本。
首先检查系统的基本信息:
cat /etc/nv_tegra_release uname -a这些命令将显示当前安装的JetPack版本和系统架构信息。JetPack是NVIDIA为Jetson系列提供的软件开发套件,包含了CUDA、cuDNN、TensorRT等关键组件。对于YOLOv8,推荐使用JetPack 5.1.2或更新版本。
接下来,更新系统软件包:
sudo apt update sudo apt upgrade -y安装一些基础开发工具:
sudo apt install -y build-essential cmake git wget python3-pip2. Miniconda环境管理
在Jetson平台上,使用Miniconda管理Python环境可以极大简化依赖管理过程,特别是当需要同时维护多个项目时。Miniconda是Anaconda的轻量级版本,只包含conda、Python和少量必要包。
2.1 安装Miniconda
下载并安装适用于aarch64架构的Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-aarch64.sh bash Miniconda3-py38_23.5.2-0-Linux-aarch64.sh安装过程中,按照提示操作即可。安装完成后,关闭并重新打开终端,或者执行以下命令使conda命令生效:
source ~/.bashrc验证conda是否安装成功:
conda --version2.2 配置conda环境
为了提高包下载速度,建议配置清华大学的conda镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes创建一个专用于YOLOv8的Python 3.8环境:
conda create -n yolov8 python=3.8 -y conda activate yolov83. PyTorch for Jetson安装
PyTorch是YOLOv8的核心依赖之一。由于Jetson的ARM架构,不能直接使用PyPI上的PyTorch预编译包,而需要安装NVIDIA专门为Jetson平台编译的版本。
3.1 安装PyTorch 2.0.0
首先安装一些必要的系统库:
sudo apt install -y libopenblas-base libopenmpi-dev libjpeg-dev zlib1g-dev然后下载并安装PyTorch 2.0.0的wheel包:
wget https://nvidia.box.com/shared/static/i8pukc49h3lhakr3z5qjrz3asgf8ppxp.whl -O torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl pip install torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl3.2 安装Torchvision 0.15.0
Torchvision需要从源码编译安装。首先安装编译依赖:
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev然后下载并安装Torchvision:
git clone --branch v0.15.0 https://github.com/pytorch/vision torchvision cd torchvision export BUILD_VERSION=0.15.0 python setup.py install cd ..3.3 验证PyTorch安装
创建一个Python脚本验证PyTorch是否正确安装并能使用GPU:
import torch print(f"PyTorch版本: {torch.__version__}") print(f"CUDA可用: {torch.cuda.is_available()}") print(f"CUDA版本: {torch.version.cuda}") print(f"设备数量: {torch.cuda.device_count()}") print(f"当前设备: {torch.cuda.current_device()}") print(f"设备名称: {torch.cuda.get_device_name(0)}")如果一切正常,应该看到类似以下输出:
PyTorch版本: 2.0.0+cu118 CUDA可用: True CUDA版本: 11.8 设备数量: 1 当前设备: 0 设备名称: NVIDIA Tegra Xavier (nvgpu)4. YOLOv8环境配置
现在我们可以安装YOLOv8所需的依赖项和ultralytics包。
4.1 安装基础依赖
pip install numpy opencv-python tqdm matplotlib seaborn4.2 安装ultralytics
安装YOLOv8的官方实现:
pip install ultralytics==8.0.238验证安装:
python -c "from ultralytics import YOLO; print(YOLO)"4.3 测试YOLOv8
下载一个预训练模型进行简单测试:
from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8n.pt') # 在测试图像上运行推理 results = model('https://ultralytics.com/images/bus.jpg') # 显示结果 results[0].show()5. 常见问题解决
在Jetson平台上配置YOLOv8环境可能会遇到一些特有的问题,以下是几个常见问题及其解决方案。
5.1 libopenblas缺失问题
如果遇到类似ImportError: libopenblas.so.0: cannot open shared object file的错误,可以安装以下包解决:
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/o/openblas/libopenblas-dev_0.3.8+ds-1ubuntu0.20.04.1_arm64.deb sudo dpkg -i libopenblas-dev_0.3.8+ds-1ubuntu0.20.04.1_arm64.deb sudo apt --fix-broken install5.2 GLIBCXX版本问题
如果遇到GLIBCXX_3.4.29' not found错误,可以尝试以下解决方案:
conda install -c conda-forge gcc=12.1.0或者在conda环境中设置LD_PRELOAD:
export LD_PRELOAD=$CONDA_PREFIX/lib/libstdc++.so.65.3 内存不足问题
Jetson Xavier NX的内存有限,运行YOLOv8时可能会遇到内存不足的情况。可以尝试以下方法:
- 使用较小的模型(如yolov8n或yolov8s)
- 减小推理时的batch size
- 启用交换空间:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile6. 性能优化建议
为了在Jetson Xavier NX上获得最佳的YOLOv8性能,可以考虑以下优化措施:
- 启用TensorRT加速:将PyTorch模型转换为TensorRT引擎可以显著提高推理速度
- 使用FP16精度:Jetson Xavier NX的GPU支持FP16计算,可以几乎不损失精度的情况下提高速度
- 调整模型输入尺寸:较小的输入尺寸(如320x320)会更快但精度略低
- 使用NVIDIA的jetson_stats工具监控系统资源使用情况:
sudo pip install -U jetson-stats jtop7. 模型导出与部署
完成环境配置后,你可能需要将训练好的YOLOv8模型导出为其他格式以便部署。
7.1 导出为ONNX格式
from ultralytics import YOLO model = YOLO('yolov8n.pt') # 加载自定义模型 model.export(format='onnx', dynamic=True, simplify=True) # 导出为ONNX7.2 导出为TensorRT引擎
首先确保已安装TensorRT:
sudo apt install tensorrt然后使用trtexec工具转换ONNX模型:
/usr/src/tensorrt/bin/trtexec \ --onnx=yolov8n.onnx \ --saveEngine=yolov8n.trt \ --fp16 \ --minShapes=images:1x3x640x640 \ --optShapes=images:1x3x640x640 \ --maxShapes=images:1x3x640x6408. 实际应用示例
下面是一个完整的YOLOv8目标检测示例,展示了如何在Jetson Xavier NX上使用配置好的环境:
import cv2 from ultralytics import YOLO # 加载模型 model = YOLO('yolov8n.pt') # 或使用自定义模型路径 # 打开摄像头 cap = cv2.VideoCapture(0) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 运行推理 results = model(frame, imgsz=320) # 减小imgsz可以提高速度 # 绘制结果 annotated_frame = results[0].plot() # 显示结果 cv2.imshow('YOLOv8 Inference', annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()这个示例展示了如何使用YOLOv8进行实时摄像头目标检测。在实际应用中,你可能需要根据具体需求调整模型大小、输入尺寸和其他参数以达到最佳的性能-精度平衡。
