本文设备内置的模组是 Nvidia Jetson AGX Orin 32GB,算力达到 200 TOPS,aarch64 架构
本文主要参考《Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程》,外加自己的细微调整,在此感谢博主的分享。
博主完全以小白身份参考该篇博文一步一步配置开始,期间多次推倒重来甚至刷机,花了一周时间终于花开见明月,以下若有出入之处,敬请了解和指导,以免误人误己。
Anaconda 是一个用于科学计算的 Python 和 R 语言的发行版,它包含了众多流行的科学计算、数据分析和机器学习库。Anaconda 使用 conda 作为包管理器和环境管理器。
Jetson 系列模组,其架构都是 aarch64,而不是传统 PC 的 amd64
下载地址,点击进入后选择 Anaconda3-2023.03-1-Linux-aarch64.sh 进行下载
进入下载文件夹,按如下命令安装即可:
#首先给脚本文件增加可执行权限
chmod +x Anaconda3-2023.03-1-Linux-aarch64.sh
#运行安装脚本执行安装
./Anaconda3-2021.11-Linux-aarch64.sh
# 根据提示按 Enter 键,并一直按住,直到出现输入 yes or no 提示语句,并输入 yes 按 Enter 键继续
# 等待安装完成提示 by running conda init ?[yes|no] 时输入 yes 按 Enter 键继续
# 查看 conda 版本,看是否安装成功
conda -V
# 如果提示 -bash: conda: command not found,则 source 一下
source ~/.bashrc
创建新的虚拟环境
切记指定 python 版本为 3.8,因为后续安装 PyTorch 时指定的 Python 版本为 3.8
# 博主以 yolov5 6.1 版本创建虚拟环境名称,并指定 python 版本为 3.8.16
conda create --name yolov561 python=3.8.16
# 激活新建的虚拟环境
conda activate yolov561
注意以下安装过程都需要在 yolov561 虚拟环境中,如果过程中重启,需要手动进入
jtop 是一个基于 Python 编写的交互式系统监视器,类似于 Linux 上的 top 命令。它可以实时显示系统资源使用情况、进程信息、网络连接状态等。
# 需要使用 pip3 来安装 jtop,所以先安装 pip3
sudo apt install python3-pip
# 安装jtop
sudo -H pip3 install -U jetson-stats
# 重启系统
sudo reboot
# 启动 jtop
jtop
此处重启了系统,需要再次调用如下指令进入 yolov561 虚拟环境
conda activate yolov561
CUDA 是英伟达公司推出的用于 GPU 并行计算的平台和编程模型。它提供了一组 API,可以让开发者使用 C、C++、Fortran 等语言进行 GPU 编程,并且支持在不同操作系统(如 Windows、Linux)和不同架构(如 NVIDIA GPU)之间进行部署。
而 CuDNN(CUDA Deep Neural Network library)是英伟达公司专门为深度学习领域开发的一个库,提供了高效的神经网络相关操作实现,包括卷积、池化、标准化、激活函数等,能够充分利用 NVIDIA GPU 的计算性能进行加速,适用于常用的深度学习框架如 TensorFlow、PyTorch、Caffe 等。
总的来说,CUDA 提供了一整套 GPU 计算的基础设施和编程接口,而 CuDNN 则是其中的一个针对深度学习领域的重要组成部分,两者结合可以为深度学习任务提供高效的计算支持。
通过运行 jtop 命令点击底部 info 选项进入 info 界面得知,已安装了 Jetpack 5.0.2,以及 cuda 11.4 和 cudnn 8.4.1,所以此处无需安装 cuda 和 cudnn,博主之前就是在系统已经安装的情况下再次安装出现了问题一顿乱倒腾导致黑屏刷机的
#打开~/.bashrc
sudo gedit ~/.bashrc
#在文本末输入如下代码并保存退出
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=/usr/local/cuda
#更新环境变量配置
source ~/.bashrc
复制 cudnn 头文件和库文件到 cuda 目录
虽然安装了 cuDNN,但没有将对应的头文件和库文件放到 cuda 目录
cuDNN的头文件在:/usr/include,库文件位于:/usr/lib/aarch64-linux-gnu
复制操作如下:
#复制文件到cuda目录下
cd /usr/include && sudo cp cudnn* /usr/local/cuda/include
cd /usr/lib/aarch64-linux-gnu && sudo cp libcudnn* /usr/local/cuda/lib64
#修改文件权限,修改复制完的头文件与库文件的权限,所有用户都可读,可写,可执行:
sudo chmod 777 /usr/local/cuda/include/cudnn.h
sudo chmod 777 /usr/local/cuda/lib64/libcudnn*
#重新软链接,这里的8.4.1和8对应安装的cudnn版本号和首数字
cd /usr/local/cuda/lib64
sudo ln -sf libcudnn.so.8.4.1 libcudnn.so.8
sudo ln -sf libcudnn_ops_train.so.8.4.1 libcudnn_ops_train.so.8
sudo ln -sf libcudnn_ops_infer.so.8.4.1 libcudnn_ops_infer.so.8
sudo ln -sf libcudnn_adv_train.so.8.4.1 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_adv_infer.so.8.4.1 libcudnn_adv_infer.so.8
sudo ln -sf libcudnn_cnn_train.so.8.4.1 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.4.1 libcudnn_cnn_infer.so.8
sudo ldconfig
# 复制测试用例程序到指定目录并编译测试程序
sudo cp -r /usr/src/cudnn_samples_v8/ ~/
cd ~/cudnn_samples_v8/mnistCUDNN
sudo chmod 777 ~/cudnn_samples_v8
sudo make clean && sudo make
# 运行测试程序
./mnistCUDNN
如果运行成功,会显示如下信息:
Test passed!
大功告成
PyTorch 是一个基于 Python 的开源机器学习框架,由 Facebook 人工智能研究院(FAIR)开发和维护。PyTorch提供了动态计算图的功能,使得用户可以在模型训练的过程中进行动态调整,这为灵活的模型设计和快速迭代提供了便利。
同时,PyTorch 也支持张量计算和自动微分,可以帮助用户快速构建神经网络模型并进行优化。此外,PyTorch 还提供了丰富的工具和库,包括 torchvision,用于图像处理任务的预处理、数据加载和可视化等。
torchvision 是 PyTorch 中专门用于处理图像和视频数据的扩展库,它提供了一系列高效的工具和函数,方便用户进行图像和视频数据的预处理和增强,并且可以快速加载和处理常用的数据集(如 MNIST、CIFAR 等)。同时,torchvision 也提供了各种常用的图像和视频模型(如 ResNet、Inception 等),可以帮助用户快速搭建和训练模型。
pytorch 版本不能随意安装,必须安装英伟达编译的好的库文件,系统安装的是 Jetpack 5.0.2,博主也选择了 PyTorch v1.12.0 版本
点击进入官方页面进行版本查看和下载
下载完成后,在下载目录下执行如下指令
sudo pip install torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
如果安装过程中报错,可以执行以下指令再次进行安装:
sudo apt-get -y update;
sudo apt-get -y install autoconf bc build-essential g++-8 gcc-8 clang-8 lld-8 gettext-base gfortran-8 iputils-ping libbz2-dev libc++-dev libcgal-dev libffi-dev libfreetype6-dev libhdf5-dev libjpeg-dev liblzma-dev libncurses5-dev libncursesw5-dev libpng-dev libreadline-dev libssl-dev libsqlite3-dev libxml2-dev libxslt-dev locales moreutils openssl python-openssl rsync scons python3-pip libopenblas-dev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.13.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.13.0
python3 setup.py install --user
import torchvision 可能会报 ModuleNotFoundError,以下列举了一些错误的解决方法
若出现以上报错,执行 pip install requests
最终使用 pip list 查看 torch 和 torchvision 版本,显示如下:
注:博主在这个 torch 和 torchvision 的版本匹配上耗费了很久,推倒多次重来才得以解决 yolov5 使用 GPU 来执行推理运算,即 torch 和 torchvision 版本不匹配出现的如下报错:
\Anaconda3\envs\pytorch-gpu\lib\site-packages\torchvision\io\image.py:13: UserWarning: Failed to load image Python extension:
可能是博主一顿乱安装包括后续安装 yolov5 需要的依赖库时里面也包含了 torch 和 torchvision,之前安装出现问题是因为 torch 版本是 1.12.0a0,而 torchvision 版本是 0.13.0,不是上图中的 0.13.0a0,至于是如何阴差阳错安装上的,博主现在也还无法确定具体是哪一步骤的问题。
以下是博主复盘时发现之前安装 torchvision 的过程截图,没想到一开始就成功了的,具体步骤是按照博文开头提到的参考博文来操作的。
之前由于两者版本不对的问题,也能够运行 yolov5 算法,但后面才知道为啥推理速度比较慢的缘故了,原来是用的 cpu 在推理,可以通过如下方式查询是用的 cpu 还是 gpu
# 终端运行 python3
python3
>>import torch
>>torch.cuda.is_available()
false
false 表明 GPU 不可用,而 true 表明 GPU 可用
TensorRT 是英伟达公司开发的加速深度学习推理的软件库。它利用 GPU 硬件的并行计算能力,通过优化神经网络模型结构、剪枝和量化等技术,实现了对模型推理的加速。TensorRT兼容多种深度学习框架,并提供了 C++ 和Python API,使得用户可以方便地将其集成到自己的应用程序中。TensorRT 广泛应用于图像分类、目标检测、语音识别、自然语言处理等领域,在提升深度学习应用实时性和效率方面发挥着重要作用。
Jetpack 已经给我们自动安装好了,但是安装位置在 /usr/lib/python3.8/dist-packages/ 中,不能被虚拟环境中定位使用。因此我们需要软链接一下,运行如下命令:
注:这里路径需要修改成自己的虚拟环境名,因为博主用了虚拟环境 yolov561,如果不是该名字需要更换,另外如果指定虚拟环境时指定的不是 python3.8,也需要一并修改成指定的 python 版本
sudo ln -s /usr/lib/python3.8/dist-packages/tensorrt* /home/nvidia/anaconda3/envs/yolov561/lib/python3.8/site-packages/
测试一下,运行如下指令:
python -c "import tensorrt;print(tensorrt.__version__)"
若出现版本号,则成功:
安装完成后,暂未使用其来加速 yolov5,有时间摸索出来了再来完善
Github 上下载 yolov5 代码,博主用的 6.1 版本,按照如下方式下载
git clone --branch v6.1 https://github.com/ultralytics/yolov5.git
下载完成后 cd 进入并执行以下指令:
注:执行前打开 requirements.txt 屏蔽 torch 和 torchvision 的判断,因为之前已经匹配安装了 torch 和 torchvision,避免此处安装最新版使得无法使用 GPU 来推理运算
pip install -r requirements.txt
安装完成后,输入 python 运行,并依次输入如下 python 指令
import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s") # or yolov5n - yolov5x6, custom
# Images 本地图片路径,可自行修改
img = "/home/nvidia/Downloads/1.jpg" # or file, Path, PIL, OpenCV, numpy, list
# Inference
results = model(img)
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.
若出现以上报错,执行 pip install opencv-python
若出现以上报错,执行 sudo pip3 install pandas
其他没例举的报错请按照类似方法自行解决
非常感谢第一篇参考链接博文,给了很大的参考意义,感谢该博主。本文在其基础上扩展了一些经验,希望对大家有多帮助。