11

image

本系列文章将手把手介绍,如何借助 Jetson nano 设备,并配合亚马逊云科技 (Amazon Web Services)机器学习和 IoT 服务实现你自己的边缘智能。在上篇文章中,我们已经介绍了整个解决方案的基础概念,以及图片标注和模型训练与优化等任务,如果还没看过,建议点击这里回看上篇内容。

本篇将重点介绍边缘环境的构建和边缘推理的执行。

一、回顾

本文上篇我们通过 Amazon SageMaker 完成了边缘智能中的图像标注,模型训练和优化,最终将图像分类的 SageMaker Neo 模型导出到 S3 存储桶中。也就是说,我们完成了下图流程中右下角部分的内容。

image

Amazon EI image classification

本篇重点分为两大部分:

l 设备端,主要包含:安装Jetson nano镜像、SageMaker Neo runtime、Greengrass的部署、运行模型。

l 云端,主要包含:配置IoT core与Greengrass、开发与部署Lambda函数、model到设备端。

二、Jetson Nano 的镜像烧录

使用官方推荐的 Etcher 烧录镜像,不同操作系统对应不同操作方法,所以不再详细介绍,可参考这里。烧写成功后是如下图所示的基于 aarch64-linux 的镜像:
image

另外在使用 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像素高的窗口中显示它。
image

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。
image

在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内存。具体可参阅这里,如下图所示:
image
保持 Lambda 函数长时间生存

长时间生存(long-lived)的 Lambda 函数在 Amazon IoT Greengrass 启动后函数会自动在自己的容器中保持运行。这与按需Lambda函数相反,后者在调用时启动,并在没有要执行的任务时停止。有关更多信息,请参考Greengrass Lambda函数的生命周期配置

在资源中添加 Machine Learning 模型,添加机器学习资源如下图所示,在模型源中选择我们上传过的 Sagemaker Neo 模型。本地路径设置为/ml\_model。
image

添加本地资源,这里要注意的是回到 Jetson Nano 中查看/dev/下的文件是否与下面列出的路径对应,如果没有请创建并分配目录拥有者为ggc\_user和ggc\_group。例如:

/dev$ cd /

$ sudo mkdir /nvmap

$ sudo chown ggc\_user:ggc\_group \*

image
本地资源

在部署模型前还需要安装 Openjdk-8。这是 GGC v1.10新功能,用于本地处理数据流并自动将其导出到亚马逊云科技的流管理器。此功能需要 Greengrass 核心设备上的 Java 8。

sudo apt install openjdk-8-jdk

如果没有安装会报错如下图:
image

配置Greengrass role,我们回到Greengrass Group中选择设置(Settings),选择Greengrass service role,然后跳转到Amazon IAM控制台中添加Greengrass的角色所需要的权限:”AmazonS3fullAccess”、“CloudWatchFullAccess”、“AWSGreengrassResourceAccessRolePolicy”以及“AWSIoTFullAccess”。
image
Greengrass Service Role

3.5 部署SageMaker Neo训练的模型到边缘

最后,我们需要把在终端图像分类后的消息通过MQTT方式上报给云端的Amazon IoT Core,所以还需要添加订阅操作,并进行部署。回到Greengrass Group中,左侧的工具栏中选择订阅(subscription),然后选择源(source)选择我们在步骤3.3中部署好的Lambda,目标选择IoT Cloud,然后定义一个Topic,例如“dino-detect”。

配置完成后单击右上角的操作(Actions),选择部署。部署成功后如下图所示,如果部署失败请查找失败原因:
image

3.6 启动模型并测试

所有步骤都配置成功后,就可以测试乐高恐龙的分类器了。在 Amazon IoT 控制台中选择测试,并订阅主题 dino-detect 或#,然后启用 Jetson Nano 的摄像头捕获并对图像进行分类,最后将结果发送回 Amazon IoT 控制台。

总结

再次回顾一下我们的 Demo 流程图:
image
Amazon EI Demo 流程图

我们共同完成了边缘智能应用的所有步骤。

AIoT 或 EI 随着 AI 芯片低功耗和低成本使得越来越多的企业关注智联网这个领域。边缘智能正在促成人工智能(AI)与物联网(IoT)的混合,AI 与 IoT 相辅相成:如果没有 AI,IoT 只是收集数据的传感器;如果没有 IoT,AI 也不会应用到边缘。

AIoT 项目确实比其他单纯的一个软件或硬件的研发更加复杂,它是多学科或技术栈的融合。比如,数据的采集、分析、展现可能需要大数据的技术,边缘逻辑的推理、判断需要机器学习的模型,对数据加工后又要与大数据结合去 ETL。云端的逻辑编写、OTA 升级、安全、设备管理也要与终端集成。另外,如果是视频流交互还涉及到编解码、媒体等技术。

正是因为它的复杂性,我们可以利用云计算提供的服务和接口来快速原型和开发。

参考链接:

  1. Nvidia Jetson Nano 介绍
  2. Nvidia Jetson Nano 镜像烧录
  3. Amazon IoT Greengrass
  4. NVIDIA Jetson Nano with AWS ML@Edge
  5. 《智联网・未来的未来》电子工业出版社 2018,6 彭昭

Amazon SageMaker Neo 模型下载

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。