Jetson系列是Nvidia自2014年针对低中端嵌入式产品业务线。2022年6月,在GTC上公布Jetson AGX Orin,不仅是堆料的升级,更是进一步设计经验的升级。Jetson AGX Orin 不仅囊括Nvidia最新模型加速技术DLA 2.0和CutLbass,更是以容器理念对Jetson开发平台的统一。通过docker 和 NGC container库,Jetson AGX Orin实现对任意Jetson开发环境的即时模拟。
Jetson Orin Nano 是2022年底公布,2023年上市的最新Jetson开发板,搭载Jetson Orin芯片,更加面向个人开发者。Jetson Orin Nano 和 Jetson AGX Orin 一样使用eMMC内存。Jetson Orin Nano开发者套件主要分为官方版和CLB版本。从使用者角度来说二者差别不大,国产CLB版本是国产底板+Jetson Orin芯片,CLB版本带来的是可以购买HDMI版本和订制接口。官方版本则默认使用DP1.4接口。DP转HDMI线也会是潜在的坑,请使用带有DP口的显示器或者购买主动式DP转HDMI视频线。
基础环境配置
Jetson AGX Orin technical-brief
开机配置
Jetson AGX Orin 和Jetson Orin Nano CLB版系统预装在eMMC中,硬性要求通过显示器做Ubuntu开机配置,所以请使用DP线链接显示器,键鼠链接开发板,进行Ubuntuk开机配置。Ubuntu开机配置跟一般Ubuntu开机配置差不多,设置键盘,时区,语言即可。
Jetson AGX Orin 默认配装无线网卡,所以可以直接链接Wifi,对于Jetson Orin Nano,需要使用网线连接网络。后续操作也基本会以Jetson AGX Orin为主。
安装JetPack组件
一个Jetson嵌入式开发板由以下几部分构成:
- Jetson Orin 芯片 + 底板 [开发板的硬件部分]
- Linux for Tegra Kernel [简称为L4T]
- Ubuntu System [Jetson agx Orin 为 Ubuntu 20.04]
- JetPack [包括CUDA,CuDNN, TensorRT等Nvidia开发工具SDK]
- Application SDK [包括Nvidia DeepStream 等]
首先要确认当前L4T版本
cat /etc/nv_tegra_release
如果需要更新L4T
sudo bash -c 'echo "deb https://repo.download.nvidia.com/jetson/common r34.1 main" >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list'
sudo bash -c 'echo "deb https://repo.download.nvidia.com/jetson/t234 r34.1 main" >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list'
L4T 与 JetPack并不是强相关性。但是JetPack不同版本会导致后续docker版本不同,docker版本会影响到使用的Pytorch版本不同,进而导致比如Python的使用配置
比如,后续环境中使用Pytorch 2.0.0,容器包装版本针对L4T r35.2.1 所以JetPack使用5.1
继续,更新当前模组的JetPack
sudo apt update
sudo apt dist-upgrade
sudo reboot
sudo apt install nvidia-jetpack
安装Jtop 用以显示当前Jetson资源利用情况
sudo pip3 install -U jetson-stats
运行Jtop
sudo jtop
Jtop可以轻松查看当前Jetson的GPU,CPU,内存等情况,算是直观反映当前Jetson使用情况的利器。对于单个CUDA程序,需要通过Nsight Compute来分析性能指标,后续文档中会讲述,现在先挖个坑
新增硬盘和使用docker
参考上述Jetson AGX Orin 文档,Jetson AGX Orin 底部保留一个PCIe4.0的接口,考虑到Jetson AGX Orin上docker使用频繁,我们可以为其扩展一个PCIe4.0的SSD
安装SSD
断电情况下 使用合适的螺丝刀拆下硬盘卡扣螺丝,插上SSD,稍微用力插稳定,然后装上硬盘卡扣螺丝即可。
配置SSD
配置SSD可以参考这里,如果是新硬盘可以跳过删除分区的过程。
关于Nvidia-docker
JetPack Nvidia 组件自带Nvidia docker可以使用以下命令查询
jou@jou-desktop:~$ sudo docker info | grep Dir
[sudo] password for jou:
Docker Root Dir: /etc/var/docker
在其中可以看到默认docker存储位置为/etc/var/docker
我们可以通过修改docker配置文件,把默认镜像下载位置改到SSD上,从而节约Jetson AGX Orin 的eMMC空间。
# 打开docker默认配置
vi /etc/docker/daemon.json
{
"data-root":"/home1/data/docker", # 新增该行 改成/home1下位置即可
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
再次查询Docker镜像位置可以发现位置已经移动:
jou@jou-desktop:~$ sudo docker info | grep Dir
[sudo] password for jou:
Docker Root Dir: /etc/var/docker
Docker的使用
Jetson-Containers是Nvidia公司针对Jetson各种L4T kernel版本,JetPack版本带来的终极解决方案。利用docker技术,提供一系列镜像的封装,以便对所有Jetson L4T,JetPack版本,ROS版本,ROS2版本,torch版本的统一提供。再也不需要徒劳去挨个测试库之间是否适配,再也不需要挨个去修改pakage 管理器来测试性能。让我们欢呼:感谢Docker!
NGC 容器平台提供大量配置的镜像,只需要拉取镜像即可完成不同平台的开发工作。
从源代码安装Pytorch,可以参考此处,
从Docker安装Pytorch,可以参考下文拉取NGC镜像中的Pytorch:
首先确认本机的pytorch位置,pytorch版本为nv23.3
jou@jou-desktop:~$ pip show torch
Name: torch
Version: 2.0.0a0+8aa34602.nv23.3
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: /usr/lib/python3.8/dist-packages
Requires: networkx, filelock, typing-extensions, sympy
Required-by:
拉取pytroch镜像:
sudo docker pull nvcr.io/nvidia/l4t-pytorch:r35.2.1-pth2.0-py3
总大小在11.7GB左右,可能会有点慢.
jou@jou-desktop:/home1/Nvidia-IOT$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvcr.io/nvidia/l4t-pytorch r35.2.1-pth2.0-py3 853b58c1dce6 3 months ago 11.7GB
进入镜像
sudo docker run -it --rm --runtime nvidia --network host nvcr.io/nvidia/l4t-pytorch:r35.2.1-pth2.0-py3
确认Pytorch版本已经被更改为nv23.2
root@jou-desktop:/jetson-inference# pip show torch
Name: torch
Version: 2.0.0a0+ec3941ad.nv23.2
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: /usr/local/lib/python3.8/dist-packages
Requires: typing-extensions, sympy, networkx
Required-by: torchvision, torchaudio
此时,pip和torch的修改都会在images的内部,不会影响到外面环境的改变,基本上隔绝物理机带来版本不匹配的影响。
进一步学习可以参考jetson-containers
末尾小Bug
Jetson 默认pip install 后 install 的包找不到
pip install的时候,相当于将远端的包拷贝到本地的dist-packages 文件夹下,在Jetson下,存在两个位置:
- Python Interpreter 的default dist-packages 下
- 用户的dist-package 下
可以通过以下指令:
pip show torch # 显示包安装位置
pip install torch --target=/usr/local/lib/python3.8/dist-packages # 指定安装到公共用户的pip中
pip install torch --target=/home/jou/.local/lib/python3.8/site-packages # 单个用户用户目录中
进一步的研究可以看Python-runtime-site,总之,我的建议是使用通过docker images屏蔽掉这方面的问题,可以进一步讨论。
Python runtime在运行前会把用户的pip packages 和 root 的pip packages合并到一起
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。