无题/Jetson TX2 NX 配置笔记

Created Sun, 05 Mar 2023 22:01:11 +0800 Modified Wed, 13 Dec 2023 07:03:38 +0000
2305 Words
image

tx2nx开发板

由于科研的需要,需要在边缘设备上对深度学习模型进行量化测试。实验室内刚好有闲置的Nvidia Jetson TX2开发板,所以就直接拿来测试了

原本以为在开发板上的配置会比较简单,无非就是从x86平台转换到arm上面,但实际上坑非常多例如前面提到的arm架构,其实在Jetson上面压根不是传统的arm架构,而是从armv8独立分支出来的aarch架构

虽然坑非常多,但总体上配置流程也非常简洁,基本配置过程也和x86平台上面大致相同,只是在安装的时候需要注意。本文大纲如下

  • 烧录安装系统
  • 安装conda虚拟环境
  • 安装Pytorch和torchvision
  • 安装torch2trt

安装系统

首先需要烧录镜像到开发板中,由于我这块板子在购买的时候代理商就已经烧录好了系统到固件中,因此直接开机即可

如果是裸板安装,则可以参考知乎的教程进行烧录安装

连接电源启动开发板,在安装界面中可以选择启用CPU核心的选项,默认是4核,对应的SWAP大小为2GB,可以按照自己的需求进行更改。当然,如果已经安装完了系统也可以在系统中进行修改。

tx2自带的存储大小非常小只有16GB,按需求进行扩容,我这里是外接了一块128G的SSD硬盘

安装conda虚拟环境

按照本人的习惯,需要一个虚拟环境用于区分不同项目的环境,在tx2也不例外。这里就出现了第一个坑,那就是官方的conda并不能在tx2上完美运行! 就算你下载的是aarch架构的脚本,你在安装过程中也可能报错,又或者即使安装成功你在创建虚拟环境选择低版本的Python时也会出现错误

为了解决这个问题,我们需要使用一个修改版的conda,那就是Mambaforge。从官方的Release中下载所需要的脚本文件(注意得是aarch架构的文件!),安装方式则和普通版本的conda如出一辙,需要注意的是安装的位置需要选择一个容量更大的硬盘上面

wget https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-aarch64.sh
sh Mambaforge-22.11.1-4-Linux-aarch64.sh

随后创建你的第一个环境吧

conda create -n hello python=3.6
conda activate hello

安装Pytorch和torchvision

在安装Pytorch前,你需要安装Jetson的CUDA环境,默认情况下是没有的,当然在Nvidia自家产品上安装CUDA环境非常简单,不像Linux那样惹人厌。安装只需要一条命令即可

sudo apt install nvidia-jetpack

这时,查看/usr/local中应该就会出现对应的CUDA环境了,Jetpack会帮助你安装CUDA工具包、TensorRT和其他工具,你可以通过jetson_release来查看当前安装的CUDA版本

(base) tx2-1@tx2-1-desktop:/usr/local$ jetson_release
Software part of jetson-stats 4.1.5 - (c) 2023, Raffaello Bonghi
Model: lanai-3636 - Jetpack 4.6.1 [L4T 32.7.1]
NV Power Mode: MAXP_CORE_ARM - Type: 3
jtop:
 - Version: 4.1.5
 - Service: Active
Libraries:
 - CUDA: 10.2.300
 - cuDNN: 8.2.1.32
 - TensorRT: 8.2
 - VPI: 1.2.3
 - OpenCV: 4.1.1 - with CUDA: NO

此时,你也可以将CUDA的环境添加到终端中,为后续编译做准备

# $HOME/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin

接下来就要开始安装Pytorch了,注意的是在Jetson设备上并不能像传统conda环境那样直接通过conda或pip安装,需要到Nvidia官方下载对应的安装包。而torchvision也需要自己手动编译安装或下载第三方编译好的包进行安装。以下流程均来自官方教程

  1. 安装Pytorch 在这里,由于虚拟环境选择的Python版本为3.6,而最高支持3.6版本的Pytorch版本为1.8.0,所以这里安装1.8.0版本
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
conda activate hello
pip install cython numpy==1.19.4 torch-1.8.0-cp36-cp36m-linux_aarch64.whl

注意,这里numpy选择安装1.19.4版本,默认的1.19.5版本会出现莫名其妙的bug

  1. 安装torchvision
    安装torchvison需要注意所安装的torch版本,对应列表如下
PyTorch v1.0 - torchvision v0.2.2
PyTorch v1.1 - torchvision v0.3.0
PyTorch v1.2 - torchvision v0.4.0
PyTorch v1.3 - torchvision v0.4.2
PyTorch v1.4 - torchvision v0.5.0
PyTorch v1.5 - torchvision v0.6.0
PyTorch v1.6 - torchvision v0.7.0
PyTorch v1.7 - torchvision v0.8.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

我们先看看自行编译安装方式,首先确认所需要的版本,这里为v0.9.0,然后按照下述过程进行安装

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch 0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user

如果你一切顺利的话,通过pip list | grep torch则可以看到对应的安装文件了,但是本人运气不咋行,在编译中遇到nvcc的错误,什么找不到目标文件之类的,但是也没有其他错误信息,让我非常头疼

幸运的是,在谷歌上搜到别人为nano编译好了的torchvision。虽然是在nano编译的,但是都是aarch架构应该可以用吧,实际上也确实可以用,参考链接

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
pip install pillow gdown
gdown https://drive.google.com/uc?id=1BdvXkwUGGTTamM17Io4kkjIT6zgvf4BJ
pip install torchvision-0.9.0a0+01dfa8e-cp36-cp36m-linux_aarch64.whl
pip list | grep torch
torch               1.8.0
torch2trt           0.4.0 # 这个后面会进行安装
torchvision         0.9.0a0+01dfa8e

ok,这就安装完事了,非常简单

最后打开终端测试是否安装成功

import torch
import torchvision
torch.cuda.is_avaliable()
>>> True

安装torch2trt

安装torch2trt的过程非常简单,但也有两个点需要注意

首先,我们可以发现在上面安装jetpack的时候可以发现已经安装好了TensorRT(甚至docker),但是安装包并不存在于虚拟环境中,而我们并不想要在重新安装一遍这玩意,因此需要对其进行复用,不然后续编译torch2trt时会直接报错(

export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/dist-packages # 目录按照实际情况更改

这时你再到虚拟环境的终端中测试python是否能正常导入tensorrt

import tensorrt

如果一切正常就可以进行下一步的安装了,首先需要clone所需要的仓库

git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt

在这里我们直接选择最新版本,避免和tensorrt新api冲突

git checkout v0.4.0

随后就可以直接进行安装了,如果安装过程中碰到缺少包的情况直接pip安装即可

python setup.py install
pip list | grep torch
torch               1.8.0
torch2trt           0.4.0 # 这个后面会进行安装
torchvision         0.9.0a0+01dfa8e

结语

总的来说Tx2的配置没有我想象中的简单但也没有那么复杂,Nvidia社区中有大量的解决方案(虽然nano居多)仔细谷歌也都可以寻找到答案。我在测试了几个开源的项目后发现TX2的性能也还不错,不过CPU非常垃圾,后续也会写写关于开源项目如何在TX2上测试的例子,更好的理解和熟悉这块开发板