亚马逊AWS官方博客
使用 Jetson nano 结合 AWS 机器学习和 IoT 实现边缘智能—下篇
一、回顾
上一章我们通过Amazon SageMaker完成了边缘智能中的图像标注,模型训练和优化,最终将图像分类的SageMaker Neo模型导出到S3存储桶中。也就是我们完成了下图右下角阴影部分的内容。
本章重点分为两大部分:
- 设备端,主要包含:安装Jetson nano的镜像、SageMaker Neo runtime、Greengrass的部署、运行模型。
- 云端,主要包含:配置IoT core与Greengrass、开发与部署Lambda函数、model到设备端。
AWS EI image classification
二、Jetson Nano的镜像烧录
使用官方推荐的Etcher烧录镜像,不同的操作系统对应不同的操作方法,所以不再详细介绍,可以参考https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write,烧写成功后是如下图所示的基于aarch64-linux。
另外在使用CSI接口的摄像头时排线不要插反,并测试摄像头。
可以顺利打开摄像头。代码的含义是使用GStreamer打开一个3820像素宽、2464像素高的相机stream,并在一个960像素宽、616像素高的窗口中显示它。
CSI排线
三、使用AWS IoT Greengrass部署模型到Jetson Nano
这个步骤我们做如下的事情:
- 3.1 安装SageMaker Neo runtime
- 3.2 安装AWS IoT Greengrass
- 3.3 配置和部署AWS Lambda
- 3.4 设置机器学习模型部署环境
- 3.5 部署机器学习模型Sagemaker Neo到边缘
- 3.6 启动模型并测试
3.1 安装SageMaker Neo runtime
下载 .whl文件并安装,其中包含SageMaker Neo的一些依赖库来运行model。可以通过以下链接下载:
https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/dlr-1.0-py2.py3-none-any.whl
如果是Jetson Nano以外的设备也可以通过SageMaker Neo git https://neo-ai-dlr.readthedocs.io/en/latest/install.html 找到对应Device Name进行下载。
下载完成后,SSH到设备中,然后安装.whl文件:
也要安装AWS Python SDK boto3
3.2 安装AWS IoT Greengrass
在Jetson Nano的系统中运行如下命令创建Greengrass user和group
在AWS控制台上(北京 cn-north-1)通过以下链接来创建证书资源并SCP给Jetson Nano:https://docs.amazonaws.cn/greengrass/latest/developerguide/gg-config.html。
在Jetson Nano中下载AWS IoT Greengrass Core Software(v1.10)的aarch64版本(注意版本,只有对应最新的大版本才能部署成功)。https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/greengrass-linux-aarch64-1.10.0.tar.gz
解压缩Greengrass core和刚刚我们下载的证书资源文件:
下载AWS ATS 终端根证书(CA):
启动Greengrass Core在我们的Jetson Nano上:
执行完成后我们终端会返回一个:
3.3 使用AWS Lambda配置推理代码
登陆回控制台(北京 cn-north-1),创建Lambda函数。先将github中的aws-samples/aws-greengrass-samples中的hello-world-python下载下来并部署到AWS Lambda中,链接如下:
https://github.com/aws-samples/aws-greengrass-samples/tree/master/hello-world-python
然后替换hello-world-python的默认代码如下面的链接,但该代码需要引入一些模块入numpy、jetbot、cv2等,请确认Jetson Nano环境包含这些依赖。
https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano/blob/master/inference-lambda.py
3.4 设置机器学习模型部署环境
- 登陆AWS管理控制台(cn-north-1),进入Greengrass。
- 选择并进入我们在2步骤中所创建的group
- 选择我们在3步骤中创建的Lambda函数
- 然后使此函数长时间运行(Make this function long-lived and keep it running indefinitely)并分配内存为1000MB参考链接如下: https://docs.aws.amazon.com/greengrass/latest/developerguide/long-lived.html 如下图:
长时间生存(long-lived)的 Lambda 函数在 AWS IoT Greengrass 启动后函数会自动在自己的容器中保持运行。这与按需 Lambda 函数相反,后者在调用时启动,并在没有要执行的任务时停止。有关更多信息,请参考Greengrass Lambda 函数的生命周期配置。
Keep Lambda long-lived
- 在资源中添加Machine Learning模型,添加机器学习资源如下图,在模型源中选择我们上传过的Sagemaker Neo的模型。本地路径设置为/ml_model
- 添加本地资源, 这里要注意的是回到Jetson Nano中查看/dev/下的文件是否与下面列出的路径对应,如果没有请创建并分配目录拥有者为ggc_user和ggc_group。例如:
Local Resource
- 在部署模型之前,需要安装openjdk-8。这是GGC v1.10新功能,用于本地处理数据流并自动将其导出到 AWS 云的流管理器。此功能需要 Greengrass 核心设备上的 Java 8。
如果没有安装会报错如下图:
- 配置Greengrass role,我们回到Greengrass Group中选择设置(Settings),选择Greengrass service role,然后跳转到AWS IAM console中添加Greengrass的角色所需要的权限,”AmazonS3fullAccess”, “CloudWatchFullAccess” and “AWSGreengrassResourceAccessRolePolicy” “AWSIoTFullAccess”..
Greengrass Service Role
- 3.5 部署SageMaker Neo训练的模型到边缘
最后,我们需要把在终端图像分类后的消息。 通过MQTT方式上报给云端的AWS IoT Core,所以还需要添加订阅操作,并进行部署。回到Greengrass Group中,左侧的工具栏中选择订阅(subscription),然后选择源(source)选择我们在步骤3.3中部署好的Lambda,目标我们选择IoT Cloud,然后定义一个Topic如”dino-detect”。
当配置完成之后,单击右上角的操作(Actions),选择部署。部署成功后如下图,如果部署失败请查找失败原因:
- 3.6 启动模型并测试
所有步骤都配置成功后,我们就可以测试乐高恐龙的分类器了。在 AWS IoT 控制台中,选择测试,并订阅主题dino-detect或#,然后启用Jeston Nano的摄像头捕获并对图像进行分类,最后将结果发送回 AWS IoT 控制台。
总结:
再次回顾一下我们的Demo流程图:
AWS EI Demo流程图
我们共同完成了边缘智能应用的所有步骤。AIoT或EI随着AI芯片低功耗和低成本使得越来越多的企业关注智联网这个领域。边缘智能正在促成人工智能(AI)与物联网(IoT)的混合,AI与IoT相辅相成:如果没有AI,IoT只是收集数据的sensor,如果没有IoT,AI也不会应用到边缘。AIoT项目确实比其他单纯的一个软件或硬件的研发更加复杂,它是多学科或技术栈的融合。比如,数据的采集、分析、展现可能需要大数据的技术,边缘逻辑的推理、判断需要机器学习的模型,对数据加工后又要与大数据结合去ETL。云端的逻辑编写、OTA升级、安全、设备管理也要与终端集成。另外,如果是视频流交互还涉及到编解码、媒体等技术。正是因为它的复杂性,我们可以利用云计算提供的服务和接口来快速原型和开发。
参考链接:
1. Nvidia Jetson Nano介绍:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#intro
2. Nvidia Jetson Nano 镜像烧录:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
3. AWS IoT Greengrass:
https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/what-is-gg.html
4. NVIDIA Jetson Nano with AWS ML@Edge:
https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano
5. 《智联网·未来的未来》电子工业出版社 2018,6 彭昭
6. Amazon Sagemaker Neo模型下载:
https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/model-jetson_nano.tar.gz