-
背景DWS为多CN架构,建议在CN之上假设负载均衡组件。作用:将前端负载均匀分布到各个CN上,避免单个CN成为整个集群的瓶颈。配合CN自动剔除,可以支持单个CN故障后,不向故障CN发送任务,将CN故障对业务的影响降到最低。注意事项DWS搭配负载均衡组件时,负载均衡组件使用DR模式,客户端连接服务器时,首先会访问负载均衡服务器,负载均衡服务器将连接按照一定的算法(如轮询算法)分发到各个数据库服务器上(CN),数据返回时,不经过负载均衡服务器,直接返回到客户端。因此,如果客户端的访问请求流量较大,可能会将负载均衡服务器流量打满,而结果返回时,由于是直接返回客户端,不经过负载均衡服务器。DWS客户端访问可能导致流量大的操作场景主要是copy from、copy from任务。copy from、copy from命令用于将本地文件或数据流高效拷贝到数据库表中,因此会存在大量数据从客户端传送到服务端,如果配置了负载均衡服务器,数据会经过负载均衡服务器,当copy from、copy from任务要拷贝的文件较大、并发较高,超出了负载均衡服务器可承载的流量后,会导致负载均衡服务器成为瓶颈。因此,建议大流量的copy、copy任务直接连接固定CN IP执行。在此CN出现异常后,需要业务修改连接字符串中CN IP,将业务切换到其他CN执行。使用copy from、copy from的场景主要有:1.使用gsql客户端,调用copy from、 copy from命令向服务端传送数据。其中copy from命令只能在CN所在节点执行,copy from命令可以远程执行。示例如下:COPY tpcds.ship_mode_t1 FROM "/home/omm/ds_ship_mode.dat" WITH(format "text", delimiter E" ", ignore_extra_data "true", noescaping "true"); 2.使用jdbc copy manager接口,或使用封装了jdbc copy manager接口的工具,向服务端传送数据。copy manager接口如下:CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream); 3.sql on oracle, sql on other gaussdb, sql on spark这些也都是走CN和负载均衡的。若使用F5做负载均衡,请关注以上场景
-
知天下,行万里丨今日热点行业资讯荟萃。华为云连续5年领跑政务云近日,全球权威IT市场研究和咨询公司IDC发布《中国智慧城市数据跟踪报告》(2022年7月),华为云连续5年保持中国政务云基础设施市场份额第一。其中,华为云在政务专属云基础设施市场占有率27.1%,排名第一,华为云在政务云公有云基础设施市场份额持续攀升。华为云从2012年开始深耕政务云市场,至今,累计服务了超过700个政务云项目,未来,华为云将继续乘风破浪,持续创新,携手客户、合作伙伴和开发者,抓住“深耕数字化、一切皆服务”的机遇,让云无处不在,让智能无所不及,共建智能世界云底座。 华为云参与教育部“数据科学课程群虚拟教研室”启动工作会议近日,教育部“数据科学课程群虚拟教研室启动会议暨课程建设工作会议”在银川召开。会议以“数据科学课程群”课程建设为主题,就“数据科学课程群”虚拟教研室构建、数据科学人才培养方案、核心课程建设、优质教材建设、推进利用华为云培养数据科学人才、推进国产数据管理系统软件的高校教学工作等内容,进行了研讨和交流。 华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款8月8日,深圳燃猫工作室(以下简称燃猫工作室)第一款产品《流浪方舟》上线一个月。华为云与华为终端云服务全流程护航,助力打造口碑爆款!《流浪方舟》是一款末日废土风格的弹射策略手游,核心玩法是模拟物理碰撞,像一台超现实桌球,玩家操控英雄(球)冲撞敌人造成伤害。该游戏于7月8日上线,上线当天即冲上免费榜第一名,上线首日流水破1000万,首周流水突破3000万大关,引起了业界广泛关注。华为云从5月中旬开始驻场,为《流浪方舟》的上线提供了从服务检测、压力测试到安全防护及重保等护航服务,全流程助其平稳上线,对业内其他新游戏的上线具有可参考、可复制的重大意义。 医疗器械网络安全和云计算研讨会在中国信通院召开近日,医疗器械网络安全和云计算研讨会在中国信息通信研究院成功召开。近年来,医疗器械网络安全问题愈发凸显,同时医疗器械使用云计算服务日益普遍也引发新的风险。医疗器械网络安全保障能力和云计算服务能力事关人民群众生命健康,也是国家网络安全的重要组成部分。中国信通院作为国家药监局智能化医疗器械研究与评价重点实验室的依托单位,将在行业主管部门的指导下,持续推进医疗器械网络安全和云计算服务的研究与评测工作,并面向医疗器械全产业开展网络安全动态监测,全面提升网络安全防护能力。(来源:网易科技) 云商店KooGallery热门动态CAXA PLM云商店登榜,为制造企业数字化转型“保驾护航”在数字化时代,各行各业都被重新定义,新兴行业崭露头角,“降维打击”在商业竞争中无处不在,传统行业面临着全新的挑战。如何抓住数字化时代的红利和机遇并应对随之而来的焦虑,是企业亟待思考的问题。现阶段制造企业面临着时代的巨大挑战, “改变的市场”“变化的价值链”都在催促企业尽快提升核心竞争力。而这,正是数字化转型的目标。数码大方PLM则以华为云为底座,面向智能制造业提供一系列产品化应用模块,包括项目管理、PDM产品数据管理、BOM材料清单管理、CAPP工艺管理、以及与制造系统比如ERP、MES的集成。全面支撑企业的开发决策、产品设计、工艺设计到生产制造等主要业务场景。>>>点击阅读原文全文
-
-
多用户移动边缘计算迁移的能量管理研究王璐瑶, 张文倩, 张光林东华大学信息科学与技术学院,上海 201620摘要在移动边缘计算系统中,通过将计算任务从移动设备迁移到移动边缘计算服务器,可以大幅度提高计算质量。考虑将可再生能源纳入多用户移动边缘计算系统中,并在模型中加入电池作为能量收集装置以实现能量收集和存储。通过提出的基于强化学习的资源管理算法制定了移动边缘计算系统中的任务分配策略,实现了移动设备成本最优化(包括时延成本和能耗成本)。仿真结果表明,与其他算法相比,该算法显著减少了移动设备的成本。关键词: 能量收集 ; 可再生能源 ; 移动边缘计算 ; 成本优化 ; 强化学习1 引言1.1 背景介绍近年来,移动设备(如智能手机、笔记本电脑等)成为人们学习、娱乐和社交的重要工具。由于移动设备的资源限制(处理能力、电池使用寿命和存储容量等),单纯的移动设备已不能给予用户较好的使用体验。移动设备通过云计算可以快速访问集中式可配置计算资源池,并将所有分布式数据和计算密集型应用程序转移到位于远程大型数据中心的云。由于数据必须在移动设备和云数据中心之间进行传输和接收,导致网络负载过高以及网络带宽需求不断增长。这不仅对当今已经拥塞的骨干网造成沉重负担,还会导致传输时延较大,从而降低服务质量[1,2,3]。由此,移动边缘计算(MEC,mobile edge computing)[1,2,3]应运而生,它可以直接在网络边缘处理某些工作负载,不需要将其迁移到云端再进行处理。在 MEC 系统中,如基站、接入点和路由器等网络边缘设备被赋予类似云的计算和存储能力,作为云的替代物为用户服务。同时,由于其被放置在靠近移动设备终端和数据源位置,因此可以显著减少传输时延。能量收集装置可以从外界收集可再生能源,如太阳辐射、无线电信号和风能等,逐渐成为绿色通信系统的重要组成部分。考虑电网产生的碳足迹以及不断上涨的电价等因素,通过风能或太阳辐射收集的可再生能源被视为急待利用的新兴绿色能源。尽管在边缘处理计算任务的行为减少了移动设备端的能耗,但是将任务从移动设备迁移至边缘设备会产生一定的时延成本。通过制定合理的移动设备迁移策略(即将多少计算任务分配给边缘设备处理),以优化移动设备的时延成本和能耗成本。1.2 相关研究MEC 近年来受到越来越多的关注,其概念在2014 年被提出。MEC 作为一个新平台,为靠近移动用户的无线接入网络提供 IT 服务环境和云计算功能[4]。雾计算[5]与MEC相关,两者的应用领域重叠,术语也经常互换。与移动云计算相比,MEC的优势包括时延低、节约能源以及安全性高等[3]。MEC服务器是小型数据中心,与传统的云量级数据中心相比,能耗大幅度降低[6]。随着 MEC 服务器的广泛部署,系统的能源消耗成为人们关注的焦点[7],因此,实现绿色 MEC 的创新技术是必要的。可再生能源(如太阳能和风能)最近成为各种IT 系统中有前途的电力来源[8,9],与燃煤电厂产生的传统电网能源相比,可再生能源显著减少了碳排放量。对于具有能量收集功能的移动设备,文献[10]提出基于 Lyapunov 优化算法[11]的动态计算浮动策略。此外,MEC系统的任务迁移策略近年来引起业界的广泛关注[10,12,13,14,15,16,17,18]。对于具有严格截止时间要求的应用,采用动态电压和频率调整(DVFS,dynamic voltage and frequency scaling)技术将本地的执行能耗降至最低,并且使用文献[12]的数据传输调度优化了闪存计算的能耗。文献[13]提出了用于飞秒计算系统的通信和计算资源的联合分配,其中,每个计算任务应在截止日期前完成。在文献[10]中,为了满足具有能量收集功能的 MEC 系统严格执行时延的要求,开发了动态计算的浮动政策。文献[14]提出了分散计算的冲击算法,以最大限度减少多用户MEC系统的计算开销。为了减少长期平均能耗,文献[15]提出了随机控制算法,该算法可以确定软件组件对MEC系统的影响。在文献[16]中,针对单用户MEC系统开发了用时延最优的随机任务调度算法。文献[17]提出了用在线任务调度算法来研究具有多核移动设备MEC系统的能耗与时延的折中,该研究被扩展到具有不同类型的移动应用场景[18]中。上述部分文献关注了单用户 MEC 系统,部分文献采用离线算法。考虑了多用户的 MEC 系统,并将可再生能源纳入多用户MEC系统中,通过强化学习在线算法来研究多用户MEC迁移的能量管理。1.3 本文研究内容本文考虑具有多个移动设备的通用MEC系统,其中,计算任务以随机方式到达移动设备。主要研究怎样合理进行任务分配以达到移动设备端成本最低的目标,并实现将可再生能源纳入多用户MEC系统中。在此基础上,提出了基于强化学习的资源管理算法,实现了移动设备成本最优化(包括时延成本和能耗成本)。本文的主要贡献如下。1) 将待解决问题转化为马尔可夫决策过程(MDP,Markov decision processes)问题,通过强化学习方法推导Q-learning策略[19],在时变和未知环境中实现了实时的移动设备成本最优化。2) 本文设计的奖赏函数不仅反映了实时的移动设备成本最优化,还包含历史信息。与直接的即时奖赏函数相比,本文设计的奖赏函数可以显著提高系统学习效率。3) 通过仿真,将强化学习算法与短视优化算法和静态迁移算法进行比较,证明本文所提的强化学习算法消耗的成本更低。2 结束语针对多用户 MEC 系统中移动设备成本的最小化问题,提出了基于强化学习的资源管理算法,制定了成本最优化情况下移动设备的任务分配策略,并将可再生能源纳入多用户移动边缘系统中,实现了移动设备成本最优化(包括时延成本和能耗成本)。由于本文的问题是顺序型决策问题,因此可以使用MDP问题解决。在设计MDP问题四要素之一的奖赏函数时,通过引入移动平均成本概念,不仅可以利用过去的成本信息,还可以适应当前的成本变化,同时也减轻了成本的非平稳性。相比于很久之前的成本,更看重现在的成本。本文将可再生能源纳入多用户移动边缘系统中,由可再生能源供电的无线通信系统利用蓄电池实现能量收集和存储,并提供能量用于用户数据传输和处理。因此在所提模型中添加电池作为能量收集装置,以实现能量收集和存储。在可再生能源短缺的情况下,移动设备可以由备用电源供电,在电网成本极高甚至电网尚未普及的偏远地区,此方法更实用。如果移动设备可以便捷地连接电网,并且通过从电网购买电力方式获得电能,那么本文所提算法同样适用。在此情况下,模型中购买电网电力的支付成本将取代由于激活备用电源而产生的成本。因此,本文所提算法既可以用于搭建电网的地区,也可以用于电网普及率不高的偏远地区,在实际生活中应用前景较广泛。此外,通过使用可再生能源,在减少环境污染的同时,还可以满足用户需求,保持数据传输与处理稳定性。本文所提算法仍存在很多不足,在后续研究中可以设计较完善的系统模型,结合实际情况考虑移动用户、不同处理速率、无线信道在不同时刻的数据传输效率以及多个移动设备传输任务的优先级。针对以上实际情况,本文所提算法还有待改善。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2019/2096-3750/2096-3750-3-1-00073.shtml
-
【功能模块】小熊派智慧农业案例设备不能激活【操作步骤&问题现象】经AT 指令测试,NB卡正常,但没有附着网络,没有网络信号,卡是小熊派自带的(不超过一年),如何联系售后或运营商?【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
Tips① 此文档详细介绍了MindSpore GPU异构算子开发流程,与官方文档相比本文档更加侧重于开发文件的解读以及常用开发方法的讲解。同时本文档用词相对简单,主要帮助大家了解GPU算子开发需要写什么,各种文件的作用是什么以及应该怎么写这些文件,而官方文档中则更偏向于基础概念和框架的介绍,建议大家将两个文档结合起来阅读,这样更能够加深理解。② 本文篇幅较长,如果有自己熟悉的内容可以直接跳过,但是建议大家能够仔细阅读第三章,充分了解GPU算子需要开发哪些文件、每个开发文件的作用以及常用的方法,这样可以更快的入门,开始开发算子。③ MindSpore GPU异构算子调用流程如下④ 此文档也有网页版:https://bbs.huaweicloud.com/blogs/364623,大家愿意的话可以支持一下,刷一刷阅读量。⑤ 本文主要为前期准备和开发流程,附加了两个关于接口文档测试的内容,后续进入测试阶段我也会写一个GPU算子测试指导。⑥ 如有遗漏或错误,欢迎指出与修改。常用网址① GPU 算子全流程开发指导录屏 ② BartlettWindow 算子 PR ③ MindSpore 算子 Issue 查询网址 ④ MindSpore 官方安装网址 ⑤ MindSpore 官方算子查询网址 ⑥ 谭升 -GPU 编程一、 环境配置1. 连接服务器(1) ssh跳转连接使用服务器链接软件在同一个连接会话中,依次连续输入以下命令:① 跳转服务器1:ssh jump@xxx.xxx.xxx.xxx passwd: xxxxxxxx② 跳转服务器2:ssh test@xxx.xxx.xxx.xxx passwd: xxxxxxxx③ GPU算子服务器:ssh user14@xxx.xxx.xxx.xxx -p xxxx pwd:xxxxxxxx输入ls,到达此界面即为连接成功!(2) VPN连接方法① 点击右下角网络(WiFi那个标识),点击网络和Internet设置。② 点击VPN,添加VPN(我已经设置过一个,请忽略)。③ 设置GPU算子开发网络连接,输入如下用户名和密码,点击保存。VPN信息:服务器地址:xxx.xxx.xxx.xxx用户名:xxxxxxxx密码:xxxxxxxx④ 打开控制面板-网络连接,并选择刚创建的vpn右键属性⑤ 选择网络-IPV4-属性-高级,取消勾选“在远程网络上使用默认网关”⑥ 选择安全,选择允许使用这些协议,点击确定⑦ 连接VPN后直接连接服务器ssh user14@xxx.xxx.xxx.xxx -p xxx pwd:xxxxxxxx输入ls,到达此界面即为连接成功!2. 下载mindspore包(1) 注册gitee账号在官网注册自己的gitee账号用于后续加入团队开发仓库和提交代码。https://gitee.com (2) 加入Owner仓库创建好gitee账户后联系团队owner,让他在自己的账户上邀请团队成员成为仓库开发者,这样成员的账号才有权限往owner仓库直接提交代码。将邀请链接或二维码发送给团队成员邀请其加入仓库:成员接收邀请后,owner可以在私信栏找到成员的申请,进入后点击同意即可。(3) 创建分支成员加入团队后登录自己的账号可以看到owner的主仓,点击进入点击分支点击新建分支,输入自己想取的分支名(一个算子使用一个单独的分支名):创建完成后回到owner的mindspore仓库,可以查询到自己的分支:(4) 下载mindspore连接服务器后创建自己的文件夹:mkdier wzb_SSSqG激活公共环境ci3.7source /home/Public/env.sh创建个人conda环境conda create -n wzb_SSSqG --clone ci3.7复制测试环境脚本cp /home/Public/env.sh wzb_SSSqG/cd wzb_SSSqG/sed -i 's/ci3.7/wzb_SSSqG/g' env.sh每次登陆后都需要执行以下脚本,开启测试环境source env.sh下载团队owner的mindspore仓库git clone https://gitee.com/EJaven/mindspore.git 进入mindspore文件夹,切换到自己创建的分支cd mindsporegit checkout SSSqG二、 开发流程本章将大致介绍本次GPU异构算子开发的整体流程,并对需要开发的文件进行简要介绍。大家最好能够先详细阅读一遍华为官方GPU算子开发指南,了解一些基本概念后结合此文档进行学习和理解。华为 GPU 算子开发指南 1. MindSpore GPU异构算子调用流程2. 开发文件清单依据以上GPU异构算子调用流程,我们可以总结本次GPU异构算子开发所需开发文件以及文件功能如下:算子Python侧前端定义文件正向单算子:mindspore/python/mindspore/ops/operations/yyy_ops.py(yyy为算子所属类别:[array、math、other、random、sparse]等)反向单算子:mindspore/python/mindspore/ops/operations/_grad_ops.py功能描述:编写算子Python侧前端接口,包括算子声明、校验可写性、注册算子属性算子C++侧前端推理文件正向单算子:mindspore/core/ops/xxx.hmindspore/core/ops/xxx.cc反向单算子:mindspore/core/ops/grad/xxx_grad.hmindspore/core/ops/grad/xxx_grad.cc(xxx为算子名)算子PrimitivePtr定义:mindspore/core/ops/core_ops.h算子infer推理实际值注册:mindspore/core/abstract/ops/primitive_infer_map.cc功能描述:编写算子C++侧前端接口以及推理函数,包括算子类声明、输入shape/type校验、输出shape/type的infer推理算子C++侧后端适配文件正向单算子:mindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_gpu_kernel.hmindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_gpu_kernel.cc反向单算子:mindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_grad_gpu_kernel.hmindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_grad_gpu_kernel.cc(yyy为算子所属类别:[array、math、other、random、sparse], xxx为算子名)功能描述:编写算子C++侧后端接口以及适配函数,包括算子注册、初始化参数校验、内存计算、调用cuda核函数、数据类型注册算子cuda核函数开发正向单算子:mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_impl.cuhmindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_impl.cumindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_class/xxx_helper.h反向单算子:mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_grad_impl.cuhmindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_grad_impl.cumindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_class/xxx_grad_helper.h(xxx_helper.h和xxx_grad_helper.h文件为可选文件,如果算子逻辑复杂就写,不复杂可以不用写)功能描述:编写算子cuda核函数,包括核函数模板声明、函数模板定义、函数模板实例化、实现多线程核函数算子Python反向实现文件正向单算子:mindspore/python/mindspore/ops/_grad_experimental/grad_yyy_ops.py(yyy为算子所属类别:[array、math、other、random、sparse]等)反向单算子:反向算子一般无反向,所以不用写功能描述:编写算子反向实现函数,包括算子反向注册、实现算子反向逻辑算子ST测试文件正向单算子:tests/st/ops/gpu/test_xxx_op.py反向单算子:tests/st/ops/gpu/test_xxx_grad_op.py(xxx为算子名,反向单算子视作正向单算子来测试)功能描述:测试算子在PYNATIVE_MODE和GRAPH_MODE两种模式下的功能和精度是否符合标准3. 算子分类介绍(1) 正向单算子平常大家使用的基本上都是正向算子,比如pow算子、mean算子、max算子等等,这些算子的功能就是其数学推导,也即正向计算过程。(2) 正向算子的反向实现正向单算子的反向实现逻辑,往往只需要在mindspore/python/mindspore/ops/_grad_experimental/grad_yyy_ops.py文件中使用反向单算子或其他一些正向单算子的组合来实现求算子反向的逻辑即可。反向单算子样例:正向算子组合样例:(3) 反向单算子反向单算子实际上就是把正向单算子求反向的逻辑单独封装成一个算子,这样在实现“正向单算子的反向实现时”就可以直接调用这个算子的反向单算子。在测试的时候反向单算子可以按照正向单算子的方式来调用算子进行输出的校验,但是在确保没问题之后,正常情况下必须通过mindspore的自动求导来隐式调用反向单算子,不可显示调用。(4) 动态shape算子动态shape算子指的是算子输出y的shape会依据输入x的数值的变化而变化,比如BartlettWindow算子需要实现BartlettWindow函数:该算子其中一个输入为window_length,公式中表示为N,即输出y的元素个数。这时,我们输出y的shape = [N],即输入window_length发生变化时,输出y的shape会随之变化,这种算子就称为动态shape算子。一定要注意是输出y的shape会依据输入x的“数值”的变化而变化,如果是输入x的shape变化导致输出y的shape变化,这种不算动态shape算子。(5) 支持动态shape测试大家依据第(4)条判断完自己的算子是否为动态shape算子之后,无论结果,GPU异构算子验收时要求所有算子支持“动态shape输入”测试,动态shape输入和动态shape算子不是一个概念,实际上动态shape输入就是对原先静态的输入添加一步gather,只需要参照模板编写测试用例和网络即可,动态shape输入和普通静态输入差别如下:三、 算子开发阅读完第二章,大家应该已经了解本次GPU异构算子的调用流程以及需要开发的文件,即已经知道这个项目是要做什么。因此本章将依据第二章中罗列的需要开发的文件进行逐一讲解,主要介绍每个需要开发的文件中需要写哪些方法,这些方法的作用是什么。另外本章仅讲解正向单算子的开发过程,反向单算子的开发过程实际上一样的,仅仅是把原先正向单算子的输出y以及其对应的梯度dy也作为输入来依据逻辑进行计算罢了。为了便于理解,我将以之前开发过的一个BartlettWindow算子为例,分析该算子中各个文件中编写的代码的含义,但为了保证阅读的连贯性和排版的美观。我不会在本章节直接放出该算子的代码截图,而是将该算子的详细解析放在附录中并以超链接的方式链接到文中。除此之外大家还可以直接前往BartlettWindow算子的PR:https://gitee.com/mindspore/mindspore/pulls/35601 查看全部完整代码。1. 算子Python侧前端定义(1) mindspore/python/mindspore/ops/operations/yyy_ops.py文件名中的yyy代表算子所属类型[array、math、other、random、sparse],此文件功能为编写算子python侧前端接口,之后我们调用算子的时候实际上就是从这个地方开始执行的。其主要需要编写的内容和方法如下:① 算子接口注释编写关于算子的描述,包括:功能、数学表达式、参数、输入、输出、异常处理、支持的平台和算子样例等信息。这一部分很容易出现遗漏,同时还需要注意异常处理的报错信息要清晰明确,要让测试人员读得懂,不能模棱两可,否则很大概率会被直接打回。算子接口注释编写完之后需要按照如何做 doctest 和如何做接口网页自验证 进行注释文档的校验以及接口网页的自验证,以确保所写注释是正确并且符合规范的。BartlettWindow 算子接口注释 BartlettWindow 算子接口网页 ② Init()函数编写算子的初始化函数,主要进行算子参数的校验,包括属性类型的校验、输入类型的校验、数据类型的校验等。常见方法及其作用如下:• self.add_prim_attr("xxx", 1000)给算子添加一个属性xxx,其数值为1000• validator.check_value_type("xxx", xxx, [a,b,c], self.name):检验xxx参数的类型是否为a,b,c,如果都不是则报错。• validator.check_type_name("xxx", xxx, [float16,float32] self.name)检验xxx参数的数据类型是否为float16,float32,如果都不是则报错其他还有很多检验的方法,这些方法的命名都非常的清晰,大家看一下方法名就能大概猜出来它的作用,所以如果大家有想要校验的参数可以在库里现有的代码中搜一下用法。BartlettWindow 算子 接口 i nit() 函数 ③ 推理函数现有MindSpore算子库中的部分算子同时有Python侧与C++侧的推理函数,包括InferType()和InferShape()。为了更好地性能以及其他一些功能上的需求,默认优先加载C++层的推理函数。我们只需要定义C++侧的推理函数即可。因此如见到Python侧的推理函数,包括infer_dtype(), infer_shape(), infer()等函数时请直接忽略。2. 算子C++侧前端推理(1) mindspore/core/ops/xxx.h此文件用于声明C++侧算子类、前端接口函数以及用于输入shape/type校验以及输出shape/type推理的infer函数,另外如果后续需要用到算子的某个属性值则需要增加该属性的set和get函数。此文件开发难度不大,参照一下模板和库中其他算子写就行了:BartlettWindow 算子 bartlett_window.h 文件 (2) mindspore/core/ops/xxx.cc此文件用于实现xxx.h文件中声明的接口函数、输入type校验和输出type推导的infertype函数、输入shape校验和输出shape推导的infershape函数和属性相关的初始化、set和get函数。① MyOpsInferType函数校验输入的type(是否为tuple、tensor等等)、dtype(是否为float32、int32等等)以及存在约束关系的变量数据类型是否相同,并最终推理出输出的dtype,编码模板如下:图例外的其余校验请自行查找相应函数的用法。② MyOpsInferShape函数校验输入的shape是否满足要求(维度要求,大小要求)、存在约束关系的变量之间shape是否满足要求(相等、更大、更小),并最终推理出输出的shape,编码模板如下:Infershape部分代码需要开发者针对自己的算子进行完整仔细的分析,考虑到每个参数自身shape的限制,更要考虑到不同参数之间的相互约束,最后需要通过逻辑推理计算出输出的shape值。③ 属性init()、set()、get()函数如果在之后的后端适配和核函数实现部分需要用到算子的某些属性数值的话就需要在此处编写这三个函数,用来给该属性初始化,赋值和取值,以MyOps的属性myattr为例,代码模板如下:大家在编写完编译的时候,可能会发现自己的kMyAttr这个变量没有声明,此时我们只需要在mindspore/core/ops/op_name.h文件中新增一个kMyAttr变量的声明即可,代码模板如下:④ MyOpsInfer函数此函数为整个InferShape和InferType的组合函数,作用为判断空值、调用InferShape和InferType函数,写法也相对固定,代码模板如下:⑤ 宏定义 此处代码形式完全固定,调用MIND_API_BASE_IMPL用于注册算子继承关系,REGISTER_PRIMITI VE_EVAL_IMPL 用于注册算子推理函数,依据以下代码模板编写即可:BartlettWindow 算子 bartlett_window.cc 文件 (3) mindspore/core/ops/core_ops.h此文件用于添加算子PrimitivePtr定义,对算子进行注册,使得算子可以调用C++侧接口,此处代码形式也是固定的,参考以下模板即可:BartlettWindow 算子 core_ops.h 文件 (4) mindspore/core/abstract/ops/primitive_infer_map.cc首先我们需要了解如下信息:这一块简单来说就是我们的算子在动态shape测试时会调用两次infershape函数,而第一次调用的时候处于图编译状态,此时输出的shape无法确定,并且输入参数BuildValue得到的是AnyValue,无法获取真实值,而第二次调用的时候是出于运行时,这时可以获取到输入参数的真实数值。而想要获取到输入参数的真实数值,我们就需要在mindspore/core/abstract/ops/primitive_infer_map.cc文件中对算子infershape阶段需要获取真实数值的输入参数进行注册,注册代码也是固定形式的,参考以下模板即可:ShapeSet{0,2}的含义就是MyOps算子在推理时,需要用到第1、3两个输入的真实值。BartlettWindow 算子 primitive_infer_map.cc 文件 3. 算子C++侧后端适配(1) mindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_gpu_kernel.h此处用于适配框架接口,由于对mindspore框架适配的需要, 在定义算子类时,都需要继承自NativeGpuKernelMod基类。根据最新框架要求,不可以继承DeprecatedNativeGpuKernelMod基类。否则算子打回重新适配 。而根据 NativeGpuKernelMod基类定义,所有算子都必须实现如下几个虚函数接口 :Init()、Resize()、GetOpSupport()、Launch(),除此之外为了适配动态shape测试,我们还需要编写内存清理ResetResource()函数以及定义一些类私有变量。此部分代码形式固定,大部分只需要参照模板编写即可:① Init()函数声明② Resize()函数声明③ GetOpSupport()函数声明④ Launch()函数声明⑤ RestResource()函数实现此函数用于在动态shape过程中清除之前输入、输出以及工作空间所申请的内存,避免之前的计算结果影响新一轮计算,代码模板如下:⑥ 类私有变量声明BartlettWindow 算子 bartlett_window_gpu_kernel.h 文件 (2) mindspore/ccsrc/plugin/device/gpu/kernel/yyy/xxx_gpu_kernel.cc此文件主要需要实现xxx_gpu_kernel.cc中声明的各种方法,用于校验输入、初始化参数、重计算并更新内存空间、核函数调用以及数据类型注册。① Init()函数实现此函数需要完成对于输入的一些简单校验、依据输入的数据类型选择正确的类模板、最后初始化一些参数并计算与内存相关的一些变量值,代码模板如下:② Resize()函数实现此函数用于判断是否为动态shape测试、清空内存、判断输出是否为空并申请新内存,代码模板如下:③ 核函数调用此函数获取输入、输出和工作空间的内存地址并传入核函数接口即可,代码模板如下:④ 数据类型注册此函数进行数据类型注册,参照代码模板编写即可:⑤ GetOpSupport()函数声明直接复制库里现有代码即可:BartlettWindow 算子 bartlett_window_gpu_kernel.cc 文件 4. 算子cuda核函数开发(1) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_impl.cuh此文件用于函数模板声明,确定好自己需要用到的输入参数后参照库中已有代码进行修改即可:B artlettWindow 算子 b artlett_window_impl.cuh 文件 (2) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/xxx_impl.cu此文件包含三大部分,第一部分是函数模板定义、第二部分为函数模板显示实例化、第三部分为多线程核函数实现。① 函数模板定义依据xxx_impl.cuh文件中声明的函数写相应的定义即可,形式固定,参照模板写即可:② 函数模板显示实例化依据算子支持的数据类型将函数模板进行实例化,其目的是为了加快实际计算时的运行速率,代码形式固定,参照模板写即可:③ 多线程核函数实现这一块才是真正用来实现算子计算逻辑的地方,也是整个GPU异构算子开发中最重要的部分,想要写好这一块的代码,大家首先需要了解自己算子的功能、计算逻辑,同时还需要有一定的Cuda编程基础,这边推荐大家看一下华为官网上推荐的cuda编程教程:cuda 编程(谭升) 大家主要了解一下host、device、grid、block和thread的概念就可以大致理解cuda是如何进行多线程计算的,之后就可以参照友商或者自己构建多线程计算逻辑,实现算子在GPU上的并行计算。以加法算子Add为例,假设有一个输入x和一个输入y,我们需要求z = Add(x, y),其线性计算和并行计算逻辑如下:BartlettWindow 算子 bartlett_window_impl.cu 文件 (3) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_class/xxx_helper.hBartlettWindow算子逻辑不复杂,因此没有写helper.h文件,故此处无法给出解析,大家可以参考官方开发文档中关于cudaKernel 封装 的介绍,也可以参考库中其他算子该文件的写法。5. 算子Python反向实现文件(1) mindspore/python/mindspore/ops/_grad_experimental/grad_yyy_ops.pyBartlettWindow算子无反向,故无需修改此文件。大家可以参考华为官方文档中关于注册 算子反向 的描述以及正向算子的反向实现 。算子反向实现的模板如下图所示,而实际计算逻辑则需要大家自己进行求导推理或者参照友商反向实现逻辑进行实现:6. 算子ST测试文件(1) tests/st/ops/gpu/test_xxx_op.py此文件用于门禁ST测试的用例,需要包括GRAPH_MODE和PYNATIVE_MODE两种模式的测试用例,同时需要注意这里的输入必须使用固定值,不可以随机生成,具体写法参照库中已有代码即可。BartlettWindow 算子 test_bartlett_window_op.py 文件 四、 如何做doctest用于检查接口注释是否规范1、进入GPU服务器中自己conda环境中的mindspore包:cd /disk1/user14/.conda/envs/xxx/lib/python3.7/site-packages/mindspore2、在当前路径传入conftest.py文件(见附件)3、修改conftest.py文件中导入的operation类型:我的是array,改成自己对应的4、进入算子python侧前端接口定义目录:cd /disk1/user14/.conda/envs/xxx/lib/python3.7/site -packages/mindspore/ops/operations5、在当前目录下传入需要doctest的算子接口文件array_ops_xxx.py:前面的array改成自己的算子类型,后面的xxx为算子名称6、增添算子接口将自己算子的前端定义复制粘贴到上面创建的array_ops_xx.py文件中,并且要增加支持的平台类型,就是在目前已经支持的平台前加上GPU,不仅要在此mindspore包中修改,自己提交的代码中也需要加上:从哪里复制?从原本算子对应的前端接口处复制,就是在此路径下的array_ops.py(array换成自己算子的类型)文件中搜自己的算子前端定义。7、在此路径下执行doctest命令(array换成自己的算子类型):pytest --disable-warnings -vra --doctest-modules -o doctest_optionflags=NORMALIZE_WHITESPACE --tb=long array_ops_xxx.py8、如果通过结果如下图,如果报错根据报错信息修改注释五、如何做接口网页自验证用于检查网页前端接口是否正确,主要依照官方文档接口注释网页自验部分:算子前端定义 wiki 需要注意四点:① clone docs代码时选择老的分支:git clone -b r1.6 https://gitee.com/mindspore/docs.git ② 编辑operation.rstoperation.rst文件可以用电脑的记事本打开,并且注意添加到自己算子所属类型下面③ 报错信息生成网页过程中会报一些没有图片的错误,不需要管。生成完毕后需要将/disk1/user14/wzb/docs/docs/mindspore/api/build_zh_cn路径下的整个html文件夹下载下来④ 网页截图html文件夹全部下载之后,打开index.html文件,在其中找自己算子的前端接口网页截图即可。附录1:BartlettWindow算子开发详解本文采取代码+注释方式解析BartlettWindow算子的开发过程。1. 算子Python侧前端定义(1) mindspore/python/mindspore/ops/operations/other_ops.py① 算子接口注释写完算子接口注释后可以通过()接口网页自验证生成如下网页文件:② Init()函数③ 推理函数BartlettWindow算子无Python侧Infer推理函数2. 算子C++侧前端推理(1) mindspore/core/ops/bartlett_window.h(2) mindspore/core/ops/bartlett_window.cc① BartlettWindowInferType函数图例外的其余校验请自行查找相应函数的用法。② BartlettWindowInferShape函数③ 属性init()、set()、get()函数mindspore/core/ops/op_name.h ④ BartlettWindowInfer函数⑤ 宏定义 (3) mindspore/core/ops/core_ops.h(4) mindspore/core/abstract/ops/primitive_infer_map.cc3. 算子C++侧后端适配(1) mindspore/ccsrc/plugin/device/gpu/kernel/other/bartlett_window _gpu_kernel.h① Init()函数声明② Resize()函数声明③ GetOpSupport()函数声明④ Launch()函数声明⑤ RestResource()函数实现⑥ 类私有变量声明(2) mindspore/ccsrc/plugin/device/gpu/kernel/other/bartlett_window _gpu_kernel.cc① Init()函数实现② Resize()函数实现③ 核函数调用④ 数据类型注册⑤ GetOpSupport()函数声明4. 算子cuda核函数开发(1) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/bartlett_window _impl.cuh(2) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/bartlett_window _impl.cu① 函数模板定义② 函数模板显示实例化③ 多线程核函数实现(3) mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_class/bartlett_window _helper.hBartlettWindow算子无需编写helper.h文件5. 算子Python反向实现文件(1) mindspore/python/mindspore/ops/_grad_experimental/grad_other_ops.pyBartlettWindow算子无反向6. 算子ST测试文件(1) tests/st/ops/gpu/test_ bartlett_window _op.py
-
openEuler镜像下载地址:https://repo.openeuler.org/openEuler-20.03-LTS/ISO/x86_64/openEuler-20.03-LTS-x86_64-dvd.isoVirtualBox下载地址:https://download.virtualbox.org/virtualbox/6.1.14/VirtualBox-6.1.14-140239-Win.exe 虚拟机安装方式整体请参照HCIA-openEuler实验手册。针对在电脑上虚拟机装在完毕之后想要实现①虚拟机能连接外网②虚拟机能够和主机互通,并能在主机上通过putty/Xshell方式连接到虚拟机上,需要做以下配置:0.自己电脑连接到Huawei-Guest上,虚拟机安装过程略。1.将虚拟机关机,在VirtualBox中找到虚拟机,并点击“设置”按键,进入网络设置画面,将网卡1的连接方式改为网络地址转换(NAT),将网卡2启动并选择连接方式为仅主机(Host-Only)网络,如图所示:其中,NAT模式:实现虚拟机隐藏在物理机之后,能上网,但不能访问物理机;Host-Only模式:实现虚拟机隐藏在物理机之后,不能上网,但可以访问物理机;2.修改完成之后,在VirtualBox中修改在物理机的 host-noly 虚拟网络适配器,如图所示,修改为192.168.56.1(默认配置就是这个),点击应用,如图所示:3.开启虚拟机,修改虚拟机openEuler中的网卡配置,路径为/etc/sysconfig/network-scripts/ifcfg-enp0s8 (若ifcfg-enp0s8不存在,从ifcfg-enp0s3复制一个就好,记得改相关信息,尤其UUID非必须, ONBOOT 必须改为true, BOOTPROTO 一般为dhcp 或static,表示动态分配还是静态手动配置),可以考虑直接复制我的:TYPE=EthernetBOOTPROTO=staticNM_CONTROLLED=yesIPADDR=192.168.56.2NETMASK=255.255.255.0GATEWAY=192.168.56.1NAME=enp0s8ONBOOT=yesDEVICE=enp0s84.使用nmcli c reload命令来重启openEuler网络服务,需要root权限,注意这一步不要用service network restart,会报错。5.至此虚拟机端的网络修改已完成,但是我们还没有修改Windows下的网络配置,所以需要在Windows下修改网络设置,如图所示打开该网卡的属性:确认一下ipv4协议的属性,是否为192.168.56.16.确认完成之后,在主机Windows上按Win+R键,并输入CMD,进入Windows的命令行中,输入ping 192.168.56.2看是否能与虚拟机ping通。7.在虚拟机中测试是否能连接到主机以及外网,可以用ping 192.168.56.1的方式测试与主机间的连接,用ping 202.108.22.5(这是百度的ip)来测试是否能与外网连接,如果都可以ping通,那说明网络配置已完成,可以用putty或者Xshell连接自己的虚拟机乐,再也不用忍受复制粘贴贼麻烦的情况了。
-
## 1 报错描述 ### 1.1 系统环境 ``` Environment(Ascend/GPU/CPU): CPU Software Environment: – MindSpore version (source or binary): 1.8.0 – Python version (e.g., Python 3.7.5): 3.7.5 – OS platform and distribution (e.g., Linux Ubuntu 16.04): win10 – CUDA version : NA ``` ### 1.2 基本信息 1.2.1脚本 如下所示,定义一个基于基类nn.cell的网络, 实现一个简单的功能:展平输入的Tensor数据。 ``` from mindspore import nn from mindspore import set_context import mindspore as ms set_context(mode=ms.PYNATIVE_MODE) class Net(nn.cell): def __init__(self): super().__init__() self.flatten = nn.Flatten() def construct(self, x): return self.flatten(x) def test_compile_cell(): net = Net() print("network:") print(net) if __name__ == "__main__": test_compile_cell() ``` 1.2.2 报错信息 网络发生如下报错。其实,注释掉`def test_compile_cell`方法及其调用, 执行脚本依然报错。意味着`Net(nn.cell)` 的定义就已经发生了错误。 ``` Traceback (most recent call last): File "test_compiler_cell.py", line 9, in class Net(nn.cell): TypeError: module() takes at most 2 arguments (3 given) ``` ## 2 原因分析及解决方法 此处想要导入类,如上代码所示只是导入了模块:`mindspore/python/mindspore/nn/cell.py`,Python的模块名与类名是在两个不同的名字空间中,初学者很容易将其弄混淆。 - python 类 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例 - python 模块 模块,在Python可理解为对应于一个文件。 根据上面代码,想使用nn.cell作为基类定义网络,但其实际上是一个模块,所以错误。 真正的基类应该是`nn.Cell`,即`mindspore/python/mindspore/nn/cell.py`文件中定义的python类对象,它是MindSpore中神经网络的基本构成单元。 修改后的网络定义: ``` class Net(nn.Cell): def __init__(self): super().__init__() self.flatten = nn.Flatten() def construct(self, x): return self.flatten(x) ``` 参考 【1】 [mindspore.nn.Cell](https://www.mindspore.cn/docs/zh-CN/r1.8/api_python/nn/mindspore.nn.Cell.html)。 【2】 [python 模块与类](https://www.cnblogs.com/kevin-hou1991/p/14806598.html)。
-
智慧城市是城市生活的未来。吸引新市民和投资不仅仅是因为好学校、负担得起的房产和优良的设施,在未来,一个城市所能提供的数字体验和创新服务将同样重要。通过使用先进的传感器网络,智慧城市可以收集大量数据,这些数据可以形成洞察力,以增强向市民提供服务的能力。此外,这种洞察力可以推动新服务的创建,帮助优化资产,改善资源管理,并提高运营效率以降低成本。例如,智能垃圾管理使用垃圾箱中的传感器来监测垃圾箱何时装满,当箱子装满时,传感器将通知管理平台,然后提醒垃圾管理团队清空垃圾箱。这有助于简化垃圾收集流程,降低成本并改善卫生状况。另一个重要方面是安全性。如果城市不安全,就不可能聪明。由互联网协议(IP)摄像头网络组成的视频监控系统以及诸如车牌识别、车辆跟踪、面部识别、分析和实时通知之类的高级应用改善了公共安全。尽管智慧城市的用例数量非常可观,但智慧城市仍然需要无与伦比的始终在线的数字通信服务组合,这些服务与庞大的物联网(IoT)网络链接。对于这个复杂、任务关键的服务平台来说,要实现最佳运行,强大的连接性和无缝的集成至关重要。拥抱创新智慧城市建立在突破性的技术之上。最新技术发展对于支持其数字优先事项、提高资源和流程的效率、推动问责制和促进经济发展至关重要。技术发展的速度确实惊人,这些先进技术所能提供的用例数量之多令人难以置信。只需采用物联网。庞大的连网设备网络处于创新的最前沿,可为城市居民提供差异化的服务,例如,与资产的数字连接可以实时定位城市中的设备和员工。资产跟踪的好处是可以快速找到设备。如果市政当局知道其资产在哪里以及使用了多少,它可以有效地合理化其资产组合,从而降低成本。物联网可以支持基于位置的服务(LBS),该功能可为室内环境(如公共建筑和博物馆)提供寻路和地理定位。这使得城市能够收集游客和员工的位置数据。LBS可以为旅游和公共安全提供有用的信息,比如支持改进的人群管理。令人兴奋的是,这仅仅是此旅程的开始。推动智慧城市发展的技术日趋成熟,并且用例的数量越来越多,增加了可以向市民提供的社会福利和数字服务的数量。实施智慧城市技术进步优势明显,但是在大城市环境中安全地实施变革暴露出了一些特殊的挑战。如果要使智慧城市成功,就必须了解并直面这些问题。智慧城市基础设施是由大量不同的技术平台和设备组成,这些平台和设备都位于庞大的物联网网络中,而且成功地连接和整合这些不同的元素绝非易事。为了实现这一目标,市政当局需要一个数字时代网络。该网络可为物联网设备提供即插即用的激活、强大的安全性和先进的自动化功能。数字时代网络是实现先进和动态智慧城市需求的基础。数字时代网络建立在自主的基础上。在这种情况下,这意味着网络通过自动、安全地连接市民、流程、应用程序和对象来简化部署。除了自主性,它还提供安全性和效率。数字时代网络可以使用分段技术搭载物联网设备,因此网络不会受到损害。它还通过工作流程自动化和开放接口开启了创新和流程集成。这样可以提高生产效率,并消除人为错误的可能性。物联网设备是为市民创新服务的关键,但其庞大的数量确实使基础设施暴露在网络攻击之下。这些安全威胁对智慧城市构成的危险是显而易见的。确保物联网设备安全需要数字时代网络提供多级安全措施。这些措施有助于保护设备、网络,最重要的是保护市民的设备。通过使用物联网安全措施,数字时代网络可以通过识别物联网设备、自动配置和应用正确的配置策略来保护系统。通过将单个物理网络划分为不同的虚拟网络(容器),IT经理可以确保每个应用程序或服务都有其自己的安全容器。这确保了市民的最佳体验、改进的服务完整性和安全、稳健的运营。该网络由AI和机器学习算法提供支持,可分析物联网设备和应用程序的行为,以确保它们正常运行。如果网络上运行的任何物联网设备出现恶意入侵或偏离标准行为的情况,都可以立即采取措施。专注于市民和企业与数字时代网络一样重要的是,智慧城市也需要明确而可衡量的目标,以提高市民和企业的满意度。无论这与应对气候变化、可持续转型、医疗保健、教育还是与社会融合有关,智慧城市都必须专注于其想要实现的目标。它需要致力于持续的数字化转型,以改善其市民的生活,并提供强大的经济效益来吸引投资。实现这一目标归结为通过可靠的连接性和无缝的集成将数字通信服务与物联网部署相结合。成功地将人、物和流程联系在一起,将减少复杂性,从而推动创新服务的发展,从而为未来的城市提供动力。 (作者:Stephan Robineau;编译:iothome)原文链接:https://www.iothome.com/archives/5083
-
在logistic模型中,损失函数可以定义为 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/6/1659777983871392224.png) 其中$p_{i}$表示第i个观测点的预测概率值,$y_i$表示第i个观测点的因变量的值(0或者1) 观察$y_i$等于零或者一的情况,可以做出下的变换 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/6/1659778218042666253.png) 接下来实在是看不下去了,还有求偏导数的主要技巧用到了链式法则,还有其他的太难看了。所以这一小部分跳过。 接下来的内容是深度神经网络。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/6/1659778927647116229.png) 观察箭头的方向,代表了处理的流程。通过线性回归模型和生物神经元的类比,可以将线性模型称作一个只包含一个神经元的神经网络。 同样的,logistic模型也可以用来进行类比,下图代表的就是预估y等于1的概率的处理过程: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/6/1659779156891635190.png) 他与线性回归模型的不同点在于:Logistic模型对输入值加权,并使用sigmoid函数做了非线性处理。 为什么需要深度神经网络呢?下面用代码和例子来说明。
-
新冠肺炎疫情几乎让所有行业都感到头疼。这一点在城市中尤其明显,因为许多城市举措前面都打上了大大的问号。现在,是时候展望未来,揭开真正“未来之城”的面纱了。GlobalData 指出了城市面临的一项非常具体的挑战:基础设施。5G、人工智能和物联网等技术将支撑我们的全球基础设施,包括医疗、水、宽带等。这不会是一件容易的事。疫情的经济影响意味着政府通常没有资金来投资大规模的智慧城市计划。尽管如此,根据甲骨文在 2021 年发布的一项研究,65% 的城市领导人表示,在疫情大流行期间吸取的最大教训是智慧城市计划对他们的未来至关重要。一旦实现这一目标,我们将拥有更智能的城市。事实上,尽管受到疫情大流行的影响,GlobalData 预测全球智慧城市市场的规模将翻一番,从 2019 年的 2211 亿美元增至 2030 年的 4425 亿美元。不过,要实现这一目标,我们需要将工作、购物、教育等方面数字化。为了更好地了解接下来会发生什么,让我们更深入地研究一下 Oracle 报告。城市中的科技大约 88% 的领导者认为,投资云平台是成功提供市民服务所需的最紧迫要求,而所有城市 4.0(该报告用来指智慧城市)已经在云方面进行了大量投资。在此基础上,66% 的城市已经在人工智能方面进行了大量投资——重点是数字助理和聊天机器人——其中 80% 的城市计划在不久的将来进行投资。另有 31% 的城市计划投资数字孪生。城市网络安全为了保护我们的城市基础设施,网络安全将变得至关重要。大约60%的城市领导认为,他们的城市无法避免来自国际或国内的网络攻击,原因是财务限制、IT 人才缺乏和其他因素造成的脆弱性。老实说,这个数字有点令人震惊。我个人觉得这个数字更接近100%。好消息是,大约95%的城市 4.0计划确保在项目早期就考虑网络安全。也许这就是智慧城市领导人对其网络安全措施充满信心的原因吧。城市合作我们之前已经多次说过,我们实现智慧城市的唯一方法是优先考虑合作关系。大约一半的城市领导人声称,找不到合适的合作伙伴是实现城市目标的最大障碍之一。与此同时,83% 的城市希望其合作伙伴能够提供实现高水平创新的解决方案,同时确保安全。许多因素需要在正确的时间汇聚起来,才能实现这一愿景。那么您认为智慧城市面临的最大挑战和机遇是什么?(编译:iothome)原文链接:https://www.iothome.com/archives/7746
-
## 1 案例概述 ### 1.1 概要描述 在本系统中,目的是基于MindX SDK,在华为云昇腾平台上,开发端到端图像生成的参考设计,实现当提供噪声和标签文件前提下自动生成相关图像的功能,能够达到功能要求。 案例获取地址:https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/biggan ### 1.2 模型介绍 BigGAN是用于图像生成的大规模生成对抗网络。相较于先前的生成对抗网络。BigGAN增大了网络规模,具体来说网络具有更大的参数量,同时训练过程中采用更大的batch size。为获得更好的生成图像,BigGAN引入了正交正则化和数据截断。正交正则化:BigGAN将正交正则化引入生成器网络中并进行调整,使模型对于经过截断处理的数据具有一定适应性,降低生成图像中伪影的产生;数据截断:对BigGAN的噪声输入进行截断处理,当随机采样获得的数大于给定阈值则重新采样,阈值的设定将影响生成的图像多样性和真实性。通过这些技巧的使用,BigGAN大幅度提升了基于类别的合成图像的质量。 本方案采用的是BigGAN模型实现图像生成功能,将预处理获取到的数据集传入pipeline中进行模型推理,取出模型推理后得到的tensor数据,转为numpy数组再进行去标准化,转换维度从而保存成图像格式。 模型地址: https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/biggan 论文地址: https://github.com/ajbrock/BigGAN-PyTorch 模型概述: https://www.hiascend.com/zh/software/modelzoo/models/detail/1/c77dfa7e891f4388b62eeef7e8cbbc2d ### 1.3 实现流程 1、基础环境:Ascend 310、MindXSDK 、Ascend-CANN-toolkit 2、模型获取:通过链接下载已经转好的om模型 3、数据集准备:获取文件相关依赖后,运行转换脚本得到标签数据及噪声数据 3、业务流程编排与配置 4、python推理流程代码开发 ### 1.4 特性及适用场景 工程适用于通用场景下,batchsize为1的jpg图像生成。 ## 2 软件方案介绍 ### 2.1 项目方案架构介绍 本系统设计了不同的功能模块。主要流程为:bin文件转为tensor数据类型传入流中,利用BigGAN的图像生成模型,输出tensor通过反标准化等步骤转换并保存为图像。各模块功能描述如表2.1所示: 表2.1 系统方案中各模块功能: | 序号 | 子系统 | 功能描述 | | :--- | :------- | :----------------------------------------------------------- | | 1 | 数据输入 | 调用MindX SDK的appsrc输入tensor数据 | | 2 | 推理 | 调用MindX SDK的mxpi_tensorinfer,对输入的张量进行推理 | | 3 | 输出 | 推理好得到的tensor取出来 | | 4 | 结果保存 | tensor转成numpy数组再依次进行改变维度,反标准化等操作,最后保存为jpg图像格式 | ### 2.2 代码目录结构与说明 本工程名称为biggan,工程目录如下图所示: ``` ├── python | ├── biggan.pipeline //业务流 | ├── main.py // 主函数,用以在拥有数据集后生成图像 ├── Readme.md ├── SDK.jpg └── RESULT.jpg ``` ## 3 开发准备 ### 3.1 环境依赖说明 推荐系统为ubuntu 18.04,环境依赖软件和版本如下表: | 软件名称 | 版本 | 说明 | 获取方式 | | ------------------- | ----------- | ----------------------------- | ------------------------------------------------------------ | | MindX SDK | 2.0.4 | mxVision软件包 | [链接](https://gitee.com/link?target=https%3A%2F%2Fwww.hiascend.com%2Fsoftware%2FMindx-sdk) | | ubuntu | 18.04.1 LTS | 操作系统 | Ubuntu官网获取 | | Ascend-CANN-toolkit | 5.0.4 | Ascend-cann-toolkit开发套件包 | [链接](https://gitee.com/link?target=https%3A%2F%2Fwww.hiascend.com%2Fsoftware%2Fcann%2Fcommercial) | | python | 3.9.2 | | | | numpy | 1.22.4 | 维度数组运算依赖库 | 服务器中使用pip或conda安装 | | opencv-python | 4.6.0 | 图像处理依赖库 | 服务器中使用pip或conda安装 | ### 3.2 环境搭建 #### 3.2.1 环境变量设置 ```bash 在编译运行项目前,需要设置环境变量: . ${sdk_path}/set_env.sh . ${ascend_toolkit_path}/set_env.sh #查看环境变量 env ``` ### 3.3 前期数据和模型准备 项目使用的模型为BigGAN。 ##### 注意事项: 1. 数据获取 1.1 文件依赖问题: 标签和噪声文件的生成共依赖五个文件: “biggan_preprocess.py”,“G_ema.pth” ——来源ModelZoo的ATC BigGAN仓库,在第二部分模型获取的ModelZoo文件下载路径可以一起获取。 “BigGAN .py”,“layers .py”,“inception_utils.py” ——来源github仓库。 github文件下载路径:https://github.com/ajbrock/BigGAN-PyTorch.git 1.2 命名问题: 样例中以bs为1,数据数量为1000为例。因此,在模型获取,数据集生成时均需要统一为bs=1。 1.3 路径问题: “biggan_preprocess.py”,“G_ema.pth” ,"BigGAN .py", “layers .py”, “inception_utils.py” 和生成的“prep_label_bs1”和“prep_noise_bs1”文件夹需要全部放在/biggan目录下,否则在运行主脚本时会出错。 2. 模型获取 用户需要在biggan目录下新建一个model目录,在biggan/model路径下上传已经训练并转好的om模型(biggan_sim_bs1.om)。 ModelZoo文件下载路径:https://www.hiascend.com/zh/software/modelzoo/models/detail/1/c77dfa7e891f4388b62eeef7e8cbbc2d ## 4 推理流程开发实现 ### 4.1 pipeline编排 ``` appsrc # 输入 mxpi_tensorinfer # 模型推理(图像生成) appsink # 输出 ``` ### 4.2 主程序开发 1、初始化流管理。 2、加载数据,进行推理。 3、获取pipeline插件输出结果。 4、转变数据类型保存图片 5、销毁流 ### 4.3 参数调节 | 参数名称 | 参数介绍 | 修改方法 | 默认值 | | ----------- | ------------------------ | ------------------------------------------------------ | ----------------- | | STREAM_NAME | 业务流名称 | 在python/main.py文件中修改打开文件的名称即可 | biggan | | LABEL_PATH | 数据集中标签的文件夹路径 | 在python/main.py文件中修改为具体的路径名称即可 | ../prep_label_bs1 | | NOISE_PATH | 数据集中噪声的文件夹路径 | 在python/main.py文件中修改为具体的路径名称即可 | ../prep_noise_bs1 | | OUT_PATH | 输出目录 | 在python/main.py文件中修改为具体的路径名称即可 | ../result | | NUM | 生成数据集的范围 | 在python/main.py文件中修改为用户自行生成的数据总数即可 | 1000 | | COUNT | 用户需要生成的图片编号 | 在python/main.py文件中修改为其他正整数即可 | 11 | ## 5 编译与运行 示例步骤如下: **步骤1** 进入biggan文件夹下: ``` cd biggan ``` **步骤2** 设置环境变量,如**3.2.1环境变量设置**所述。 **步骤3** 在准备好需要的文件后(如第3小节**前期数据和模型准备**所述),运行命令,生成数据集。 ``` python3 biggan_preprocess.py --batch-size 1 --num-inputs 1000 ``` **步骤4** 获取om模型,若未从 pytorch 模型自行转换模型,使用的是上述链接提供的 om 模型,则无需修改相关文件,否则修改 python目录下pipeline的相关配置,将 mxpi_tensorinfer0 插件 modelPath 属性值中的 om 模型名改成实际使用的 om 模型名。 当前目录结构可参考如下图片所示: (![1.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659712906164556096.jpg) **步骤5** 进入python目录 ```bash cd python ``` **步骤6** 执行脚本文件(main.py中默认为num为1000,count为11。也可根据用户需要在main.py脚本文件中自行设置数值,其中count需要小于num值。) ``` python main.py ``` 结果展示: 结果无误时会在biggan目录下生成result文件夹,文件夹中保存了count_result.jpg格式的生成图像。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713196898564032.jpg) ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713213454646044.jpg) 注: 具体实现图片依赖于label标签和noise噪声文件,文件随机生成,最终生成图片因人而异。 ## 6 常见问题 ### 6.1 环境问题 **问题描述:** 提示 No module named 'MxpiDataType_pb2' ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713229110380536.jpg) **解决方案:** 未配置SDK环境变量,可以输入命令查看环境变量设置是否正确 ``` env list ``` ### 6.2 路径问题 **问题描述:** 提示LabelPath does not exit. 或 NoisePath does not exit. ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713244876798271.jpg) ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713255253231230.jpg) **解决方案:** 数据集路径不正确或不存在,需要更改数据集存放位置。 ### 6.3 数据设置问题 **问题描述:** 提示set COUNT again, should be smaller than NUM. ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/5/1659713270808922185.jpg) **解决方案:** 修改COUNT,使其小于NUM。
-
5G 提供比以前的蜂窝标准更快的下载速度,但根据基站使用的频率,该技术可能无法提供接近 3G 和 4G 网络的覆盖范围。5G 使用的频率范围之一是毫米波 (mmWave),频率为 30 GHz 至 300 GHz。 基于毫米波的移动 5G 的主要缺点是无线高频段技术在室内效果不佳。 这是因为毫米波信号难以穿透建筑物墙壁和某些类型的玻璃,从而阻碍了室内 5G 性能。事实上,自从 AT&T 和 Verizon 在 2019 年首次部署 mmWave 5G 以来,用户发现很难访问高频段 5G 信号。 虽然如果用户在户外并靠近 5G 蜂窝塔,他们可以获得超过 1 Gbps 的快速移动 5G 下载速度,但这对于办公室或在家工作的人来说并不总是可行的。小基站提升室内覆盖蜂窝小蜂窝是解决这一覆盖问题的一种方法。 这些无线接入点 (AP) 在 2009 年首次作为第三代合作伙伴计划 4G LTE 规范的一部分引入,可以增加蜂窝网络的密度。小型蜂窝是使用各种频率运行的低功率蜂窝基站。 根据它们的大小,小型蜂窝可以提供从 40 英尺到几公里的传输范围。 这些迷你基站通过以太网、光纤或无线连接返回主蜂窝网络。小型蜂窝可以部署在室内或室外。 室内品种通常很小——大约有一个披萨盒那么大。 这些兆或千兆速度的小工具可以安装在家庭和办公室的天花板和墙壁上,以提高蜂窝网络的射频 (RF) 信号强度。5G 网络越来越依赖室内小型基站。 随着越来越多的 5G 小型基站部署在办公室、家庭和公寓中,这种趋势可能会持续下去。室内 5G 网络空间的运营商发展随着美国移动网络运营商 (MNO) 部署低频段和中频段 5G 蜂窝网络,室内接入 5G 无线技术变得越来越普遍。美国的三大移动运营商——AT&T、T-Mobile 和 Verizon——现在提供低、中、高频段 5G 网络的混合,尽管这些运营商的 5G 频率还没有完全覆盖美国。随着宏网络的不断推出,一般的 5G 接入——室内和室外——比几年前要好。 此外,随着蜂窝 5G 网络的扩展,主要运营商正在部署小型基站以扩大和加强覆盖范围。Verizon2021 年 1 月,美国最大的移动网络运营商 Verizon 宣布将从共享通信基础设施提供商 Crown Castle 租用 15,000 个小型基站,以支持其到 2025 年的全国 5G 部署。一旦投入运营,每台 5G 无线电的租期将持续 10 年。这笔交易补充了 Verizon 自己建立的数千个 5G 小型蜂窝基站。该运营商正在推出新的 C 频段中频段 5G 频谱,以扩展其 5G 超宽带服务,到 2022 年底覆盖美国 1.75 亿潜在客户。Verizon 表示将在之后部署与 C 频段频谱兼容的小型基站最初的扩张。T-MobileU-美国第二大移动运营商 T-Mobile 也与 Crown Castle 签署了一项协议,将在 2027 年之前部署 35,000 个小型基站。这些单元的租期为 12 年。在 2022 年 1 月的一次会议上,Crown Castle 首席财务官 Daniel Schlanger 表示,T-Mobile 协议是“我们历史上最大的小型蜂窝订单”。Verizon 和 T-Mobile 正在就哪家运营商将在美国提供最快和最密集的 5G 覆盖范围展开竞争。小型蜂窝将成为 2022 年及以后推动的重要组成部分。AT&T排名第三的移动网络运营商 AT&T 表示,它正在努力缩短获取站点所需的时间并获得部署小型基站的许可。 2022 年 2 月,AT&T 表示正在美国多个城市进行现场测试和部署商用爱立信 Street Radio 4402 小型基站。移动网络运营商可能需要 12 到 18 个月的时间才能添加新的微型 5G 站点。任何可以在更短的时间内部署的基础设施都是运营商的优势。然而,AT&T 并未透露计划部署多少个室内或室外小型基站。小基站如何助力 5G 室内覆盖?尽管主要移动网络运营商制定了雄心勃勃的计划,但大多数 5G 小型基站将由私营企业部署。 IDTechEX 预测,到 2031 年,全球将分布 4500 万个 5G 小型基站。其中一些小型基站将由希望为企业创建自己的私有 5G 网络的公司安装。通过将私有 5G 核心与小型蜂窝网络相结合,企业可以在本地实施安全、可靠、低延迟和高速的私有网络。尽管私有 5G 大肆宣传,但支持这些专有企业网络的技术才刚刚开始可用。私有 5G 部署要到 2025 年或 2026 年才会成为主流。与此同时,企业将继续安装室内小型基站,尽管微型无线电连接到移动网络运营商的公共网络。增加 5G 网络致密化将大大改善室内覆盖。如前所述,室内环境对高频段毫米波 5G 无线电并不是特别友好。墙壁可以完全阻挡高频信号,但即使是中频 5G 射频也会被办公室隔断和家具削弱。要求员工通过蜂窝网络访问高速(1 Gbps 以上)数据下载的企业将需要多个 mmWave 小型蜂窝,以确保可靠、不间断的室内数据覆盖。部署的大多数 5G 小型基站可能会使用中频段或低频段频率。这些带宽并不完全依赖兼容的室内微型无线电来提供覆盖,但依赖室内稳定 5G 信号的企业应该考虑安装中频 5G 小型蜂窝基站。分布式天线系统许多企业使用分布式天线系统 (DAS) 在整个建筑物中传输来自中央源的蜂窝信号。小型蜂窝网络可以补充这些系统以改善室内移动覆盖。DAS 供应商,如康普和康宁,与主要运营商合作,在酒店、医院、大型办公楼和体育场安装室内天线系统。然而,据蜂窝信号增强提供商 Waveform 称,部署 DAS 比在建筑物中安装一个或多个小型蜂窝更昂贵,成本取决于支持的频率和设备。Wi-Fi 6许多较小的企业可以使用Wi-Fi为员工提供室内移动覆盖,特别是因为现在大多数可用的手机都支持Wi-Fi通话。现代Wi-Fi 6-802.11ax接入点提高了吞吐量并减少了公共网络带宽的拥塞。与以前的Wi-Fi标准相比,Wi-Fi 6与5G的互操作性更好,在使用这两种技术时实现了更异构的网络。室内5G领域的主要参与者5G小型蜂窝市场中的知名厂商包括(按字母顺序排列):AirSpan思科系统CommScope爱立信NEC公司诺基亚三星2019年,中国供应商华为和中兴通讯被列入黑名单,导致包括小型蜂窝在内的全球无线接入网络市场出现分裂。在美国和欧洲部分地区,中国供应商被禁止销售电信基础设施。在世界其他地区,华为是最大的电信供应商。
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
去报名 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签