本系列文章将手把手介绍,如何借助 Jetson nano 设备,并配合亚马逊云科技 (Amazon Web Services)机器学习和 IoT 服务实现你自己的边缘智能。在上篇文章中,我们已经介绍了整个解决方案的基础概念,以及图片标注和模型训练与优化等任务,如果还没看过,建议点击这里回看上篇内容。
本篇将重点介绍边缘环境的构建和边缘推理的执行。
一、回顾
本文上篇我们通过 Amazon SageMaker 完成了边缘智能中的图像标注,模型训练和优化,最终将图像分类的 SageMaker Neo 模型导出到 S3 存储桶中。也就是说,我们完成了下图流程中右下角部分的内容。
Amazon EI image classification
本篇重点分为两大部分:
l 设备端,主要包含:安装Jetson nano镜像、SageMaker Neo runtime、Greengrass的部署、运行模型。
l 云端,主要包含:配置IoT core与Greengrass、开发与部署Lambda函数、model到设备端。
二、Jetson Nano 的镜像烧录
使用官方推荐的 Etcher 烧录镜像,不同操作系统对应不同操作方法,所以不再详细介绍,可参考这里。烧写成功后是如下图所示的基于 aarch64-linux 的镜像:
另外在使用 CSI 接口的摄像头时排线不要插反,并建议测试摄像头。
$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e
借此确保可以顺利打开摄像头。代码含义是使用 GStreamer 打开一个3820像素宽,2464像素高的相机数据流,并在一个960像素宽,616像素高的窗口中显示它。
CSI排线
三、使用 Amazon IoT Greengrass部署模型到Jetson Nano
这个步骤我们将执行如下操作:
l 3.1 安装SageMaker Neo runtime
l 3.2 安装 Amazon IoT Greengrass
l 3.3 配置和部署 Amazon Lambda
l 3.4 设置机器学习模型部署环境
l 3.5 部署机器学习模型Sagemaker Neo到边缘
l 3.6 启动模型并测试
3.1 安装SageMaker Neo runtime
下载.whl 文件并安装,其中包含 SageMaker Neo 的一些依赖库来运行 model。可以点击这里下载。
对于 Jetson Nano 以外的设备,也可以通过SageMaker Neo git找到对应的 Device Name 下载。
下载完成后,SSH 到设备中,然后安装.whl 文件:
sudo apt-get install python3-pip
sudo pip install dlr-1.0-py2.py3-none-any.whl
并安装 Amazon Python SDK boto3:
sudo pip install boto3
3.2 安装 Amazon IoT Greengrass
在 Jetson Nano 的系统中运行如下命令创建 Greengrass user 和 group:
$ sudo adduser --system ggc\_user
$ sudo addgroup --system ggc\_group
在亚马逊云科技控制台上(北京cn-north-1)通过这里介绍的方法创建证书资源并SCP给Jetson Nano。
在Jetson Nano中下载Amazon IoT Greengrass Core Software(v1.10)的aarch64 版本(注意版本,只有对应最新的大版本才能部署成功)。
解压缩Greengrass core和刚下载的证书资源文件:
$ sudo tar -xzvf greengrass-linux-aarch64-1.10.0.tar.gz -C /
$ sudo tar -xzvf <hash>-setup.tar.gz -C /greengrass \# these are the security keys downloaded above
下载AWS ATS终端根证书(CA):
$ cd /greengrass/certs/
$ sudo wget -O root.ca.pem https://www.amazontrust.com/r...
在Jetson Nano上启动Greengrass Core:
$ cd /greengrass/ggc/core/$ sudo ./greengrassd start
执行完成后终端会返回一个:
Greengrass successfully started with PID: XXXX
3.3 使用Amazon Lambda配置推理代码
登录回控制台(北京cn-north-1),创建Lambda函数。先将GitHub中的aws-samples/aws-greengrass-samples中的hello-world-python下载下来并部署到AWS Lambda中,请点击这里下载。
然后替换hello-world-python的默认代码为这里的内容,但该代码需要引入一些模块入numpy、jetbot、cv2等,请确认Jetson Nano环境包含这些依赖。
import time
import datetime
import numpy as np
import cv2
import boto3
from jetbot import Camera
from dlr import DLRModel
import greengrasssdk
3.4 设置机器学习模型部署环境
登录亚马逊云科技管理控制台(cn-north-1),进入 Greengrass。
选择并进入我们在步骤2中所创建的 group。
选择我们在步骤3中创建的Lambda函数。
然后使此函数保持活跃并长时间运行,为其分配1000MB内存。具体可参阅这里,如下图所示:
保持 Lambda 函数长时间生存
长时间生存(long-lived)的 Lambda 函数在 Amazon IoT Greengrass 启动后函数会自动在自己的容器中保持运行。这与按需Lambda函数相反,后者在调用时启动,并在没有要执行的任务时停止。有关更多信息,请参考Greengrass Lambda函数的生命周期配置。
在资源中添加 Machine Learning 模型,添加机器学习资源如下图所示,在模型源中选择我们上传过的 Sagemaker Neo 模型。本地路径设置为/ml\_model。
添加本地资源,这里要注意的是回到 Jetson Nano 中查看/dev/下的文件是否与下面列出的路径对应,如果没有请创建并分配目录拥有者为ggc\_user和ggc\_group。例如:
/dev$ cd /
$ sudo mkdir /nvmap
$ sudo chown ggc\_user:ggc\_group \*
本地资源
在部署模型前还需要安装 Openjdk-8。这是 GGC v1.10新功能,用于本地处理数据流并自动将其导出到亚马逊云科技的流管理器。此功能需要 Greengrass 核心设备上的 Java 8。
sudo apt install openjdk-8-jdk
如果没有安装会报错如下图:
配置Greengrass role,我们回到Greengrass Group中选择设置(Settings),选择Greengrass service role,然后跳转到Amazon IAM控制台中添加Greengrass的角色所需要的权限:”AmazonS3fullAccess”、“CloudWatchFullAccess”、“AWSGreengrassResourceAccessRolePolicy”以及“AWSIoTFullAccess”。
Greengrass Service Role
3.5 部署SageMaker Neo训练的模型到边缘
最后,我们需要把在终端图像分类后的消息通过MQTT方式上报给云端的Amazon IoT Core,所以还需要添加订阅操作,并进行部署。回到Greengrass Group中,左侧的工具栏中选择订阅(subscription),然后选择源(source)选择我们在步骤3.3中部署好的Lambda,目标选择IoT Cloud,然后定义一个Topic,例如“dino-detect”。
配置完成后单击右上角的操作(Actions),选择部署。部署成功后如下图所示,如果部署失败请查找失败原因:
3.6 启动模型并测试
所有步骤都配置成功后,就可以测试乐高恐龙的分类器了。在 Amazon IoT 控制台中选择测试,并订阅主题 dino-detect 或#,然后启用 Jetson Nano 的摄像头捕获并对图像进行分类,最后将结果发送回 Amazon IoT 控制台。
总结
再次回顾一下我们的 Demo 流程图:
Amazon EI Demo 流程图
我们共同完成了边缘智能应用的所有步骤。
AIoT 或 EI 随着 AI 芯片低功耗和低成本使得越来越多的企业关注智联网这个领域。边缘智能正在促成人工智能(AI)与物联网(IoT)的混合,AI 与 IoT 相辅相成:如果没有 AI,IoT 只是收集数据的传感器;如果没有 IoT,AI 也不会应用到边缘。
AIoT 项目确实比其他单纯的一个软件或硬件的研发更加复杂,它是多学科或技术栈的融合。比如,数据的采集、分析、展现可能需要大数据的技术,边缘逻辑的推理、判断需要机器学习的模型,对数据加工后又要与大数据结合去 ETL。云端的逻辑编写、OTA 升级、安全、设备管理也要与终端集成。另外,如果是视频流交互还涉及到编解码、媒体等技术。
正是因为它的复杂性,我们可以利用云计算提供的服务和接口来快速原型和开发。
参考链接:
- Nvidia Jetson Nano 介绍
- Nvidia Jetson Nano 镜像烧录
- Amazon IoT Greengrass
- NVIDIA Jetson Nano with AWS ML@Edge
- 《智联网・未来的未来》电子工业出版社 2018,6 彭昭
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。