Jetson AGX Orin开箱及配置

LogicCraftMaster
• 阅读 3111

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

Jetson AGX Orin开箱及配置

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(