最近要用orin跑深度学习部署,我的设备:jetson orin AGX 8核。
注:nvidia jeson orin nano和orin nx模组已经可以升级成super模式了。
一. 环境准备
1. orin安装conda
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
选择aarch64架构
下载后运行:
sh ./Anaconda3-2021.04-Linux-aarch64.sh
一直回车,中间需要输入两次yes,安装成功。
2. 安装jetpack、cuda、cudnn
Jetpack可以理解为Jetson系列板上的软件开发工具包,所有常用的开发kit里面都有。apt安装Jetpack时默认直接装上与jetson版本号适配的cuda、cudnn、TensorRT。
sudo apt upgrade
sudo apt update
sudo apt dist-upgrade
sudo reboot
sudo apt install nvidia-jetpack
安装pip:
sudo apt install python3-pip
修改pip默认源为清华源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装 Jtop
sudo -H pip3 install -U pip
sudo -H pip install jetson-stats
安装完成后reboot,输入jtop:
输入:sudo jetson_release
cuda已经默认安装在/usr/local/cuda下,运行:
sudo nano ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
保存后更新:
source ~/.bashrc
运行nvcc -V查看cuda版本号:
进行头文件的动态链接:
#复制文件到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.6.0和8对应安装的cudnn版本号和首数字
cd /usr/local/cuda/lib64sudo ln -sf libcudnn.so.8.6.0 libcudnn.so.8
sudo ln -sf libcudnn_ops_train.so.8.6.0 libcudnn_ops_train.so.8
sudo ln -sf libcudnn_ops_infer.so.8.6.0 libcudnn_ops_infer.so.8sudo ln -sf libcudnn_adv_train.so.8.6.0 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_adv_infer.so.8.6.0 libcudnn_adv_infer.so.8sudo ln -sf libcudnn_cnn_train.so.8.6.0 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.6.0 libcudnn_cnn_infer.so.8sudo ldconfig
测试cudnn:
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
报错:
补充配置:
sudo apt-get install libfreeimage3 libfreeimage-dev
重新运行。配置成功后显示:test passed!
3. 安装pytorch、torchvision
我的jetpack版本为5.1.2,对应相关库版本参照官网zoo:
前往Nvidia论坛,下载Jetson NX专用的pytorch安装包。
传送门:PyTorch for Jetson - Announcements - NVIDIA Developer Forums
我下载V2.1.0
创建conda环境:conda create --name loc python=3.8
安装nvidia编译好的pytorch库文件:下载2.1.0版本
conda activate loc
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-devpip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
安装torchvision
PyTorch中torch、torchvision、torchaudio、torchtext版本对应关系_torch2.0.1对应的torchvision-优快云博客
对应找torchvision版本,我需要安装 0.16.1
PyTorch v1.8 - torchvision v0.9.0
PyTorch v1.9 - torchvision v0.10.0
PyTorch v1.10 - torchvision v0.11.1
PyTorch v1.11 - torchvision v0.12.0
PyTorch v1.12 - torchvision v0.13.0
PyTorch v1.13 - torchvision v0.13.0
PyTorch v1.14 - torchvision v0.14.1
PyTorch v2.0 - torchvision v0.15.1
PyTorch v2.1 - torchvision v0.16.1
PyTorch v2.2 - torchvision v0.17.1
PyTorch v2.3 - torchvision v0.18.0
jetson上的gpu版本torchvision没有现成的安装包,需要自己编译安装(之前直接pip install torchvision,安装的是cpu版本,导致最后跑算法的时候用不了cuda)
# 安装工具链
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev
# 下载torchvision
git clone --branch v0.16.1 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.16.1 # v0.16.1 为torchvision版本
python3 setup.py install --user
这里一直出错,报:
running build_ext
error: [Errno 2] No such file or directory: ':/usr/local/cuda/bin/nvcc'
解决方法:
执行:
export CUDA_HOME=/usr/local/cuda
后再重新安装。
后面又出现了一个报错:
/home/priscilla/Downloads/torchvision/torchvision/csrc/io/decoder/stream.cpp:68:42: error: ‘AV_CODEC_CAP_INTRA_ONLY’ was not declared in this scope; did you mean ‘AV_CODEC_PROP_INTRA_ONLY’? 68 | if (codecCtx_->codec->capabilities & AV_CODEC_CAP_INTRA_ONLY) { | ^~~~~~~~~~~~~~~~~~~~~~~ | AV_CODEC_PROP_INTRA_ONLY error: command '/usr/bin/g++' failed with exit code 1
解决方式:
应用修复:
sed -i 's/AV_CODEC_CAP_INTRA_ONLY/AV_CODEC_PROP_INTRA_ONLY/g' torchvision/csrc/io/decoder/stream.cpp
测试修复:
grep -n "INTRA_ONLY" torchvision/csrc/io/decoder/stream.cpp^C
再次编译,终于成功。。。
4. 软链接tensorrt
jetpack自动安装的tensorrt路径在:/usr/lib/python3.8/dist-packages/
运行:
sudo ln -s /usr/lib/python3.8/dist-packages/tensorrt* /home/priscilla/anaconda3/envs/loc/lib/python3.8/site-packages
测试:
python -c "import tensorrt;print(tensorrt.__version__)"
出现版本号,则安装成功。
5. 检查cuda使用:
python -c "import torch; import torchvision; print('PyTorch version:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('cuDNN enabled:', torch.backends.cudnn.enabled); print('cuDNN version:', torch.backends.cudnn.version()); print('Torchvision version:', torchvision.__version__)"
运行:
python
import torch
print(torch.cuda.is_available())
终于显示为true了。。。。。