物联网(IoT)的一个典型利用场景是可能从传感器数据中获取上下文洞察力,例如剖析设施异样或者进行预测性保护,及时给予用户告诉。在本文中,咱们将专一于通过设施多项指标对设施进行预测性保护,利用机器学习算法,对设施运行状态进行预测,提前发现可能呈现的异样,及时进行保护,避免出现重大的生产事变。

 { 计划概述 } 

本文应用机器学习办法进行预测性保护,采纳风力发电机模仿数据为示例数据集,利用Amazon SageMaker进行模型训练,并且部署推理端点。边缘侧设施将数据公布到Amazon IoT Core,应用IoT规定触发Lambda函数调用部署在Sagemaker下面的预测性保护端点的API,判断设施是否将出现异常,如出现异常,通过更新Amazon IoT Shadow从而主动敞开设施并发送告诉。

咱们应用的算法称为XGBoost (eXtreme Gradient Boosting),它是一种监督式学习算法, 尝试将一组较简略且较弱模型的一系列估计值联合在一起,从而精确地预测指标变量,能够用来解决回归、分类(二进制和多类)和排名问题。利用XGBoost预测设施是否会损坏,进行提前预测性保护。

本文中的演示应用风力发电机模仿数据,数据字段包含:

风速:wind_speed
叶片转速:RPM_blade
油温:oil_temperature
油位:oil_level
温度:temperature
湿度:humidity
振动频率vibrations_frequency
压力:pressure
风向:wind_direction
是否损坏:breakdown

您能够应用此解决方案自动检测潜在的设施故障,并提供倡议采取的措施。该解决方案易于部署,并蕴含示例数据集,您也能够批改该解决方案并应用其余数据集,从而构建您本人的IoT预测性保护计划。

下图显示了本计划采纳的架构

1.用于预测性保护的模型利用了存储在S3上的设施历史数据在Amazon SageMaker上进行训练。

2.训练好的模型利用SageMaker部署并裸露Endpoints提供预测服务。

3.数据从传感器发送到 IoT Core,通过IoT Rules Engine路由到Lambda函数。Lambda函数通过Sagemaker Endpoints调用预测性保护的机器学习模型。当检测到异样,Lambda函数将发送告诉,并通过IoT Shadow对设施进行相应操作。

在本文中,咱们将疏导您实现以下操作:

1.设置连贯的设施与 IoT Core进行通信
2.训练和部署SageMaker模型
3.创立云资源以监督和检测可能呈现行为异样的设施
4.利用模仿设施进行预测性保护测试并发送告诉

{ 试验筹备: IoT 设施模仿 } 

本文采纳Cloud9 作为IoT 设施的模仿,从Cloud9下面收回模仿IoT音讯。

在EC2 控制台,启动一台EC2 实例,搜寻 Marketplace上的Cloud9。

** { 创立 IoT 策略 } 

1.关上 IoT 控制台
https://console.amazonaws.cn/...

2.抉择 Secure (平安)-> Policies (策略)在 You don’t have a policy yet 页面上,抉择 Create a policy。如果您的账户之前曾经创立过策略,请抉择 Create.

3.创立策略页面

-在Name (名称) 中,输出策略的名称Windturbine_Policy

-在Action (操作) 字段中,输出iot:Connect,iot:Receive,iot:Publish,iot:Subscribe。这些是设施在从设施开发工具包运行示例程序时须要执行的权限。无关 IoT 策略的更多信息,请参阅IoT Core 策略。
https://samick-blog.s3.cn-nor...

-在Resource ARN (资源 ARN) 字段中,输出 *。这会抉择任何客户端(设施)。

-选中Allow 复选框

-在输出策略的信息后,抉择Create

{ 创立IoT设施 } 

1.关上 IoT 控制台
https://console.amazonaws.cn/...

2.抉择治理 -> 物品 (Things)You don’t have any things yet (您还没有任何事物) 上,抉择 Register a thing (注册事物)。如果您的账户曾经创立过一些事物,请抉择 Create.

3.在创立 IoT 物品上,抉择创立单个物品

4.Name (名称)字段中,输出物品的名称windturbine。将此页面上的其余字段留空。抉择 Next (下一步).

5.在Add a certificate for your thing (增加事物的证书) 上,抉择 Create certificate

6.在Certificate created! (证书已创立!) 页面上

-下载每个证书和密钥文件并将它们保留以供未来 应用

AmazonRootCA1.pem:https://www.amazontrust.com/r...

-点击Activate激活证书

7.抉择Attach a policy,用于将您在上一部分中创立的策略附加到此证书

8.在 Add a policy for your thing (增加物品的策略) 上,抉择您在上一部分中创立的策略Windturbine_Policy

9.抉择 Register Thing

具体步骤请参考:
https://docs.amazonaws.cn/iot...

 { 创立Amazon SageMaker笔记本实例,训练和部署模型 } 

1.创立一个笔记本实例windturbine,抉择t2.medium。抉择或者创立一个IAM角色(IAM Role)

2.其余局部抉择默认选项,点击创立(Create)

3.在笔记本创立实现后,关上Jupyter Lab,上传笔记本ipynb到Jupyter Lab。抉择内核为conda_python3

4.依照代码中的正文要求,替换应用您本人的 S3 bucket/prefix

5.运行Notebook,进行模型训练和部署

-训练数据曾经蕴含在代码外面,能够间接下载。

-数据荡涤 (删除turbine_id列,依照XGBoost的训练数据格式要求,删除表头并且将最初一列的推理后果breakdown挪到第一列)

-依照7:2:1的比率来拆分训练集,验证集和测试集,并上传到S3

-训练模型

-部署训练好的模型并生成用于推理的 Endpoint,记录好这个值,后续须要在IoT 规定引擎触发的Lambda 函数中应用。

 { 创立Lambda函数及SNS Topic用于推理,设施状态变更以及告诉 } 

1.创立SNS告诉Topic,并应用本人的邮箱地址订阅该Topic,用于接管预测性保护的告诉。

2.创立一个Lambda 函数

-名称:windturbine_prediction

-运行时:Python 3.8

-权限:抉择一个IAM Role 能够应用IoT,SNS 和 SageMaker Endpoint

-内存:128 MB

-超时:30s

3.用lambda_function.py替换Lambda 代码,留神批改下列常量:

#批改成本人的Sagemaker Endpoint NameENDPOINT_NAME = 'xgboost-2021-03-08-10-43-34-693'#批改成本人的SNS TopicSNS_TOPIC_ARN = 'arn:aws-cn:sns:cn-northwest-1:account-id:NotifyMe'#批改成本人的手机号 (海内区SNS发短信)PHONE_NUMBER = '+8613812345678'

{ 创立IoT规定,触发windturbine_ prediction Lambda函数 } 

1.在Amazon IoT 控制台的导航窗格中,抉择 Act (口头).

2.在Rules 页面,抉择 Create

3.抉择Create

-名称:Invoke_windturbine_prediction

-Rule Query statement:

 SELECT * FROM ‘windturbine/xgboost’

-在设置一个或多个操作中,抉择增加操作:发送音讯到Lambda函数 (send a message to a Lambda function)抉择windturbine_ prediction

-(可选),错误操作:发送音讯给CloudWatch logs (Send message data to CloudWatch logs):

windturbine_prediction

-抉择Create rule (创立规定)

 { 端到端测试 }

1.在Cloud9实例上用户的home目录中创立cert文件夹并上传下面第三步下载保留的IoT Things的证书到该文件夹中

2.上传device_simulator.py文件到Cloud9实例上用户的home目录中

3.上传模仿数据device_data.csv文件到Cloud9实例上用户的home目录中

4.依据您的理论配置批改py的代码

# 将host批改为本人AWS账户的IoT Endpointhost = "a1hk0pcc0as07l.ats.iot.cn-north-1.amazonaws.com.cn"#证书门路批改为本人环境下的证书门路rootCAPath = "cert/AmazonRootCA1.pem"certificatePath = "cert/windturbine.cert.pem"privateKeyPath = "cert/windturbine.private.key"

5.运行代码

python device_simulator.py device_data.csv

6.当部署的XGBoost模型端点预测到设施出现异常时,Lambda函数更新IoT设施影子(Shadows)将设施状态设置为Off(敞开状态),边缘IoT设施收到该状态设置标记,将设施进行,如下图所示:

同时Lambda还会触发揭示工作人员进行预测性保护的告诉。如下图所示:

 { 总结 } 

您刚刚实现了如何将 IoT和Amazon SageMaker 一起应用,对一系列设施执行预测性保护的端到端入手试验,并应用Lambda和SNS进行警报监控其状态。咱们心愿本文有助于您了解如何在Amazon Web Services上对IoT设施数据进行无效洞察,并为您的特定用例提供一个良好的终点。

【参考资料】

IoT 控制台:
https://console.amazonaws.cn/...

Jpynb:
https://samick-blog.s3.cn-nor...

lambda_function.py:
https://samick-blog.s3.cn-nor...

Amazon IoT 控制台:
https://console.aws.amazon.co...

device_simulator.py:
https://samick-blog.s3.cn-nor...

device_data.csv:
https://samick-blog.s3.cn-nor...

【本篇作者】


郭松
亚马逊云科技解决方案架构师,负责企业级客户的架构征询及设计优化,同时致力于 Amazon IoT 和存储服务在国内和寰球企业客户的利用和推广。退出亚马逊云科技之前在EMC研发核心负责零碎工程师,对企业级存储利用的高可用架构,计划及性能调优有深入研究。


梁睿
亚马逊云科技解决方案架构师,次要负责企业级客户的上云工作,服务客户涵盖从汽车,传统生产制作,金融,酒店,航空,游览等,善于DevOps畛域。11 年 IT 业余服务教训,历任程序开发,软件架构师、解决方案架构师。