笔者从 2019 年开始使用 NVIDIA Jetson Nano 开发套件,一开始是被 NVIDIA 当时推出的 Jetbot 智能小车所吸引,这套 2,000 元以内能实现智能避撞功能的小车,总共使用 10 个左右的部件(如下图),大约花了 6 小时左右时间,几乎无需焊接即可完成小车的组装,然后就可开始执行教程里的几个基本功能,十分省心。
虽然后续并没有持续在智能小车上开发更多应用,但是 Jetbot 所使用的 Jetson Nano 开发套件,却成为笔者学习人工智能与边缘计算的最重要工具,因为它解决了不少对笔者造成困扰的问题,主要如下:
(一)满足双系统操作
由于近年来人工智能技术都是基于人工神经网络的基础,而 CUDA GPU 经过 10 年以上的验证,是目前最适合执行大型神经网络的计算架构,因此笔者最初学习人工智能应用时,就是在一台 x86 系统上安装 CUDA 架构的 GPU 计算卡,最入门的设备也只需要 5,000 人民币的购置成本,以及 500W 以上的使用功耗。
最麻烦的问题,就是大部分关于人工智能的资源是基于 Linux 操作系统发展的,如果要复现前人的精华成果,就得在大致相同的环境下进行操作。但是 Linux 操作系统上缺少很多日常办公用途的软件,例如微信、QQ、Photoshop 等依赖度高的应用,因此搭建“双系统”环境就成为第一个挑战。
这里的“双系统”并非指在一台机器上安装两个可启动的操作系统,然后在开机时选择要启动 Windows 或 Ubuntu 系统,因为这种方式一次也只能启动一个,并不能解决前面所提到的问题。
以下提供两种解决方案:
使用虚拟机技术
VMware 或 Virtual Box 等虚拟机可能是比较好的选择,但目前这些技术并不支持直连 GPU 的功能,如果在 Windows 操作系统搭建 Ubuntu 虚拟机,是无法提供对 CUDA 开发环境的支持,也就无法执行 GPU 的智能计算功能。
于是解决的方案就是在 x86 机器上先安装 Ubuntu 操作系统,然后创建 Windows 的虚拟机,这样就能在 Ubuntu 上执行编程调试等开发任务,在 Windows 虚拟机上执行办公相关的操作,是目前看来比较合适的搭配。
最终存在的问题,就是您得将 Windows 操作系统完整迁移到虚拟机上,否则从头创建一个新的操作环境,代表很多设定或密码也得重来一次。
使用两套独立系统
大部分先进技术工作者都会使用便携式办公设备,例如笔记本电脑或平板电脑,而这类设备几乎都不具备 CUDA GPU 开发能力。因此要学习或开发人工智能应用的话,就需要另一台具备 CUDA 开发环境的独立系统,然后从惯用的办公设备去远程操作 CUDA 计算设备,这样的组合是最合适的方式,互相不影响。
在 NVIDIA 推出 Jetson 嵌入式设备之前,我们只能选择在 x86 电脑插上 CUDA 架构 GPU 计算卡的方式。由于体积、重量和电源等方面等限制,这种设备不能随身携带到任何地方进行开发、测试或演示。
如今 Jetson Nano 的特性能解放这些束缚,让我们能在绝大部分环境下执行任务。下表是 Jetson Nano 与 x86 系统安装 GPU 卡的一些基本特性比较表:
Jetson Nano 定位在智能边缘的推理计算,并不适合执行人工智能的模型训练任务,以及对“延迟”较为敏感的应用,但是作为入门者的学习工具,以及开发轻量级的边缘智能推理应用,是再适合不过了。
(二)随时随地操作
要执行远程操作的前提,就是需要在两台设备上形成连线。在办公室或家中有网络的环境下,可以较为轻松地使用 Wi-Fi 方式进行连线,但如果在没有网络或不能自主获取 IP 的环境下,为两台设备建立连线则有一些挑战。
NVIDIA 为 Jetson Nano 提供一种“无头(headless)”连线方式,只需要一条具备数据传输能力的 USB/MicroB 连接线,在 Jetson Nano 与办公电脑之间,按照下图接线就能形成连线,此时 Jetson Nano 会提供一个 192.168.55.1 的固定 IP,这样就能在办公电脑上非常轻松地操作 Jetson Nano。
此外,如果所处环境缺乏电源插口,我们也可以用一般 5V 充电宝来为 Jetson Nano 提供电源,如此一来就完全不会受到任何的限制,只要带好笔记本电脑、Jetson Nano、USB 线以及充电宝这四个东西,就能在任何地方执行任务,这是 x86 电脑所不能提供的特性。
(三)快速搭建开发环境
大部分在 x86 系统上使用 CUDA 开发资源的初学者,一开始最痛苦的经历都在“环境调试”的过程,除了根据 GPU 卡型号挑选正确驱动版本之外,紧跟着就是CUDA、cuDNN、TensorRT 这三者之间的版本匹配问题,然后再往上添加 TensorFlow、PyTorch、ONNX 等框架,整个过程都需要非常细腻的版本对应,任何一个环节出错,都可能需要将前面的安装全部推倒重来,十分消耗时间与精力。
要执行计算机视觉相关应用,大部分会以 OpenCV 这套普及率高的开源库为主,如果使用开源包进行完整的安装,在过程不出错的状况下大约需要 1 个多小时,几乎没有哪个新手能一次就安装成功。
总的来说,要在 x86 系统上安装并调试好能工作的 CUDA 开发环境,根据经验,即便是熟手也得 6 小时以上时间,很多新手可能都得花个 2~3 天时间才能完成,有些人在这个阶段就会产生放弃的念头。
NVIDIA 为 Jetson Nano 开发套件设计 TF 卡启动方式,并为其提供官方安装镜像文件,只要到指定的地方下载 7G 以内的文件,然后使用推荐的软件烧录到 TF 卡里,接着插入 Jetson Nano 卡槽内,再开启电源就可以。
正常状况下能在 1 个小时以内完成,使用者不需要执行任何安装指令,就能得到一个调试好的 CUDA/cuDNN/TensorRT/OpenCV 开发环境与开源范例,非常轻松。
我们还可以用多张 TF 卡来确保不同应用的环境独立性,例如 Python 的 NumPy 库就经常发生在不同应用之间的版本冲突问题,最好的解决方式就是为不同应用提供独立的 TF 卡,而不需要在一个环境中去设立多个 env 或 conda 虚拟环境。
笔者自己就用了 4 张 64GB 的 TF 卡,分别针对 Jetbot 小车、DeepStream 智能分析、YOLO 口罩识别与机械手臂操作的应用开发,提供互不干扰的开发环境,大量节省调试兼容性的精力。
(四)更广泛的应用场景
虽然 Jetson Nano 的计算性能远远不如 x86 安装 CUDA GPU 卡,但这款嵌入式设备就是为锁定在低功耗的边缘应用领域而设计,面向绝大部分智能推理识别的计算是相当足够的,并且还提供一组 40 针兼容扩充引脚,可以使用市场上绝大部分周边设备,自行采购来扩充作为机械手臂之类的机电控制应用。
例如 Jetbot 小车所使用的 CSI 摄像头、OLED 显示板、PCA9685+TBB6612 机电控制板、低功率电机等等,都是在网上可以用很低成本采购到的元器件,让开发者能够根据想要解决的问题,开发更广泛的应用。
NVIDIA 在 https://developer.nvidia.com/... 提供上百个基于 Jetson Nano 所创建的项目,这里不仅提供效果演示视频,还提供项目复现的开源内容,使用者可以基于这些项目所提供的资源,非常轻易地创建符合自己需求的 AI 边缘应用,这些都是在 x86 系统上很难实现的特点。
写在最后
最后再为读者总结一下 Jetson Nano 的优点:
1、高性能计算能力:配备了 NVIDIA Maxwell 架构的 128 核 GPU,可以处理大量的计算工作,包括深度学习、图像处理、视频编解码等任务。
2、低功耗:Jetson Nano 开发套件的功耗只有 5W,是传统计算机的十分之一,这意味着它可以在移动设备、嵌入式系统、机器人等低功耗场景中使用。
3、强大的软件支持:支持多种人工智能和机器学习框架,包括 TensorFlow、PyTorch、Caffe 等,并且还提供了 NVIDIA JetPack 软件套件,可以快速启动和配置系统。
4、多种接口和扩展性:提供多种接口和扩展选项,包括 HDMI、USB、GPIO、CSI 等,可以轻松地连接各种传感器、显示器和外部设备。
5、适用于多种应用场景:由于其高性能、低功耗和强大的软件支持,Jetson Nano 开发套件可以用于多种应用场景,包括智能摄像头、无人机、自动驾驶车辆、机器人、医疗设备等。
如今,基于 Jetson 平台的开发者人数已经突破百万,NVIDIA 依旧不断为这个平台灌注丰富并且易用的 AI 开发资源,大部分开发人员都能在短期内掌握 AI 应用开发技能与提升性能的技巧,足以证明 Jetson Nano 是目前成本低、使用场景广泛的快速 AI 边缘计算的学习平台,即便您只是要用来学习最基础的 C/C++ 或 Python 开发语言、计算机视觉 OpenCV 应用,这都是获取成本低、见效快的神器。
*本文中图片均由 GPUS 开发者社区的 Jetson 开发者提供,如果您有任何疑问或需要使用本文中图片,请联系 GPUS 开发者社区。