Sycamore

Phoenix reborns from the ashe

0%

Jetson Xavier NX 烧录系统+配置torch全教程

本教程适配于采用M.2 NVMe SSD的Jetson Xavier NX板子。

介绍了采用EMMC作为内置储存的Jetson Xavier NX该如何烧写程序并完成扩容。以及安装CUDA、Pytorch、torchvision教程。

血🩸与泪😢的旅途。

HOST虚拟机准备

由于Jetson Xavier NX采用的是内置的EMMC为储存卡,而不是采用可以插拔的SD卡,所以我们需要用NVIDIA的SDK Manager进行烧写程序,这个软件的运行环境为Linux。

下载VMware,安装Ubuntu

VMware17.0获取网址:VMware17.0安装教程

在VMware中安装Ubuntu系统,Ubuntu系统的版本注意:

  1. Ubuntu18.04只可以选择Jetpack4.x
  2. Ubuntu20.04+可以选择Jetpack5.x
  3. Jetpack4.x -> Python 3.6
  4. Jetpack5.x -> Python 3.8

对python版本有要求的一定要注意Jetpack版本!!

Ubuntu的下载网址:https://ubuntu.com/download/alternative-downloads

按照标准的虚拟机安装环境步骤进行安装。

虚拟机使用主机VPN

由于SDK Manager需要翻墙下载,所以需要虚拟机需要使用主机网络

参考博客:如何在虚拟机Ubuntu下使用主机网络

首先查看本机的Clash查看VPN端口号是多少?

image-20231105182240822

img_v2_e066f759-e810-4163-897c-41f85707ef0g

Mac端和Windows端类似,去看代理端口是否为:7890

在Windows界面使用win+r -> cmd调出Terminal

Terminal中输入ipconfig获取IP地址:

img_v2_8b9845f9-7414-4278-b164-c551cbb2ae7g

记住VMware的IPv4地址,然后进入虚拟机界面,在设置中找到network界面。

img_v2_2ba0aee1-701d-4629-9515-551f08ee4c4g

点击Network Proxy 进入下面的界面,选择Manual,然后将Proxy后面的IP地址写为在Windows中查看的VMware地址,后面的端口号和Clash中的一致。

img_v2_6215e685-acd9-42ec-8ce2-8717610dbc1g

如此:虚拟机就可以使用主机的VPN了。

下载SDK Manager

SDK Manager的下载地址:https://developer.nvidia.com/sdk-manager

在虚拟机中下载,下载完成后运行:

1
sudo apt install ./sdkmanager_1.9.2-10899_amd64.deb

.deb前为下载的SDK Manager 安装包名称。

烧写系统

Jetson Xavier NX的准备

使用接线帽将NX的FC REC引脚和GND引脚短接,让NX进入Recovery模式,用数据线连接到电脑上,并插上电源,准备系统的烧录。

image-20231105184016942

由于我需要的是Python3.8+,所以我选择的是Ubuntu20.04系统以及Jetpack5.1.1系统。

SDK Manager 烧录

打开SDK Manager:在Ubuntu的终端中输入命令sdkmanager即可命令行打开。

STEP 01:

image-20231105225637881

在这里要选择JetPack 5.1.2的版本,我选择的是Jetpack 5.1.1(rev. 1)

Target Hardware插入USB会自动跳出选择选项,选择自己的板子版本后,点击CONTINUE

image-20231105232410116

STEP 02:

image-20231105225946667

由于EMMC只有16G,所以在第一次烧写的时候,只选择Jetson Linux,别的SDK Components都不要选择,选择之后会出现disk内存不够。

STEP 03:

image-20231105230310553

在这个界面中,输入虚拟机的密码,进入安装界面。

安装界面会在一开始跳转到初始化界面,这里确定linux的用户名和密码,Storage Device要选择默认的EMMC/SD

注意:设置密码一定不能单一空格,每次都在Linux登录的时候显示密码不对!

image-20231105232713834

之后就是等待,可能会到99.83%的时候停止,这里我的解决办法是换了一根数据线就完成了。网上说的感觉都没啥用……

如果在烧写到99.3%左右的时候,Jetson的风扇开始转,并且主机显示Device掉线、重新连接,那么多半是安装成功了。

STEP 04:

安装完成之后点击EXIT,不要拔掉USB线!!!!!!,可以拔掉接线帽,连接显示器,进入Linux界面。

当Linux界面初始化完成之后,即可拔掉USB线。

系统扩容和改启动盘

格式化硬盘

由于EMMC只有16G的容量,当下载完Linux之后大概只剩下5G左右,是无法进行CUDA等的配置的,所以需要将启动盘换成NVMe。

打开Linux系统,打开Terminal,在其中输入

1
df -l

image-20231106090522868

这里挂在/下面的盘是启动盘,我们现在的启动盘已经用43%了,需要对其进行更换成128G SSD。

在应用程序中搜索disk

image-20231106090702147

disk程序中,按照顺序进入128G Disk中进行硬盘格式化

image-20231106090831588

image-20231106090858246

在格式化硬盘之后,对硬盘进行分区,点击Volume左下方的加号进行分区:

image-20231106090956578

给Free Space Following 16G的空间:

image-20231106091027759

名称可以不写

image-20231106091107787

至此,硬盘格式化+分区成功!!!!

更改启动盘

如果虚拟机可以ping通github,则直接在Terminal中输入:

1
2
git clone https://github.com/jetsonhacks/rootOnNVMe.git
cd rootOnNVMe

如果虚拟机网无法ping通github,可以通过U盘将Windows电脑上的rootOnNVMe拷贝下来。

!!!但是注意,由于Windows的sh格式和Linux不一样,所以拷贝下来的文件无法直接运行,需要在Terminal运行以下命令!!!

1
2
3
cd rootOnNVMe
sed -i -e 's/\r$//' copy-rootfs-ssd.sh
sed -i -e 's/\r$//' setup-service.sh

该命令将把CR字符替换为空,这将使这些行以LF(\n)作为结尾!

注意!!!,在data文件夹中仍然有一个.sh文件!如果不更改,会导致setup-service.sh看似成功了,但是没有成功!

1
2
cd data
sed -i -e 's/\r$//' setssdroot.sh

在这些做完后,运行两个.sh文件进行启动盘更改:

  1. 将源文件复制到SSD固态硬盘,就完成了系统的迁移

    1
    ./copy-rootfs-ssd.sh
  2. 迁移好之后,还需要将SSD设置为第一启动盘,系统才能从SSD启动

    1
    ./setup-service.sh
  3. 重启系统生效

    1
    reboot

image-20231106092556322

重启完查看,挂载在\下的盘是哪个即可知道成功与否:

image-20231106093152203

安装CUDA等

安装CUDA需要从SDK Manager安装,和之前方式一样,用USB链接上Jetson之后,打开SDK Manager,STEP 01 和之前的一样,在STEP 02 上选择除去Jetson Linux的选项。

img_v2_94c96e97-5c40-4e8f-a615-d02dd8f05dbg

然后进行安装,安装时需要输入Jetson NX的用户名和密码进行验证。

img_v2_40f0c940-f1bb-4b20-9a10-5d25755ceebg

安装纯靠运气,建议听着《好运来》进行安装……

如果一直error,我的做法是重新安装Linux系统。

  • 可能需要Jetson Xavier处于开机并登录状态,这次是因为这个成功了——2024.3.9(ip error)

下载完之后进入Jetson Xavier NX界面,在Terminal中输入:

1
nvcc -V

查看CUDA 版本,能查看到则说明安装成功

image-20231107083646546

配置Pytorch

配置pip的下载路径

由于Jetson不容易翻墙,下载pip包需要换下载源,方法如下:

创建~/.pip.pip.conf

1
2
3
cd ~
mkdir .pip
vim .pip/pip.conf

pip.conf中添加如下语句:

1
2
3
4
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn

查看Jetpack版本

官方给的查看语句:

1
cat /etc/nv_tegra_release

Blog给的查看语句:

1
sudo apt-cache show nvidia-jetpack

img_v2_11fbf261-72d7-4545-af25-1ebcfd7f90cg

感觉第二个更好用!!!

安装pytorch

官方配置Pytorch教程:https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#overview__section_xavier_nx

Terminal中输入:安装Pytorch需要的包

1
2
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;

安装Pytorch的步骤:

  1. 为Pytorch设定路径

    1
    export TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
  2. 下载Pytorch

    1
    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

这里是自动下载最新的符合Jetpack v5.1.1的pytorch版本,如果我们需要别的pytorch版本,可以查看网址https://developer.download.nvidia.com/compute/redist/jp/

vxx指的是Jetpack的version版本,.whl指的是需要下载的pytorch轮子。

image-20231106134136723

↑不确定是不是根据这个确定的,还是根据↓确定的版本❓❓❓❓❓:

PyTorch for Jetson

这里我需要的是Pytorch1.x的版本,所以我选择的安装语句为:

1
2
export TORCH_INSTALL=https://developer.download.nvidia.com/compute/redist/jp/v51/pytorch/torch-1.14.0a0+44dac51c.nv23.01-cp38-cp38-linux_aarch64.whl
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

安装结束后,测验torch是否能用:

1
2
3
4
5
>>> import torch 
>>> torch.cuda.is_available()
>>> torch.cuda.device_count()
>>> torch.cuda.get_device_name(0)
>>> torch.__version__# 查看torch版本!

当输出为:

1
2
3
True
1
Xavier

则说明安装成功!!!😈😈😈😈😈😈😈😈😈😈😈

安装torchvision

首先确定torch的版本,在上文中得知:

image-20231107083946555

在网址PyTorch for Jetson中有torchvision的使用教程

Pytorch与torchvision的版本对应关系:

image-20231107084155410

安装不能使用pip3 install torchvision=x.x.x,而是要用编译的办法,在Terminal中写:

1
2
3
4
5
6
7
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch <version> https://github.com/pytorch/vision torchvision # see below for version of torchvision to download
cd torchvision
export BUILD_VERSION=0.x.0 # where 0.x.0 is the torchvision version
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

对于我们pytorch1.14.0的版本,最后的Terminal语句为:

1
2
3
4
5
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.14.1 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.14.1
python3 setup.py install --user

成功之后,退出该Terminal。

新建一个Terminal,查看torchvision版本

image-20231107092834335