本教程适配于采用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系统的版本注意:
- Ubuntu18.04只可以选择Jetpack4.x
- Ubuntu20.04+可以选择Jetpack5.x
- Jetpack4.x -> Python 3.6
- Jetpack5.x -> Python 3.8
对python版本有要求的一定要注意Jetpack版本!!
Ubuntu的下载网址:https://ubuntu.com/download/alternative-downloads
按照标准的虚拟机安装环境步骤进行安装。
虚拟机使用主机VPN
由于SDK Manager需要翻墙下载,所以需要虚拟机需要使用主机网络
参考博客:如何在虚拟机Ubuntu下使用主机网络
首先查看本机的Clash查看VPN端口号是多少?
Mac端和Windows端类似,去看代理端口是否为:7890
在Windows界面使用win+r -> cmd调出Terminal
在Terminal
中输入ipconfig
获取IP地址:
记住VMware的IPv4地址,然后进入虚拟机界面,在设置中找到network界面。
点击Network Proxy 进入下面的界面,选择Manual,然后将Proxy后面的IP地址写为在Windows中查看的VMware地址,后面的端口号和Clash中的一致。
如此:虚拟机就可以使用主机的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模式,用数据线连接到电脑上,并插上电源,准备系统的烧录。
由于我需要的是Python3.8+,所以我选择的是Ubuntu20.04系统以及Jetpack5.1.1系统。
SDK Manager 烧录
打开SDK Manager:在Ubuntu的终端中输入命令sdkmanager
即可命令行打开。
STEP 01:
在这里要选择JetPack 5.1.2
的版本,我选择的是Jetpack 5.1.1(rev. 1)
。
Target Hardware
插入USB会自动跳出选择选项,选择自己的板子版本后,点击CONTINUE
STEP 02:
由于EMMC只有16G,所以在第一次烧写的时候,只选择Jetson Linux
,别的SDK Components
都不要选择,选择之后会出现disk内存不够。
STEP 03:
在这个界面中,输入虚拟机的密码,进入安装界面。
安装界面会在一开始跳转到初始化界面,这里确定linux的用户名和密码,Storage Device要选择默认的EMMC/SD
注意:设置密码一定不能单一空格,每次都在Linux登录的时候显示密码不对!
之后就是等待,可能会到99.83%的时候停止,这里我的解决办法是换了一根数据线就完成了。网上说的感觉都没啥用……
如果在烧写到99.3%左右的时候,Jetson的风扇开始转,并且主机显示Device掉线、重新连接,那么多半是安装成功了。
STEP 04:
安装完成之后点击EXIT,不要拔掉USB线!!!!!!,可以拔掉接线帽,连接显示器,进入Linux界面。
当Linux界面初始化完成之后,即可拔掉USB线。
系统扩容和改启动盘
格式化硬盘
由于EMMC只有16G的容量,当下载完Linux之后大概只剩下5G左右,是无法进行CUDA等的配置的,所以需要将启动盘换成NVMe。
打开Linux系统,打开Terminal
,在其中输入
1 | df -l |
这里挂在/
下面的盘是启动盘,我们现在的启动盘已经用43%了,需要对其进行更换成128G SSD。
在应用程序中搜索disk
:
在disk
程序中,按照顺序进入128G Disk中进行硬盘格式化
在格式化硬盘之后,对硬盘进行分区,点击Volume左下方的加号进行分区:
给Free Space Following 16G的空间:
名称可以不写
至此,硬盘格式化+分区成功!!!!
更改启动盘
如果虚拟机可以ping通github,则直接在Terminal
中输入:
1 | git clone https://github.com/jetsonhacks/rootOnNVMe.git |
如果虚拟机网无法ping通github,可以通过U盘将Windows电脑上的rootOnNVMe
拷贝下来。
!!!但是注意,由于Windows的sh格式和Linux不一样,所以拷贝下来的文件无法直接运行,需要在Terminal
运行以下命令!!!
1 | cd rootOnNVMe |
该命令将把CR
字符替换为空,这将使这些行以LF
(\n
)作为结尾!
注意!!!,在data
文件夹中仍然有一个.sh
文件!如果不更改,会导致setup-service.sh
看似成功了,但是没有成功!
1 | cd data |
在这些做完后,运行两个.sh
文件进行启动盘更改:
将源文件复制到SSD固态硬盘,就完成了系统的迁移
1
./copy-rootfs-ssd.sh
迁移好之后,还需要将SSD设置为第一启动盘,系统才能从SSD启动
1
./setup-service.sh
重启系统生效
1
reboot
重启完查看,挂载在\
下的盘是哪个即可知道成功与否:
安装CUDA等
安装CUDA需要从SDK Manager安装,和之前方式一样,用USB链接上Jetson之后,打开SDK Manager,STEP 01 和之前的一样,在STEP 02 上选择除去Jetson Linux的选项。
然后进行安装,安装时需要输入Jetson NX的用户名和密码进行验证。
安装纯靠运气,建议听着《好运来》进行安装……
如果一直error,我的做法是重新安装Linux系统。
- 可能需要Jetson Xavier处于开机并登录状态,这次是因为这个成功了——2024.3.9(ip error)
下载完之后进入Jetson Xavier NX界面,在Terminal
中输入:
1 | nvcc -V |
查看CUDA 版本,能查看到则说明安装成功
配置Pytorch
配置pip的下载路径
由于Jetson不容易翻墙,下载pip包需要换下载源,方法如下:
创建~/.pip.pip.conf
1 | cd ~ |
在pip.conf
中添加如下语句:
1 | [global] |
查看Jetpack版本
官方给的查看语句:
1 | cat /etc/nv_tegra_release |
Blog给的查看语句:
1 | sudo apt-cache show nvidia-jetpack |
感觉第二个更好用!!!
安装pytorch
官方配置Pytorch教程:https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html#overview__section_xavier_nx
在Terminal
中输入:安装Pytorch需要的包
1 | sudo apt-get -y update; |
安装Pytorch的步骤:
为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
下载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轮子。
↑不确定是不是根据这个确定的,还是根据↓确定的版本❓❓❓❓❓:
这里我需要的是Pytorch1.x的版本,所以我选择的安装语句为:
1 | 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 |
安装结束后,测验torch是否能用:
1 | import torch |
当输出为:
1 | True |
则说明安装成功!!!😈😈😈😈😈😈😈😈😈😈😈
安装torchvision
首先确定torch的版本,在上文中得知:
在网址PyTorch for Jetson中有torchvision的使用教程
Pytorch与torchvision的版本对应关系:
安装不能使用pip3 install torchvision=x.x.x
,而是要用编译的办法,在Terminal
中写:
1 | sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev |
对于我们pytorch1.14.0的版本,最后的Terminal
语句为:
1 | sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev |
成功之后,退出该Terminal。
新建一个Terminal,查看torchvision版本