物联网中的预测分析:当IoTDA遇上ModelArts
本文分享自华为云社区《最佳实践:华为云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 查看消息

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
KaiwuDB 数据库故障诊断工具详解
数字化时代,数据是企业最宝贵的资产之一。然而,随着数据量的增长,数据库管理的复杂性也在不断上升。数据库故障可能导致业务中断,给公司带来巨大的财务和声誉损失。在本篇博客中,我们将分享 KaiwuDB 是如何设计故障诊断工具以及具体的示例演示 01 设计思路 遵循核心原则 用户友好:即使是具有不同技能水平的用户也能轻松使用我们的工具; 全面监控:全面监控数据库系统的各个方面,包括性能指标、系统资源和查询效率; 智能诊断:利用先进的算法来识别问题的根本原因; 自动化修复:提供一键修复建议,并在可能的情况下,自动应用这些修复; 扩展性:允许用户根据他们特定的需求扩展和定制工具功能。 支持关键指标采集 为确保能够提供全面的诊断,工具将对一系列关键指标进行采集,包括但不限于: 系统配置:数据库版本、操作系统、CPU 架构和数量、内存容量、磁盘类型和容量、挂载点、文件系统类型; 部署情况:是否裸机或容器部署、数据库实例的部署模式和节点数量;数据组织:数据目录的结构、本地与集群配置、系统表和参数; 数据库统计:业务数据库数量、各库下的表数量及表结构; 列特征:数值列和枚举列的统计特征,字符串列的长度和...
- 下一篇
OceanBase 中一个关于 NOT IN 子查询的 SQL 优化案例
通过一个案例了解 not in 对 NULL 值敏感的处理逻辑和优化方法。 作者:胡呈清,爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:[简书 | 轻松的鱼],欢迎讨论。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 3300 字,预计阅读需要 11 分钟。 数据库版本:OceanBase3.2.3.3 问题描述 前段时间碰到一个慢 SQL,NOT IN 子查询被优化器改写成了 NESTED-LOOP ANTI JOIN,但是被驱动表全表扫描无法使用索引,执行耗时 16 秒。SQL 如下: SELECT AGENT_ID, MAX(REL_AGENT_ID) FROM T_LDIM_AGENT_UPREL WHERE AGENT_ID NOT IN (select AGENT_ID from T_LDIM_AGENT_UPREL where valid_flg = '1') group by AGENT_ID; 简略执行计划如下: ===================================================...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群