物联网(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 Name
ENDPOINT_NAME = 'xgboost-2021-03-08-10-43-34-693'
#批改成本人的 SNS Topic
SNS_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 Endpoint
host = "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 业余服务教训,历任程序开发,软件架构师、解决方案架构师。