1
头图

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视频线

基础环境配置

官方Getting Started链接

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与L4T的适配关系

继续,更新当前模组的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合并到一起


小粥粥
2 声望4 粉丝

终生学习者