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 updatesudo apt dist-upgradesudo rebootsudo 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 torchName: torchVersion: 2.0.0a0+8aa34602.nv23.3Summary: Tensors and Dynamic neural networks in Python with strong GPU accelerationHome-page: https://pytorch.org/Author: PyTorch TeamAuthor-email: packages@pytorch.orgLicense: BSD-3Location: /usr/lib/python3.8/dist-packagesRequires: networkx, filelock, typing-extensions, sympyRequired-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 imagesREPOSITORY                   TAG                  IMAGE ID       CREATED        SIZEnvcr.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 torchName: torchVersion: 2.0.0a0+ec3941ad.nv23.2Summary: Tensors and Dynamic neural networks in Python with strong GPU accelerationHome-page: https://pytorch.org/Author: PyTorch TeamAuthor-email: packages@pytorch.orgLicense: BSD-3Location: /usr/local/lib/python3.8/dist-packagesRequires: typing-extensions, sympy, networkxRequired-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合并到一起