写点什么

物联网中的预测分析:当 IoTDA 遇上 ModelArts

  • 2024-04-09
    广东
  • 本文字数:3570 字

    阅读完需:约 12 分钟

物联网中的预测分析:当IoTDA遇上ModelArts

本文分享自华为云社区《最佳实践:华为云IoTDA结合ModelArts实现预测分析》,作者:华为 IoT 云服务。

场景说明


在物联网解决方案中,针对庞大的数据进行自动学习时,需要对海量数据进行标注、训练,按照传统的方式进行标注、训练不仅耗时耗力,而且对资源消耗也是非常庞大的。华为云物联网平台可以通过规则引擎,将数据转发到华为云其他云服务,可实现将海量数据通过函数工作流(FunctionGraph)进行处理,再将数据流入 AI 开发平台(ModelArts)进行 AI 分析,并将分析结果统一转发至 HTTP 服务器中。


图 1 场景说明



在本示例中,我们实现以下场景:


设备上报银行客户特征信息,物联网平台将数据转发至 FunctionGraph,由 FunctionGraph 转发至 ModelArts 进行 AI 分析,最终将分析的结果转发至 HTTP 服务器中。

整体流程


  1. 创建并发布 ModelArts 模型。

  2. 创建 FunctionGraph 函数。

  3. 构建一个 HTTP 服务器。

  4. 创建 MQTT 协议产品,并创建设备。

  5. 创建流转规则,将数据流转至 FunctionGraph。

  6. 查看 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预测链接. 用来拼装请求URLString forecastServerAddress = context.getUserData(FORECAST_SERVER_ADDRESS);log.log("forecastServerAddress: " + forecastServerAddress);//3.获取ModelArts中的AK/APP_KEYString ak = context.getUserData(ACCESS_KEY);//4.获取ModelArts中的SK/APP_SECRETString 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 环境变量说明



图 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 参数说明



3.单击“设置转发目标”页签,单击“添加”,设置转发目标。


图 15 新建转发目标-转发至 FunctionGraph



参考下表参数说明,填写转发目标。填写完成后单击“确定”。


表 3 参数说明



4.单击“启动”,激活配置好的数据转发规则。


图 16 启动规则-消息上报-转发至 FunctionGraph


模拟数据上报及结果验证


1.使用 MQTT 模拟器连接到平台(模拟器使用请参考:使用MQTT.fx调测)。


2.使用模拟器进行消息上报,详情请参考:设备消息上报


上报内容如下:


{    "age": "34",    "profession": "blue-collar",    "maritalStatus": "single",    "educationalStatus": "tertiary",    "realEstateSituation": "no",    "loanStatus": "tertiary"}
复制代码


3.查看 HTTP 服务器是否收到预测结果。


图 17 查看消息



点击关注,第一时间了解华为云新鲜技术~

发布于: 1 小时前阅读数: 8
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
物联网中的预测分析:当IoTDA遇上ModelArts_物联网_华为云开发者联盟_InfoQ写作社区