jetson nano开发使用的基础详细分享
前言:
最近拿到一块jetson nano 2GB版本的板子,折腾了一下,从烧录镜像、修改配件等,准备一篇开箱基础文章给大家介绍一下这块AI开发板。
作者:良知犹存
转载授权以及围观:欢迎关注微信公众号:羽林君
或者添加作者个人微信:become_me
Jetson nano初步介绍:
Jetson Nano是Nvidia在TX2和Xavier获得成功后推出的低配版GPU运算平台。在官方的资料上,Jetson Nano公布的参数如下:
技术规格:
包含了一块128核Maxwell架构的GPU,虽然已经是几代前的架构,不过因为用于嵌入式设备,从功耗、体积、价格上也算一个平衡。Nano的计算能力不高,勉强可以使用一些小规模、并且优化过的网络进行推理,训练的话还是不够用的。
内存减半这种情况确实让人有些顾虑,官方的主要应对措施是换用更轻量的桌面环境LXDE。这个已经在10月21日刚发布的JetPack 4.4.1镜像中提供。
那么这块板子能帮我们实现是什么呢?
这是我从其他人文章摘录过来的一些分析,供大家参考
Jetson Nano 2GB Developer Kit虽然与4GB的nano相比,将内存容量砍半,但价格却锐减40%,对于用这款开发组件作为入门学习教材的用户来说,是个相当划算的取舍,笔者也将在这篇文章中分析2种版本的硬件规格差异,以及实际性能比较。
Jetson Nano 2GB Developer Kit开宗明义的目标就是推广教育市场,所以在推出破盘“学生价”的同时,也不会将规格阉割太多,以免影响到功能与应用。
Jetson Nano 2GB Developer Kit(文中以2GB版简称)与原版Jetson Nano Developer Kit(文中以原版简称)最大的差别,当然就是名称所暗示的2GB版仅搭载2GB内存,而原版则是搭载4GB,两者除了容量有所差异外,在信道宽度与时脉、带宽方面则皆相同,此外两者的处理器、绘图处理器也都相同,因此可以预期执行小型程序的性能并不会有太大落差,但2GB版可能会因内存容量不足,在执行大型程序的时候需要通过Swap(Linux的换置空间,可以理解为虚拟内存)来存储程序资料,进而影响性能。
另一个可能会影响使用的规格,则是摄影机的连接端子。最初期的原版只有1组MIPI CSI-2端子,后期增加为2组,而2GB版则改回1组,因此只能同时连接1组MIPI CSI-2接口摄影机。
除此之外2GB版也取消了M.2 Key E无线网络模块插槽、DisplayPort图片输出端子,并将4组USB 3.2 Gen1改为1组USB 3.2 Gen1加2组USB 2.0,这个改变对创客来说可能影响不大,但对想将Jetson Nano Developer Kit当成迷你计算机、多媒体娱乐机的用户来说影响就会比较大。
最后2GB版将电源输入由5V DC插座改为USB Type-C端子,这个对于许多用户来说或许更为方便,可以视为正面的功能改进。
至于和Raspberry Pi 4或是Coral Dev Board等定位相近的产品相比,2GB版不但维持性能领先的优势,更在降价后增加了价格竞争力。另一方面,2GB版依然与原版相同能够支持CUDA绘图处理器加速运算,以及TensorFLow、PyTorch、Caffe、MxNet等业界常见,甚至应用于大型运算中心的软件框架,对于学习程序开发来说相当吃香。虽然2GB版的价格比Raspberry Pi 4贵,但是性能、功能、支持的软件框架都更强大。
根据NVIDIA官方提供的性能对照表,2GB版在不同AI软件的性能表现能达到Raspberry Pi 4的数十倍之谱。(图中将Raspberry Pi 4的性能表现标准化为1)
在操作系统部分,笔者使用NVIDIA提供的最新版本Jetson Nano镜像文件,安装完成后会发现它的桌面环境改为LXDE18.04,与先前的Ubuntu接口有些许不同,但是整体操作仍相当接近。
值得注意的是,在第一次开机的初始设置过程中,系统会建议用户激活Swap功能,若选择默认选项,系统则会自动创建容量约为4.95GB的换置空间,以在主内存容量不足的时候存储资料,发挥虚拟内存的功效。不过由于Swap的实际路径为microSD内存卡,所以带宽与访问性能将受到很大的限制,而且反复访问也可能会加速耗损内存卡寿命。
Jetson Nano可以运行各种各样的高级网络,包括流行的ML框架的完整原生版本,如TensorFlow,PyTorch,Caffe / Caffe2,Keras,MXNet等。通过实现图像识别,对象检测和定位,姿势估计,语义分割,视频增强和智能分析等强大功能,这些网络可用于构建自动机器和复杂AI系统。
多流视频分析,Jetson Nano可实时处理多达8个高清全动态视频流,并可部署为网络视频录像机(NVR),智能相机和物联网网关的低功耗边缘智能视频分析平台。NVIDIA的DeepStream SDK 使用ZeroCopy和TensorRT优化端到端推理管道,以在边缘和本地服务器上实现最佳性能。下面的视频显示了Jetson Nano在8个1080p30流上同时执行物体检测,基于ResNet的模型以全分辨率运行,吞吐量为每秒500万像素(MP / s)。
下图显示了在线提供的流行模型的推理基准测试结果。有关在 Jetson Nano上运行这些基准测试的说明,请参见 此处。推理使用批量1和FP16精度,采用 JetPack 4.2附带的NVIDIA TensorRT加速器库。Jetson Nano在许多场景中都具有实时性能,能够处理多个高清视频流。
2GB版与4G原版的性能表现相差无几,并没有因为是阉割版而有明显落差,表现可以说让人相当满意。其中原因不外乎是双方的处理器、绘图处理器规格完全相同,且也都可以使用10W的电力模式,让彼此在运算性能部分可以有一样的表现。
从双方的规格差异来看,会造成整体性能落差的主要因素,仍在程序的内存消耗量,而Jetson Benchmarks工具可能没有触碰到该瓶颈。若程序使用超过2GB的内存,系统就需要将部分资料存储于Swap,将形成访问性能瓶颈,并影响整体性能表现。
由于2GB版的目标用户群体为AI程序与AIoT设备的入门者,撰写大型程序的机会不大,因此考量价格与性能的平衡,这样确实是不错的取舍,很适合教育单位或初学者选用。
介绍完使用场景以及一些性能分享,接下来给大家介绍一下硬件信息
大家可以在官网里面搜索对应的开发板,查看对应的接口信息,点击下面的网站 https://developer.nvidia.cn/embedded/learn/getting-started-jetson#support
我使用的是2GB的版本,所以我里面选择了 Jetson Nano 2GB Developer Kit
打开其中的User Guide选项
选中之后我们就可以看到板子详细的硬件信息。或者大家可以直接用这个传送门查看信息。
详细的硬件信息介绍,
配合上图给大家介绍一下这块板子,硬件一一对应的位置:
标号 | 详细作用 |
---|---|
[DS1] | 电源LED;当显影剂套件通电时亮起 |
[J1] | Jetson模块的SO-DIMM接头。模块预先组装在开发工具包上 |
[J2] | 用于5V⎓3A电源的USB C型电源连接器。见电源部分 |
[J3] | RJ45以太网连接器。参见网络部分 |
[J4] | HDMI接口 |
[J5] | 用于MIPI-CSI2摄像机的摄像机连接器。请参见“摄影机”部分 |
[J6] | 40针头:包括电源引脚(+5V/+3.3V)和I2C(2x)、UART、SPI(2x)、I2S和GPIO的接口信号引脚 |
[J7] | 4针风扇控制头。支持脉宽调制(PWM)输出和转速表输入 |
[J8] | 可选币形电池插座 |
[J9] | USB 3.0 A型连接器。限于1A总功率输出 |
[J10] | 两个USB 2.0 A类连接器堆叠,仅支持主机模式 |
[J11] | 可选按钮头(2x4);包括复位/强制恢复/电源按钮和自动上电禁用的连接 |
[J12] | 按钮头(1x12);包括电源LED、复位/强制恢复/电源按钮、UART和自动上电禁用的连接 |
[J13] | 支持恢复模式和设备模式的Micro USB 2.0连接器 |
40 针接头 (J6)
40 引脚接头提供对电源、接地和接口信号引脚的访问。
电源引脚
有两个 3.3V 电源引脚和两个 5V 电源引脚。这些是不可切换的;当开发人员套件连接到电源时,电源始终可用。
两个 5V 引脚可用于以每个 2.5A 的电流为开发人员套件供电。(不要同时通过这些引脚和 USB-C 连接器为开发人员套件供电。) 接口信号引脚 所有信号使用 3.3V 电平 默认情况下,所有接口信号引脚都配置为 GPIO,支持 I2C 和 UART 的除外
12 针按钮接头 (J12)
该头提供 GPIO 来控制板的状态。我们额外加的套件的外壳可以连接到此接头。
Pin | 名称 | 描述 | Power |
---|---|---|---|
1 | 电源指示灯 - | 连接到 LED 阴极以指示系统睡眠/唤醒(系统处于睡眠模式时关闭) | +5V |
2 | 电源指示灯 + | 连接到 LED 阳极(见引脚 1) | +5V |
3 | UART2_RXD 收到 | + 3.3V | |
4 | UART2_TXD 发送 | + 3.3V | |
5 | 锁存器 | 连接引脚 5 和引脚 6 以禁用自动开机并需要按下电源按钮(或等效按钮) | +5V |
6 | 闩锁设置按钮 | 连接引脚 5 和引脚 6 以禁用自动开机并需要按下电源按钮(或等效按钮) | +5V |
7 | GND | ||
8 | 复位按钮 将常开按钮连接到引脚 7 和引脚 8。临时按下按钮启动系统复位 | +1.8V | |
9 | GND | ||
10 | 恢复模式按钮 | 将常开按钮连接到引脚 9 和引脚 10。在打开系统电源时按住按钮以将其置于 USB 强制恢复模式 | +1.8V |
11 | GND | ||
12 | 电源按钮 | 将常开按钮连接到针脚 11 和针脚 12。如果自动开机禁用(针脚 5 和针脚 6 已连接),请暂时按下按钮以启动开机 | +5V |
8 针按钮接头 (J11)
这是一个备用的 8 针 (2x4) 按钮接头,可焊接在载板上的位置 J11 上,并用作主按钮接头的替代。
标题详细信息:
总引脚/位置 8 2 排 4 针 间距为 2.54 毫米 无遮挡 通孔垂直
Pin | 名称 | 描述 | Power |
---|---|---|---|
1 | 电源按钮 | 将常开按钮连接到针脚 1 和针脚 2。如果自动开机禁用(针脚 7 和针脚 8 已连接),请暂时按下按钮以启动开机 | +5V |
2 | GND | ||
3 | 强制恢复按钮 | 将常开按钮连接到第 3 针和第 4 针。在打开系统电源时按住按钮使其进入 USB 强制恢复模式 | +1.8V |
4 | GND | ||
5 | 复位按钮 | 将常开按钮连接到引脚 5 和引脚 6。暂时按下按钮启动系统复位 | +1.8V |
6 | GND | ||
7 | 闩锁设置按钮 | 连接引脚 7 和引脚 8 以禁用自动开机并需要按下电源按钮(或等效按钮) | +5V |
8 | 锁存器 | 连接引脚 7 和引脚 8 以禁用自动开机并需要按下电源按钮(或等效按钮) | +5V |
4 针风扇接头 (J7)
J7 位置的 4 针风扇控制接头的引脚排列如下所示。
接头可支持 3 针风扇连接(GND、PWR 和 TACH)或 4 针风扇连接(GND、PWR、TACH 和 PWM)。使用具有 PWM 功能的风扇允许软件根据需要调整风扇的速度。仅支持 5V 风扇。
Pin | 描述 |
---|---|
1 | PWM |
2 | +5V 电源 |
3 | 转速表 |
4 | PWM(脉宽调制) |
控制风扇
风扇可通过PWM控制。 如果要向系统中添加风扇,请选择一个5V风扇: 具有40mm x 40mm的螺钉间距,用于与显影剂套件散热器连接
耗电量 开发工具包的总功耗是载体板、模块和外围设备功耗的总和,由您的特定用例决定。
Jetson模块有两种软件定义的电源模式。电源模式可以通过桌面右上角的UI界面进行切换,也可以按照L4T电源管理指南进行切换。
两种模块电源模式为:
10W-更高性能的默认模式 5W-建议减少能源使用
摄像头
照相机 有关Jetson生态系统支持的摄像头的完整列表,请访问我们的合作伙伴支持的摄像头页面。
所有与Jetson Nano显影剂套件和Jetson Xavier NX显影剂套件兼容的MIPI CSI-2相机也将与Jetson Nano 2GB显影剂套件配合使用。
Name | Manufacturer | Link | Comment |
---|---|---|---|
Raspberry Pi Camera Module V2 | Raspberry Pi | Adafruit | |
Raspberry Pi Camera Module NoIR V2 | Raspberry Pi | Adafruit | |
Raspberry Pi High Quality Camera | Raspberry Pi | Canakit | 仅限Jetson Nano 2GB开发者工具包下载从下载中心下载驱动程序并按照软件包中的说明进行操作 |
安装软排线摄像头模块
要安装摄像头模块,请将其柔性带状电缆连接到摄像头连接器(J5)中。遵循以下步骤:
1.轻轻地提起连接器闩锁(参见第一个图)。 2.插入摄像头带状电缆。(参见第2和第3图)金属触点应朝向显影剂套件的中心。 3.轻轻按下连接器闩锁,直到停止。这可能需要两个手指,每个手指位于闩锁的一端。不要用力过猛。
至于USB摄像头,大家可以直接插入USB端口即可。
烧录镜像使用初体验
需要准备:
电源 type-c端口的5V-4A的电源 MicroSD卡(建议最低16GB UHS-1) HDMI显示屏 USB键盘 USB鼠标
首先我拿到的nano2g版本是只有板子的,如果要板卡运行起来,我还需要准备一张64G的闪迪(建议用闪迪,因为有些内存卡不支持nano),用来烧录nano的镜像,此外还需要一根给板卡供电的type-c端口的电源适配器,大家也可以用现在支持3a或者4a的手机充电器配一个type-c端口的线。
这里要注意自己板子的版本
下载Jetson 下载中心 | NVIDIA Developer并解压得到镜像文件sd-blob.img 镜像下载
下载SD卡镜像,:https://developer.nvidia.com/embedded/dlc/jetson-nano-dev-kit-sd-card-image
下载JetPack(看官网,需要JetsonPack 4.4.1才支持Jetson Nano 2GB ):https://developer.nvidia.com/embedded/jetpack
使用官方的Etcher的SD卡烧录,或者也可以用Win32 Diskimg写入镜像
最好在烧系统前格式化SD卡一下,即 SD Card formatter(官网推荐)
连接外设(鼠标、键盘、显示器)并启动,这里如果我们要进行屏幕显示的启动,除了连接的HDMI显示器,鼠标和键盘也是必须要连接的,在Jetson Nano 2GB Developer Kit里面有描述。
通过这张图,大家可以清晰看到要是启动display,则Monitor, keyboard and mouse是必须的。
烧写完成后,将SD卡插入Jetson Nano,接上显示器和电源开机
最终启动效果如图:
配件使用
硬件风扇 和 wif模块 因为nano使用起来发热挺严重的,所以我在上面加了一个散热的风扇,nano 2g里面默认风扇的配件是没有,所以这个部分也是我自己购买的,不过我没有使用pwm控制的风扇,而是使用了直驱的风扇,并且在nano 2gb 板子上焊接了排插,接入风扇。
排插位置,以及对应的丝印的电源和GND位置:
实际安装情况:
安装之后检测一下CPU温度情况:这部分我们使用了jetson-stats这个包,此外我们也可以使用lm-sensors进行查询CPU实时温度。jetson-stats是一个软件包,用于监测和控制Nvidia Jetson设备的,其中jtop可以实时监测温度;
安装:
sudo apt-get install python-pip
sudo -H pip install jetson-stats
使用:jtop 命令
这个时候在右下角,我们可以看到CPU温度在23.5摄氏度,这个是一个正常温度,而在没有风扇散热情况下,板卡待机的CPU温度能达到33摄氏度。所以还是很有效的散热。
此外因为板卡有时候需要进行下载东西以及进行远程调试,所以我们最好加一个wifi模块,方便我们的工作。
远程VNC 因为nano上面我们想跑一些视觉等等需要界面查看的模型,而不只是单纯的使用命令行进行访问,那么我们就需要用到远程桌面了。
说到远程桌面,可能大家会比较熟悉VNC Viewer这个软件。这里我们介绍如何配合Jetson Nano的 Desktop功能来远程访问。首先,下载并安装VNC Viewer软件到你的电脑上。(这里是下载链接) 需要先用HDMI屏幕和键盘等链接到Jetson Nano
安装vino
sudo apt install vino
设Enable VNC 服务 (此时手动可打开vnc server)
sudo ln -s ../vino-server.service /usr/lib/systemd/user/graphical-session.target.wants
配置VNC server:
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
编辑org.gnome,恢复丢失的“enabled”参数,输入一下命令进入文件,将下方key内容添加到文件的最后面。保存并退出。
sudo vi /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
设置为Gnome编译模式
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
现在屏幕共享面板在单位控制中心工作…但这并不足以让vino运行!所以您需要在会话启动时添加程序:Vino-server,使用以下命令行:
/usr/lib/vino/vino-server 这种是属于手动启动,如果每次都需要手动启动会比较麻烦下面会设置开机自启动的形式。
设置VNC登陆密码('thepassword' 修改为自己的密码)
gsettings set org.gnome.Vino authentication-methods "['vnc']"
gsettings set org.gnome.Vino vnc-password $(echo -n 'thepassword'|base64)
重启机器,验证是否设置vnc 成功
sudo reboot
设置开机自启动VNC Server
VNC服务器只有在您本地登录到Jetson之后才可用。如果您希望VNC自动可用,请使用系统设置应用程序来启用自动登录。
gsettings set org.gnome.Vino enabled true
mkdir -p ~/.config/autostart
vi ~/.config/autostart/vino-server.desktop
将下面的内容添加到该文件中,保存并退出。
[Desktop Entry]
Type=Application
Name=Vino VNC server
Exec=/usr/lib/vino/vino-server
NoDisplay=true
如果系统设置为需要输入用户密码才可以进入桌面,以上的改脚本需要等进入桌面后才会启动,建议将系统设置为用户自动登录到桌面。
连接VNC Server 使用vnc viewer软件进行VNC连接,首先需要查询ip地址,我这里查到的是172.16.60.147,输入IP地址后点击OK,双击对应的VNC用户输入密码,最后进入到VNC界面
下载安装vnc deb包,链接
启动vnc界面,输入对应IP 进行连接:
结果如图:
nano使用介绍以及资料分享:
镜像完成安装了,使用的基本配套工具也准备好了,那么我们该怎么进行nano的使用呢?下面就给大家分享一些nano使用中,我们可以参考的学习资料,方便大家进行学习使用。
官方资料
首先进入官网最开始的nano介绍网页,里面就有对应的学习引导:
里面有AI的部分,有配合的机器小车的教程。
官方 Jetson Nano Developer Kit User Guide
https://developer.nvidia.cn/embedded/learn/get-started-jetson-nano-2gb-devkit#next
技术论坛:https://developer.nvidia.com/embedded-computing
对应的英文技术论坛:https://forums.developer.nvidia.com/
还有jetson nano本身对应的社区,比如jetson projects以及专门tutorials
jetsontutorials
https://developer.nvidia.cn/embedded/learn/tutorials
jetson项目
大家可以在里面去搜寻符合自己需求的功能,看该项目的的源码或者博文,这是一个很快速的搭建自己工程的方法。
https://developer.nvidia.cn/embedded/community/jetson-projects
详细嵌入式开发指导说明:
这个部分就是比较详细的底层开发的指导了,包含基本的驱动的音视频开发,这个部分属于大家要深度定制化自己的板卡时候对应的资料:
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-325/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/introduction.html#wwpID0E3HA
JetBot
NVIDIA JetBot是一个新的开源自动机器人套件,它提供了所有软件和硬件计划,以低于250美元的价格构建一个人工智能的深度学习机器人。硬件材料包括Jetson Nano,IMX219 800万像素摄像头,3D打印机箱,电池组,电机,I2C电机驱动器和配件。https://jetbot.org/master/index.html
国内的一些资料
创客智造:jetson https://www.ncnynl.com/search/jetson/
微雪:jeston nano官方网页里面显示,微雪是nano的国内合作伙伴。https://www.waveshare.net/wiki/Jetson_Nano_Developer_Kit
英伟达嵌入式系统技术介绍资料:
https://aijishu.com/u/liumingkang
或者微信公众号 NVIDIA英伟达企业解决方案
去里面搜索Jetson nano 2GB 就可以看到相关的文章
结语
相比Jetson Nano 4GB 使用的GNOME桌面,Jetson Nano 2GB 使用的是轻量化的LXDE桌面,大幅节省内存。这也是Jetson Nano 2G版可以和4G版本运行大多数相同的项目的原因之一。
NVIDIA Jetson Nano 2GB对于想要运行计算量不大的项目,且预算不多的开发者来说绝对是性价比之选,可以仅以54美元就享受到其4GB版的绝大多数功能,但是不能否认的是其2GB的内存,在需要使用Jetson Nano训练模型的时候会略感缓慢。总而言之,Jetson Nano绝对是性价比之选。配合Jetson社区丰富的项目和课程,可以高效地进行AI学习。可以说是新手入门AI计算的绝佳之选。接下来我们就开始玩起来哈。
这就是我jetson nano使用的初步分享,后面继续分享在一些自己使用这块AI计算板卡的经验。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。
作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
推荐阅读
【3】CPU中的程序是怎么运行起来的 必读
本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。