jetson orin nx安装pytorch、opencv
前言
前篇文章把系统和一些环境配好了,接下来可以根据自己的需求配置一些其他的包。由于项目需要,本人配了pytorch,opencv with cuda,在此继续记录一下。
1.pytorch
由于开发板是aarch64架构,如果直接用pytorch官网上的命令的话,会出现包找不到的错误,如果直接pip install torch的话倒是可以安装成功,只不过是cpu的版本。本人在此处踩了很多坑,最后还是按照nvidia官网的步骤配好了。
首先先下载一下Anaconda3吧,这个很简单。或者可以下载Archiconda3。接着创建一个conda环境,装好python(我的是3.8)。
我是按照nvidia官方的指示安装的,非常简单:
1.首先安装一些依赖:
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;
2.接着导入命令:
export TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v51/pytorch/torch-1.14.0a0+44dac51c.nv23.02-cp38-cp38-linux_aarch64.whl
可以安装指定版本:
https://developer.download.nvidia.com/compute/redist/jp/v$JP_VERSION/pytorch/$PYT_VERSION
其中JP-VERSION是JetPack版本,4.6.1就填461,5.0就是50
PYT-VERSION是pytorch版本,在这个网站上的最后查看
3.安装pytorch:
python3 -m pip install --upgrade pip; python3 -m pip install aiohttp numpy=='1.19.4' scipy=='1.5.3' export "LD_LIBRARY_PATH=/usr/lib/llvm-8/lib:$LD_LIBRARY_PATH"; python3 -m pip install --upgrade protobuf; python3 -m pip install --no-cache $TORCH_INSTALL
大功告成,这样安装的pytorch是可以使用gpu的。
2.torchvision
由于 torchvision 不提供针对 Jetson 平台的预编译包,因此需要从源码进行编译。
git clone https://github.com/pytorch/vision torchvision
cd torchvision
git checkout tags/v0.11.1 -b v0.11.1
export BUILD_VERSION=0.11.1. #可更改
pip install -e .
3.tensorrt
这里其实二次刷机的时候是安装好的,但是需要有个注意的地方:
conda下import tensorrt是会报错的,conda环境下的python是打不开tensorrt的!!!
我是把anaconda从环境变量中去除才看到tensorrt的,另外在终端输入python是python2,也打不开,要输入python3:
还有一种方法,是安装mmdeploy的官网给出的:
JetPack SDK 自带 TensorRT。 但是为了能够在 Conda 环境中成功导入,我们需要将 TensorRT 拷贝进先前创建的 Conda 环境中。
cp -r /usr/lib/python${PYTHON_VERSION}/dist-packages/tensorrt* ~/archiconda3/envs/mmdeploy/lib/python${PYTHON_VERSION}/site-packages/
conda deactivate
conda activate mmdeploy
python -c "import tensorrt; print(tensorrt.__version__)" # 将会打印出 TensorRT 版本
# 为之后编译 MMDeploy 设置环境变量
export TENSORRT_DIR=/usr/include/aarch64-linux-gnu
# 将 cuda 路径和 lib 路径写入到环境变量 `$PATH` 和 `$LD_LIBRARY_PATH` 中, 为之后编译 MMDeploy 做准备
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
也可以通过添加以上环境变量至 ~/.bashrc 使得它们永久化。
echo -e '\n# set environment variable for TensorRT' >> ~/.bashrc
echo 'export TENSORRT_DIR=/usr/include/aarch64-linux-gnu' >> ~/.bashrc
echo -e '\n# set environment variable for CUDA' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/cuda/bin' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc
source ~/.bashrc
conda activate mmdeploy
4.opencv with cuda
注意注意注意!!!要安装opencv with cuda,并且从github上的opencv下载源码进行安装的时候,一定先不要下载Anaconda。不然make的时候会报错:undefined reference
我初步猜测原因可能是python版本的原因,目前装好系统后,系统自带的python为3.8.10,用anaconda下载的python版本为3.8.16,Python 3.8.16版本在安装过程中,就会默认安装libffi-3.4.2,在该库中,就会出现旧版本兼容老版本问题,即出现libffi.so.7链接至libffi.so.8.1.0,进而产生报错。而在python3.8.10中,默认安装libffi-3.3版本,在该版本内,libffi.so.7链接至libffi.so.7.1.0,就不会产生上述问题。
这里参考Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer…问题解决
二次刷机后的opencv是没有cuda的版本,要先给卸载了:
sudo apt purge libopencv-dev libopencv-python libopencv-samples libopencv*
接着安装一些依赖:
sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev \
python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev python3-pip python3-numpy
从源码进行安装:
VERSION=4.4.0 #可更换版本
git clone https://github.com/opencv/opencv.git -b $VERSION --depth 1
进入安装目录进行编译:
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D PYTHON_EXECUTABLE=$(which python2) \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D WITH_CUDA=ON \
..
不出意外的话应该会出意外,报错:CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib‘
解决方法为,先安装opencv_contrib:
VERSION=4.4.0
git clone https://github.com/opencv/opencv_contrib.git -b $VERSION --depth 1
安装好后进入该文件夹,将opencv_contrib中的modules中的cudev文件夹复制到opencv/modules里。然后再按上述命令进行编译,应该就没问题了。
编译好后:
make -j8
要等一段时间,再:
sudo make install
sudo ldconfig
大功告成,jtop命令可以看到(我下载的4.7.0版本):