物聯網(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 專業服務經驗,歷任程式開發,軟體架構師、解決方案架構師。