本文分享自華為雲社群《最佳實踐:華為雲IoTDA結合ModelArts實現預測分析》,作者:華為IoT雲服務。
場景說明
在物聯網解決方案中,針對龐大的資料進行自動學習時,需要對海量資料進行標註、訓練,按照傳統的方式進行標註、訓練不僅耗時耗力,而且對資源消耗也是非常龐大的。華為雲物聯網平臺可以透過規則引擎,將資料轉發到華為雲其他雲服務,可實現將海量資料透過函式工作流(FunctionGraph)進行處理,再將資料流入AI開發平臺(ModelArts)進行AI分析,並將分析結果統一轉發至HTTP伺服器中。
圖1 場景說明
在本示例中,我們實現以下場景:
裝置上報銀行客戶特徵資訊,物聯網平臺將資料轉發至FunctionGraph,由FunctionGraph轉發至ModelArts進行AI分析,最終將分析的結果轉發至HTTP伺服器中。
整體流程
- 建立併發布ModelArts模型。
- 建立FunctionGraph函式。
- 構建一個HTTP伺服器。
- 建立MQTT協議產品,並建立裝置。
- 建立流轉規則,將資料流轉至FunctionGraph。
- 檢視HTTP伺服器是否收到AI分析後的訊息。
前提條件
- 已註冊華為官方帳號。未註冊可參考註冊華為賬戶完成註冊。
- 已完成實名制認證。未完成可在華為雲上單擊實名認證完成認證,否則會影響後續雲服務的開通。
- 已開通裝置接入服務。未開通則訪問裝置接入服務,單擊“免費試用”或單擊“價格計算器”購買並開通該服務。
- 已開通FunctionGraph服務。未開通則訪問FunctionGraph服務,單擊“立即使用”後開通該服務。
- 已開通ModelArts服務。未開通則訪問AI開發平臺,單擊“控制檯”後進入該服務。
- 自建一個HTTP伺服器,並提供POST介面用來接收推送的資料(本示例預設已經提供好相應的伺服器與介面,不再展示如何搭建HTTP伺服器指導)。
配置ModelArts模型
1.下載ModelArts-Lab工程,在\ModelArts-Lab-master\official_examples\Using_ModelArts_to_Create_a_Bank_Marketing_Application\data”目錄下獲取訓練資料檔案“train.csv”。該訓練資料主要展示銀行中的一種常見業務:根據客戶特徵(年齡、工作型別、婚姻狀況、文化程度、是否有房貸和是否有個人貸款),預測客戶是否願意辦理定期存款業務。
2.可將訓練資料存放在OBS中,供建立資料集使用。進入OBS控制檯,選則一個桶,然後單擊“上傳物件”。若沒有桶,可以單擊右上角“建立桶”建立一個新的桶。
圖2 上傳訓練資料
3.登入華為雲官方網站,訪問AI開發平臺,單擊“控制檯”,進入ModelArts服務。
4.選擇左側導航欄“自動學習>前往新版>建立專案”,進入建立預測分析介面。
圖3 預測分析
5.選擇資料集、標籤列(資料中預測結果的列,本示例中為str7),若沒有資料集,可以單擊“建立資料集”進行建立。
圖4 建立預測分析
圖5 建立資料集
6.當執行到服務部署時,選擇資源池、AI應用及版本,單擊“繼續執行”。
圖6 服務部署
7.等部署完成之後,選擇左側導航欄“部署上線 > 線上服務”,進入線上服務頁面中選擇部署的服務, 單擊“修改”,進入修改服務頁面,開啟APP認證進行授權配置,完成後單擊“下一步”並提交。
圖7 授權
8.單擊“部署上線>線上服務”,點選進入已部署的服務,選擇“預測”,複製以下資料到預測程式碼中後,單擊“預測”後可檢視返回結果,結果中的predict為no則表示使用者不會辦理存款。
{ "data": { "count": 1, "req_data": [ { "str1": "34", "str2": "blue-collar", "str3": "single", "str4": "tertiary", "str5": "no", "str6": "no" } ] } }
圖8 預測
9.更多詳細關於Modelarts的說明可以參考ModelArts相關文件。
配置FunctionGraph函式
1.參考資料轉發至FunctionGraph函式工作流進行函式工作流配置。本示例中由於需要使用ModelArts相關配置引數,可按照如下方式,在程式碼中新增配置項並訪問ModelArts預測介面,body體結構參考8。
//2.獲取ModelArts預測連結. 用來拼裝請求URL String forecastServerAddress = context.getUserData(FORECAST_SERVER_ADDRESS); log.log("forecastServerAddress: " + forecastServerAddress); //3.獲取ModelArts中的AK/APP_KEY String ak = context.getUserData(ACCESS_KEY); //4.獲取ModelArts中的SK/APP_SECRET String sk = context.getUserData(ACCESS_SECRET); Request request = new Request(); request.setUrl(forecastServerAddress); request.setMethod(HttpMethodName.POST.name()); request.setAppKey(ak); request.setAppSecrect(sk); request.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); request.setBody(body); Signer signer = new Signer(); signer.sign(request); Map<String, String> headers = request.getHeaders(); HttpPost httpPost = new HttpPost(url); headers.forEach(httpPost::setHeader); httpPost.setEntity(new StringEntity(body, ContentType.APPLICATION_JSON)); CloseableHttpResponse response = null; try { response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String content = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); IoTDAModelArtsDemo.log.log("response content is: + " + content); return content; } String errContent = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); IoTDAModelArtsDemo.log.log("response err content is: + " + errContent); return errContent; } finally { if (response != null) { response.close(); } }
2.在函式工作流中,單擊“設定>環境變數”,環境變數資訊如下。
表1 環境變數說明 | |
---|---|
環境變數 |
說明 |
FORECAST_SERVER_ADDRESS |
訪問ModelArts服務,單擊“部署上線>線上服務”,進入部署服務後單擊“呼叫指南”,選擇支援App認證方式的API介面公網地址。 |
ACCESS_KEY |
同上,選擇AppKey。 |
ACCESS_SECRET |
同上,選擇AppSecret。 |
NA_MOCK_SERVER_ADDRESS |
將預測結果推送至伺服器的地址(本示例不再提供HTTP伺服器搭建指導)。 |
圖9 設定環境變數
圖10 檢視預測介面資訊
3.單擊“程式碼>配置測試事件>建立新的測試事件>空白模板”。內容示例如下:
{ "resource": "device.message", "event": "report", "event_time": "20231227T082702Z", "event_time_ms": "2023-12-27T08:27:02.944Z", "request_id": "1d041aa3-29b8-43d3-aae3-3905de130537", "notify_data": { "header": { "app_id": "dc12bf47e95c4723a00f4a007073fc7e", "device_id": "658bdb475d3bc3372c99feb9_12345484121", "node_id": "12345484121", "product_id": "658bdb475d3bc3372c99feb9", "gateway_id": "658bdb475d3bc3372c99feb9_12345484121" }, "body": { "topic": "$oc/devices/658bdb475d3bc3372c99feb9_12345484121/sys/messages/up", "content": { "age": "34", "profession": "blue-collar", "maritalStatus": "single", "educationalStatus": "tertiary", "realEstateSituation": "no", "loanStatus": "tertiary" } } } }
圖11 配置測試事件
4.配置完測試事件後,單擊“測試”,執行結果返回success(以實際函式返回結果為準),則表示成功。配置的HTTP伺服器則能收到對應的預測結果。
圖12 預測結果
建立產品和裝置
1.訪問裝置接入服務,單擊“管理控制檯”進入裝置接入控制檯。
2.選擇左側導航欄的“產品”,單擊“建立產品”,建立一個基於MQTT協議的產品,填寫引數後,單擊“確定”。
圖13 建立產品-MQTT
3.匯入產品模型,請參考匯入產品模型。
在該產品下注冊裝置,請參考註冊單個裝置。
說明:本文中使用的產品模型和裝置僅為示例,您可以使用自己的產品模型和裝置進行操作。
資料轉發規則配置
1.選擇左側導航欄的“規則>資料轉發”,單擊“建立規則”。
2.參考下表引數說明,填寫規則內容。以下引數取值僅為示例,您可參考使用者指南建立自己的規則,填寫完成後單擊“建立規則”。
圖14 新建訊息上報流轉規則-資料轉發至FunctionGraph
表2 引數說明 | |
---|---|
引數名 |
引數說明 |
規則名稱 |
自定義,如iotda-functiongraph。 |
規則描述 |
自定義,如資料轉發至FunctionGraph服務。 |
資料來源 |
選擇“裝置訊息”。 |
觸發事件 |
自動匹配“裝置訊息上報”。 |
資源空間 |
和上一步建立的產品所在的資源空間保持一致。 |
資料過濾語句 |
透過編寫SQL來解析和處理上報的JSON資料。 |
3.單擊“設定轉發目標”頁籤,單擊“新增”,設定轉發目標。
圖15 新建轉發目標-轉發至FunctionGraph
參考下表引數說明,填寫轉發目標。填寫完成後單擊“確定”。
表3 引數說明 | |
---|---|
引數名 |
引數說明 |
轉發目標 |
選擇“函式工作流(FunctionGraph)” |
區域 |
選擇“函式工作流”區域。 |
目標函式 |
選擇已配置的函式工作流。 |
4.單擊“啟動”,啟用配置好的資料轉發規則。
圖16 啟動規則-訊息上報-轉發至FunctionGraph
模擬資料上報及結果驗證
1.使用MQTT模擬器連線到平臺(模擬器使用請參考:使用MQTT.fx調測)。
2.使用模擬器進行訊息上報,詳情請參考:裝置訊息上報。
上報內容如下:
{ "age": "34", "profession": "blue-collar", "maritalStatus": "single", "educationalStatus": "tertiary", "realEstateSituation": "no", "loanStatus": "tertiary" }
3.檢視HTTP伺服器是否收到預測結果。
圖17 檢視訊息
點選關注,第一時間瞭解華為雲新鮮技術~