春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

利用 AWS GreenGrass ML Inference 为你的物联网赋予智能

  • 2019 年 10 月 21 日
  • 本文字数:7135 字

    阅读完需:约 23 分钟

利用 AWS GreenGrass ML Inference 为你的物联网赋予智能

1. 背景介绍

想对产线做预防性维护减少停机?想在门口的智能门铃上自动判断出现的人是不是家人?想在公共区域监视谁在吸烟?你需要无处不在的人工智能!完成本文的实验,你将可以让你的摄像头读懂你的动作是鼓掌还是挥手,是在读书还是在写字,是在跑步还是在跳跃。


人工智能可以帮助我们在安防监控、交通安全、自动驾驶、绩效管理、质量管理等无数方面减少人力投入提高效率。比如,我们可以在产线上部署一些网关设备,探测机器的震动和噪音。通过预先部署的机器学习模型,可以很容易预测设备是否即将发生故障,从而实现预测性的维护,减少产线停机时间;而各种短波红外相机、线扫描相机、高分辨率相机则可以很容易快速捕捉产线的零件的图像,通过预先部署的机器学习模型可以自动判断出哪些零件属于次品。随着硬件技术的发展,越来越多的物联网设备具备足够的硬件资源来运行机器学习的推理任务,而且云计算能够提供海量的机器学习的训练能力,然而为什么今天这些事情并没有普遍发生呢?究其原因,硬件能力的提升只是实现这些“黑科技”的条件之一,制约这些“黑科技”普及的因素还包括:


  • 收集和传输数据非常困难。人工智能并非天然就智能的,机器学习或深度学习的模型来自大量打好标签的原始数据的训练,而这些数据的收集、传输和打标签往往需要耗费大量的资源和开发工作。

  • 处理和训练数据集需要海量的资源。数据收集到以后往往需要经过大数据的处理和清洗的阶段,之后在机器学习的平台进行训练。这两个过程需要耗费大量的计算和存储资源。而这个过程往往是间歇进行的,为了部分时间在运行的任务购置大量计算资源往往不够经济。当然,云计算的普及能够解决这一问题。

  • 不断更新的模型如何有效部署到设备端。机器学习或深度学习的模型很难一步到位做到精准无比,需要不断累积数据迭代改进。这样就需要不断将新生成的模型部署到设备端用于推理。如何有效更新,如何有策略地分组更新都是需要复杂的控制逻辑。

  • 用于推理的代码如何有效更新到设备端。如同模型是不断更新的,推理代码也会常有新功能的更新,需要推送到设备端。简便的部署方式在这种终端智能的场景下非常重要。


AWS 在物联网场景下的边缘计算“大杀器” Greengrass 自 2016 年的 re-invent 大会上发布以来得到越来越多的用户青睐,它将 AWS IOT 服务能力从云端移到了设备端,即使在设备端不能正常连接互联网的情况下,仍能保持边缘计算的正常进行。在 2017 年的 re-invent 大会上,AWS 又发布了 Greengrass ML inference 功能,它使得边缘计算同时具备了机器学习的推理能力,从而实现了云端训练à模型推送、代码推送à重新训练的动态循环的物联网人工智能的闭环。本文将向你介绍其工作原理和部署方式。


2. AWS Greengrass ML inference 的工作原理

从云端的机器学习训练到设备端的推理,它是一个完整的闭环和生态体系。机器学习使用可从现有数据中学习(该过程称为训练)的统计算法,以便对新数据做出决策(该过程称为推理)。在训练期间,将识别数据中的模式和关系,以建立决策制定模型。该模型允许系统基于之前从未遇到过的数据做出明智的决策。训练机器学习模型需要大量计算资源,因此和云是天然良配。但是,推理通常需要计算能力要少得多,并且往往在新数据可用时实时完成。因此,要确保您的 IoT 应用程序能够快速响应本地事件,则必须能够以非常低的延迟获得推理结果。整个系统的工作模式如下图所示:



在云端的工作大致包括大数据清洗转换和分析、机器学习训练两大部分的工作内容。在 AWS 上,大数据清洗转换和分析有 Glue 、 EMR 和 redshift 等工具可以事先,机器学习训练则有 Sagemaker 平台,都能大大减少在编程方面的工作量,使得大数据分析和处理以及机器学习的门槛得以大大降低。如果读者感兴趣,可以参考其他博客(比如《使用 GLUE 构建无服务器架构的 ETL Pipeline》《AWS 神器为数据科学家轻松打造机器学习全流程 –– EMR Spark + SageMaker 黄金搭档》)了解这些平台和工具的详情。


设备端的推理则需要加载云端训练好的模型以及用于推理的代码,从而不间断地采集数据进行推理。这部分功能是依赖于 AWS Greengrass 来实现的。那么什么是 Greengrass 呢?它是如何进行机器学习的推理的?


首先, AWS Greengrass 是一个软件,它被安装到你的 IOT 边缘网关设备后,允许你以安全方式运行本地计算、消息收发、数据缓存、同步和 ML Inference 功能的软件,就好比一个简化版的 AWS IOT 服务部署到了本地。借助 AWS Greengrass , IOT 网关设备可以运行 AWS Lambda 函数、同步设备数据以及与其他设备安全通信——甚至无需连接互联网。通过使用 AWS Lambda,Greengrass 可以确保您的 IoT 设备能够快速响应本地事件,使用正在 Greengrass Core 上运行的 Lambda 函数以与本地资源进行交互,执行间歇性连接,通过空中升级保持更新状态,最大限度地降低将 IoT 数据传输到云的成本。


Greengrass ML Inference 是 AWS Greengrass 的一项功能,让您可以使用在云中构建和训练的模型轻松地在 Greengrass Core 设备上本地执行机器学习推理。例如,您可以在 Amazon SageMaker 中为场景检测分析构建推理模型,然后在启用 Greengrass 的监控摄像机设备上运行该模型,该设备可在检测到家门口的访客时进行推理,发送推理结果到 AWS IOT 云端,并最终推送消息通知到主人的手机端。


Greengrass ML Inference 包括预构建的 TensorFlow、Apache mxnet 和 Chainer 软件包,适用于所有由 Intel Atom、NVIDIA Jetson TX2 和 Raspberry Pi 提供支持的设备。因此,您无需从头开始为设备构建和配置 ML 框架。除了支持 TensorFlow、Apache mxnet 和 Chainer 之外, Greengrass ML 还可以与其他热门框架(包括 Caffe2 和 Microsoft Cognitive Toolkit )配合使用。借助 Greengrass ML Inference,您还可以灵活地在 Amazon SageMaker 中构建和训练 ML 模型


已经存储在 S3 中的模型进行部署(这个模型可以来自于云端训练的结果,也可以是你自己机房里的训练集群产生的模型,上传到 S3 )。


3. 如何部署 AWS Greengrass ML Inference

3.1 环境准备

3.1.1 Ubuntu 虚拟机环境准备

AWS Greengrass Core 软件可在网络集线器、网关或其他设备上运行,能够自动与云同步和交互。运行环境为 Linux ,至少需要 1GHz 的计算频率 (ARM 或 X86)、128MB RAM 以及其他资源,才能满足所需操作系统、消息吞吐量和 AWS Lambda 执行的要求。具体详情可以参考这里


本文将采用一个 Ubuntu 的虚拟机来模拟一个 IOT 网关设备,通过其集成的摄像头(可以把你的笔记本电脑的摄像头映射给虚拟机使用)来采集图像。通过部署 AWS Greengrass ,它可以从云端加载一个用于探测人体动作的模型以及用于推理的 lambda 代码,每秒钟生成一个推理的结果并发送到 AWS IOT 云端。


开始之前,你需要注册一个 AWS 全球区的账号,并且在你的笔记本上预先安装一个 VMware workstation(Windows) 或 VMware Fusion(MacOS) 或 VirtualBox ,并安装好一个 Ubuntu 桌面版虚拟机( Ubuntu 官网下载地址:http://www.ubuntu.org.cn/download/desktop ),需要至少 2GB 内存,最好给虚拟机分配 3GB 的内存。


安装好虚拟机以后,我们需要将笔记本的摄像头映射给虚拟机。以 Virtual Box 为例,在菜单中 Devices 下面选中 Webcams ,这样 Ubuntu 可以共享笔记本的摄像头,用于推理。如下图所示:



3.1.2 安装 Greengrass 软件

登录到虚拟机 Ubuntu 里面,打开 terminal 终端,在其中输入以下命令:


sudo apt-get update sudo apt-get install -y wget python gcc vim wget https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py sudo adduser --system ggc_user sudo groupadd --system ggc_group cd /etc/sysctl.d ls


结果如下图所示,你应该能看到一个名为 99-sysctl.conf 的文件。



运行命令:


sudo vim 99-sysctl.conf


为了提高设备上的安全性,请运行以下命令以在操作系统启动时启用硬链接和软链接保护。在文件末尾添加以下两行:


fs.protected_hardlinks = 1 fs.protected_symlinks = 1


保存退出编辑。之后重启 Ubuntu 系统:


sudo reboot


重启完毕后重新打开 terminal 终端,输入:


sudo sysctl -a 2> /dev/null | grep fs.protected


你可以看到 fs.protected_hardlinks = 1 和 fs.protected_symlinks = 1,如下图所示:



在 Ubuntu 中打开浏览器,并登录 AWS console :


https://console.aws.amazon.com/console/home?region=us-east-1


进去以后选择 Greengrass,如下图所示:



点击 “Get Started” → “Use easy creation”, 命名这个 Greengrass group 为 “Action-Detect” ,其他均采用默认配置即可,点击 “Create Group and Core” ,并下载所有生成的秘钥文件和配置文件的压缩包. 如下图所示:



将文件保存到 Ubuntu 的~/Downloads 目录。


之后,回到 AWS IOT console 的页面,找到左下方的 software 选项页,我们需要下载其中的 AWS Greengrass Core software 以及 Mxnet/TensorFlow precompiled libraries。如下图所示:



Greengrass Core software 的下载选项如下图所示:



Mxnet/TensorFlow precompiled libraries 的下载选项如下图所示:



把这两个安装文件都下载到 Ubuntu 的 ~/Downloads 目录下面。打开 Terminal 终端,输入以下命令以安装 Greengrass 软件:


cd ~/Downloads wget -c "https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem" -O root.ca.pem sudo tar -xzf greengrass-ubuntu-x86-64-1.5.0.tar.gz -C / tar -xvf xxxx-setup.tar.gz(此文件是在前文创建 Greengrass 组 “Action-Detect”时下载的文件) sudo cp config/config.json /greengrass/config sudo cp certs/* /greengrass/certs/ sudo cp root.ca.pem /greengrass/certs/ sudo /greengrass/ggc/core/greengrassd start


如果你看到 Greengrass started successfully,那么你已经成功在 Ubuntu 上运行起 Greengrass。


如果你想深入了解 Greengrass 的安装配置,可以参考这个文档:http://docs.aws.amazon.com/greengrass/latest/developerguide/gg-device-start.htmlAQZ


3.1.3 安装和更新 mxnet 环境

为了让机器学习的模型和代码能够正常运行,我们还需要安装 mxnet 相关的环境。由于 AWS IOT 提供的 mxnet 版本是 0.11.0,而本次实验提供的模型是 1.1.0 的环境下创建的,我们还需要更新 mxnet 的版本。请在 Terminal 终端下运行以下命令:


cd ~/Downloads tar -xvf ggc-mxnet-v0.11.0-python-intel.tar.gz sudo ./mxnet_installer.sh pip install mxnet==1.1.0(如果出错,可以在后面跟--user +你的用户名)


关掉当前 terminal ,并重新打开一个新的 terminal,并键入


python


之后键入


import mxnet print(mxnet.__version__)


看到当前 Mxnet 的版本为 1.1.0,如下图所示:



这样就完成了环境准备工作。


3.2 AWS IOT 云端配置工作

接下来我们将完成在 AWS IOT 云端的配置,将云端的机器学习模型和 Lambda 推理代码部署到设备端。


3.2.1 Lambda 配置

下载以下 Lambda 代码 zip 包到你的本地电脑:


https://s3.cn-north-1.amazonaws.com.cn/greengrass-ml-hands-on-lab/HumanActionDetect_lambda.zip


在 AWS IOT Greengrass console 点击选中刚才创建的 Grassgrass 组“action-Detect”:


  • Greengrass→Groups→ ” action-Detect “→ Add Lambda

  • 在打开的 Lambda console 中点击 Lambda→ Add Lambda → Create new Lambda, 如下图所示:



  • 提供相应的配置参数:


-Name : human-action-detect


-RunTime: Python 2.7


-Role: Choose an existing role


– Exiting role: service-role/lambda_basic_execution (如果没有看到这个 role,则在上一步中选择新建一个 role)


  • 上传刚才下载的 zip 包,并在 Lambda 的配置界面将 Handler 改成 HumanActionDetect.function_handler。如下图所示:




  • 在 Configure test even 里面,保持默认的设置,命名为 “TestEvent”。并点击 create。


点击 Save。


  • 点击 Actions → Publish new version. 给它一个版本号 1.0。如下图所示:




  • 点击 “Publish”.


以上步骤将会创建和发布一个 version 1 的 lambda 函数,可供后续 Greengrass 配置使用.


3.2.2 Greengrass group 配置

  • 添加 Lambda 到你创建的 group


依次点击 Groups → action-Detect → Lambda → Add Lambda → Use exiting Lambda → human-action-detect → Version 1。如下图所示:



  • 在上面的界面点击 human-action-detect 进行相应的配置:


点击 Edit, 如下图所示:



配置相应的参数:


– Memory limit: 512 MB


– Timeout: 20 sec


– 选中"Make this function long-lived and keep it running indefinitely"


– Enable "Read access to /sys directory"


– 其他保持默认


如下图所示:



  • 添加本地文件系统


在 resource 界面,点击 Add Resource。如下图所示:



点击 Add local resource。如下图所示:



配置相应的参数:


-Resource name: tmp


-Resource type: Volume


-Source path: /tmp


-Destination path: /tmp


-选中 Automatically add OS group permissions of the Linux group that owns the resource


-选中 Read and write access


如下图所示:



点击 add another resource


  • 添加摄像头


-Resource name: webcam


-选中 device


-device path: /dev/video0


-选中 Automatically add OS group permissions of the Linux group that owns the resource


-选中 Read and write access


如下图所示:



  • 下载机器学习模型并上传 S3


下载以下模型文件,并上传到你自己的 S3 存储桶中


https://s3.cn-north-1.amazonaws.com.cn/greengrass-ml-hands-on-lab/model.tar.gz


  • 添加机器学习模型


-resource name: human-action-detect


-选中 Locate or upload a model in S3


选中上一步上传到你自己S3存储桶中的模型文件


-local path: /models


-选中 read-only access


如下图所示:



  • 检查 lambda 的资源配置。如下图所示:



  • 添加 Subscriptions:


回到 greengrass group 中选中我们创建的 group,在左侧的选项中选中 subscriptions,点击 add subscription。如下图所示:



在 source 中选中 Lambda ,并选中刚才配置好的 lambda: human-action-detect。如下图所示:



在 target 中选中 IOT Cloud。如下图所示:



点击 Next,在 topic filter 中输入 your/action。如下图所示:



点击 Next ,点击 finish


  • 更新 service role:


在 AWS Console 中选中 IAM ,在 roles 选项页中筛选出 GreengrassServiceRole ,并点击进入。如下图所示:



在页面中找到 Attach policy ,点击后筛选出 AmazonS3ReadOnlyAccess,点击 Attach policy。如下图所示:



最后 GreengrassServiceRole 的权限如下图所示:



回到 Greengrass group 中选中我们刚才的 group ,在左侧选中 settings ,点击右上角的 Add Role。如下图所示:



选中 GreengrassServiceRole ,并点击 save。如下图所示:



3.2.3 部署 Greengrass 的资源和配置到设备端并验证:

依次点击 Groups → “action-detect”→ Actions → Deploy。如下图所示:



验证模式是否成功部署, Lambda 是否正常运行


在 AWS IOT console ,点击 test ,并在右侧的 subscription topic 里面输入 your/action ,点击 subscript to topic。如下图所示:



此时你在笔记本摄像头前可以做各种动作,比如将手举起来到脸旁边做挥手状。保持这个动作几秒钟,你就能在 Console 界面看到推理的结果。


注意:


  • 我们提供的 Lambda 每秒钟检测一次你的动作

  • 检测结果成为消息上传到 AWS IOT ,然后被 console 的这个 IOT client 所订阅,整个过程会有几秒钟时延

  • 我们提供的 Lambda 检测你的动作时,如果 confidence level 不高于 9,它不会上传 MQTT 消息,因此并不是你的所有动作它都会有消息产生

  • 可以尝试挥手、鼓掌、刷牙、打电话等行为,查看是否能够正常获取推理结果


如下图所示:



3.3 问题排查:

你可以通过查看 Ubuntu 上的 /greengrass/ggc/var/log 目录中的以下日志文件来进行问题排查


- crash.log


-如果 Greengrass 程序崩溃或运行失败,会产生相应的日志


- system


– Greengrass 软件所产生的系统日志,包括本地 Lambda 的失败信息


- user


– Lambda 程序运行过程中产生的所有日志


具体可以参考以下链接:


https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/greengrass-logs-overview.html


4. 总结

训练模式需要大量计算资源,因此它非常适合云计算, AWS 的 sagemaker 使得云端的训练变得非常的简单。 然而,许多客户希望运行更接近数据源的推理,以最大限度地减少等待时间以及通往云端的往返带宽问题。利用边缘计算机器学习推理的 Greengrass ML inference ,可以使得在设备上部署和运行机器学习模型变得更快,更容易。 这项新功能可以将推理模型应用到本地生成的数据,而无需往返云端。 AWS Greengrass ML inference 可以与云端的 sagemaker 良好集成,从而实现云端训练,本地推理的完整解决方案。而且,用户可以通过向 Greengrass 发送指令要求它将收集到的数据上传到云端,在云端进一步训练完成模型的更新,通过 AWS IOT 将新的模型以及新的推理代码推送到设备端,从而实现一个不断迭代和进化的机器学习生态系统。


作者介绍:


吴鹏程


AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在物联网、数据仓库、大数据、企业应用、混合云组网等方面有着较为丰富的实践经验。在加入 AWS 之前,在惠普、戴尔等公司担任资深售前工程师和区域经理,主要经验包括 Unix 和 X86 平台架构设计,网络架构设计,虚拟化建设,容灾建设以及 ITIL 运维规范。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-greengrass-ml-inference/


2019 年 10 月 21 日 08:00320

评论

发布
暂无评论
发现更多内容

开发者,别让自己孤独

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

诚招译者 | Bruce Eckel On Java 8 中文版

图灵社区

Java

深入浅出 WebRTC AEC(声学回声消除)

阿里云视频云

阿里云 音视频 WebRTC 音频技术 视频云

关于Redis分布式锁这一篇应该是讲的最好的了,赶紧收藏起来

比伯

Java 编程 架构 面试 技术宅

TensorFlow2 Fashion-MNIST图像分类(二)

书豪

TensorFlow2 Fashion-MNIST图像分类(一)

书豪

tensorflow 学习

cartographer环境建立以及建图测试(详细级)

良知犹存

cartographer slam

疫情之下,被公司优化掉!同事大部分都去了创业型的公司,而我仅仅一年经验,却斩获多家大厂offer

Java~~~

Java 面试 架构师技能

LeetCode题解:515. 在每个树行中找最大值,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

docker与podman的故事:一个方兴未艾,一个异军突起

晓川

老师讲的真棒!阿里P7级别面试经验总结,终获offer

欢喜学安卓

android 程序员 面试 移动开发

一道腾讯面试题目:没有listen,能否建立TCP连接

linux大本营

c++ Linux TCP 后台开发 TCP/IP

架构师训练营第 1 期 - 第 11周 - 学习总结

wgl

极客大学架构师训练营

DolphinDB与Pandas对于大文本文件处理的性能对比

DolphinDB

数据库 pandas tsdb 数据库选择 DolphinDB

Redis Sentinel-深入浅出原理和实战

Linux服务器开发

redis 中间件 底层应用开发 web服务器 Linux服务器开发

电信新报告 | 数字化转型:搁置还是加速?

VoltDB

5G安全 通信 电子信息

专访 CNCF 大使张磊:让云原生不再是大厂专属

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

观点|发展区块链金融,长三角如何建设“四梁八柱”

CECBC

区块链

大促中为什么需要可视化监控大屏?

京东科技开发者

大数据 监控 数据可视化

老师讲的真棒!总结2020年最全180道Android岗面试题,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

高并发下,如何让你的数据库再快一点?

数据君

数据库

http client 中的 connectionRequestTimeout, connectTimeout, socketTimeout

不在调上

Gemini双子新约系统软件开发|Gemini双子新约APP开发

系统开发

案件数同比下降七成 北京引入“区块链”化解物业纠纷

CECBC

区块链 法律

SDK开发质量保障经验总结

张明云

接口 程序设计 接口测试 sdk SDK测试

Redis为什么这么快?

数据君

redis

快速学会!啃完999页Android面试高频宝典,挥泪整理面经

欢喜学安卓

android 程序员 面试 移动开发

IO问题成顽疾,鹅厂专家来教你

数据君

数据库

深入Linux内核架构——进程虚拟内存

赖猫

c++ Linux

加密货币可能是人类历史上最大的/富国银行报告:加密货币投资像19世纪50年代的早期淘金热财富转移

CECBC

数字货币

揭开IP地址的神秘身份!!!

德胜网络-阳

利用 AWS GreenGrass ML Inference 为你的物联网赋予智能_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章