最近的项目需要在英伟达的盒子上部署目标跟踪算法,配环境踩了不少坑,做一个简单的记录。
拿到盒子之后需要注意jetpack的版本,还有是不是已经装好了cuda,这关系到后续安装pytorch和torchvision,我的盒子最开始的jetpack版本是4.3,并且没有cuda,配了几天环境一直会有报错,后来发现是重新装的cuda版本、torch版本还有jetpack版本这三个不匹配。刷机之后很快就把环境配好了,如果一开始盒子没有配套的环境,强烈建议刷机,后续可以省很多麻烦,而且刷机其实很容易。
图片里我的jetpack、L4T还有cuda版本都是刷机之后的
1.使用命令查看
sudo apt-cache show nvidia-jetpack
会出现下图这样的信息,我的jetpack的版本是5.02
2.通过代码查询L4T的版本,在官网找到与L4T版本对应的jetpack版本
代码如下:
cat /etc/nv_tegra_release
我的L4T的版本是35.1.0
3.使用Jtop查看
网上安装Jtop的方法一般如下:
sudo apt install python3-pip #首先安装pip3
pip3 install jetson-stats
###或者 sudo -H pip3 install -U jetson-stats
sudo systemctl restart jetson_stats.service #首次使用需要激活
但是我这样装会出现如下的报错,应该是pip和setuptools的版本问题
最后通过下面的代码成功安装
sudo python -m pip install --upgrade --force pip
sudo pip install setuptools==33.1.1
sudo -H pip install -U jetson-stats
在终端输入代码打开Jtop
jtop
界面如下图所示,正常来说最上面的Jetpack后面会跟着版本号,括号里是L4T的版本
nvcc -V
我的cuda版本是11.4
相较于自己去再配置cuda、tensorRT,直接刷机来的更加简单粗暴,而且不会出现版本上的错误
材料准备:
Jetson AGX Xavier一台(英伟达盒子) |
装有ubuntu系统的电脑一台(宿主电脑) |
USB转TYPE-C数据线一条 |
电源线、网线、键盘、鼠标、显示屏 |
注意:宿主电脑的home剩余空间不能太小,因为后续在刷机的step 3时,下载的默认路径在home下面,我的home空间比较小,一开始把两个下载路径都改到了挂载的硬盘上,在烧录的时候出现了报错,可能是跟分区的格式有关系,后面换了一台电脑,直接采用默认路径,刷机一气呵成。很多帖子都要求至少有80G,具体需要多少我没做测试,如果空间不够会弹出提示。
下载SDK Manager
从英伟达官网下载SDK Manager
地址:NVIDIA SDK Manager | NVIDIA Developer
下载deb后缀的文件
可以直接双击安装或者使用sudo apt install指令
打开SDK Manager
装好以后,输入指令就可以打开SDK Manager
sdkmanager
打开之后需要登录英伟达的账号,如果没有的话注册一个就行
不需要勾选Host Machine,Target Hardware里面显示的是你盒子的型号,我这里没有连接盒子,所以显示“No board connected”,你可以选择在这一步就把盒子和主机连接起来,很多教程在烧录的时候才连接。第三行可以选择要安装的JetPack版本,我的主机Ubuntu版本是20.04,只能装最新的几个JetPack版本,如果要装低版本的可以用18.04的Ubuntu主机。
连接的注意事项:
1.使用USB转TYPE-C线将盒子与主机相连,要插在盒子有电源指示灯的那边
2.找到盒子一排的三个按钮,先按住中间的强制恢复键,再按旁边的电源键,等待2秒后同时放开
3.连接成功的话此时会跳出一个界面让你选择型号
直接选择默认的路径下载,勾选左边的框,随后就进入了下载和烧录的阶段
烧录的过程中会弹出这样的界面
选择手动安装(Manual Setup)输入想要给盒子系统设置的用户名和密码,其他不用管
选择USB,盒子没有连接网络也可以安装,只需要主机有网络就可以,能够通过USB分享给盒子
装到一定的过程,盒子会自动开机,如果有显示屏的话,与盒子连接,会看到此时进入了系统的设置界面,连接上鼠标键盘进行系统设置,可以在这步就进行换源(我是后面再换的)。此时已经刷得差不多了,后续继续等待,主机会接着给盒子安装组件和软件,直到安装结束。
1.更换软件源
为了加快后续下载软件的速度,需要对盒子进行换源,首先备份原来的软件源,后续出问题了也可以恢复
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑sources.list文件,进行换源
sudo gedit /etc/apt/sources.list
把原来的内容全部用下面的内容替换,我用的是清华源
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
更新软件源
sudo apt update
2.更换pip源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Jetson AGX xavier是aarch64的架构,不能直接通过pytorch官网安装pytorch,也不能(不确定)使用anaconda,我看anaconda的官网现在也有aarch64的包,下载安装之后,终端也会出现base,但是是在刷机之前装的,那时候import torch会出现非常难解决的错误,刷完机之后我装的是miniforge,跟anaconda的用法相同
1.下载安装miniforge
网址:Releases · conda-forge/miniforge · GitHub
选择对应的版本,我选的版本是‘miniforge-pypy3-4.14.0-0-linux-aarch64.sh’
下好后使用sh指令安装,安装过程跟anaconda相同,重新打开终端会看到前面出现了(base)
2.创建环境
创建环境与anaconda相同,注意python版本会影响到后面安装的torch版本,我要用到的torch版本是1.11,安装的是python3.8
conda create -n py38 python=3.8
后续torch和torchvision的安装都是在这个环境下
3.下载安装torch
虽然不能从pytorch官网安装torch,但是英伟达提供了编译好的torch文件
网址:PyTorch for Jetson - Jetson Nano - NVIDIA Developer Forums
!!!注意:选择与自己jetpack版本相兼容的torch文件
我的JetPack版本是5.0.2,所以我装的是v1.11.0,装错版本后续可能会报错
下载好以后,进入自己刚才创建的环境,使用pip install 指令安装
4.安装torchvision
直接复制了英伟达官网的教程
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch https://github.com/pytorch/vision torchvision #选择对应版本进行修改
###例如 git clone --branch v0.12.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.x.0 # 0.x.0 要填对应的torchvision的版本
###例如 export BUILD_VERSION=0.12.0
python3 setup.py install --user
cd ../ # attempting to load torchvision from build dir will result in import error
pip install 'pillow<7' # always needed for Python 2.7, not needed torchvision v0.5.0+ with Python 3.6
我在装的过程中报了个错:
ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
使用下面的代码解决:
sudo apt-get install libopenblas-dev
安装好torchvision之后,测试一下import torch会不会报错,再试试torch.cuda.is_available()会不会返回True,如果可以的话,大功告成!