乐趣区

关于自动驾驶:Jetson-AGX-Orin开箱及配置

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 合并到一起

退出移动版