使用 Amazon IoT 和 Amazon SageMaker 进行设备实时预测性维护


物联网(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/iot/home
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-north-1.amazonaws.com.cn/xgboost_model_training_and_deployment.ipynb
-在 Resource ARN (资源 ARN) 字段中,输入 *。这会选择任何客户端(设备)。
-选中 Allow 复选框
-在输入策略的信息后,选择 Create

{ 创建 IoT 设备 }
1.打开 IoT 控制台
https://console.amazonaws.cn/iot/home
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/repository/AmazonRootCA1.pem
-点击 Activate 激活证书
7.选择 Attach a policy,用于将您在上一部分中创建的策略附加到此证书
8.在 Add a policy for your thing (添加物品的策略) 上,选择您在上一部分中创建的策略Windturbine_Policy
。
9.选择 Register Thing
详细步骤请参考:
https://docs.amazonaws.cn/iot/latest/developerguide/create-iot-resources.html
{ 创建 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 代码,注意修改下列常量:
{ 创建 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 的代码
5.运行代码
6.当部署的 XGBoost 模型端点预测到设备出现异常时,Lambda 函数更新 IoT 设备影子(Shadows)将设备状态设置为 Off(关闭状态),边缘 IoT 设备收到该状态设置标志,将设备停止,如下图所示:

同时 Lambda 还会触发提醒工作人员进行预测性维护的通知。如下图所示:

{ 总结 }
您刚刚完成了如何将 IoT 和 Amazon SageMaker 一起使用,对一系列设备执行预测性维护的端到端动手实验,并使用 Lambda 和 SNS 进行警报监控其状态。我们希望本文有助于您理解如何在 Amazon Web Services 上对 IoT 设备数据进行有效洞察,并为您的特定用例提供一个良好的起点。
【参考资料】
IoT 控制台:
https://console.amazonaws.cn/iot/home
Jpynb:
https://samick-blog.s3.cn-north-1.amazonaws.com.cn/xgboost_model_training_and_deployment.ipynb
lambda_function.py:
https://samick-blog.s3.cn-north-1.amazonaws.com.cn/lambda_function.py
Amazon IoT 控制台:
https://console.aws.amazon.com/iot/home
device_simulator.py:
https://samick-blog.s3.cn-north-1.amazonaws.com.cn/device_simulator.py
device_data.csv:
https://samick-blog.s3.cn-north-1.amazonaws.com.cn/device_data.csv
【本篇作者】

郭松
亚马逊云科技解决方案架构师,负责企业级客户的架构咨询及设计优化,同时致力于 Amazon IoT 和存储服务在国内和全球企业客户的应用和推广。加入亚马逊云科技之前在 EMC 研发中心担任系统工程师,对企业级存储应用的高可用架构,方案及性能调优有深入研究。

梁睿
亚马逊云科技解决方案架构师,主要负责企业级客户的上云工作,服务客户涵盖从汽车,传统生产制造,金融,酒店,航空,旅游等,擅长 DevOps 领域。11 年 IT 专业服务经验,历任程序开发,软件架构师、解决方案架构师。

评论