• [其他] LVS负载均衡极限性能场景,cn网络传输流量大的场景下,LVS负载高
    背景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年保持中国政务云基础设施市场份额第一
    知天下,行万里丨今日热点行业资讯荟萃。华为云连续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的集成。全面支撑企业的开发决策、产品设计、工艺设计到生产制造等主要业务场景。>>>点击阅读原文全文
  • [行业资讯] “乾”行百业 | 唯快不破,华为乾坤为快运独角兽打造高时效性的分支网络
  • [问题求助] NB卡的问题
    【功能模块】小熊派智慧农业案例设备不能激活【操作步骤&问题现象】经AT 指令测试,NB卡正常,但没有附着网络,没有网络信号,卡是小熊派自带的(不超过一年),如何联系售后或运营商?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [算子使用] GPU异构算子全流程开发指导
    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虚拟机安装过程网络配置
    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连接自己的虚拟机乐,再也不用忍受复制粘贴贼麻烦的情况了。
  • [功能调试] mindspore报错: module() takes at most 2 arguments (3 given)
    ## 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)。
  • [MindX SDK] BigGAN图像生成参考设计案例分享
    ## 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。
  • [上云精品] T+Cloud:构建新型生意社交网络和营销关系的“智公司”
    近年来,伴随着国外疫情影响,国际需求大幅萎缩,大量外单被终止,出口额下滑了75%,为求生存,大量的中小微企业开始转入内销。另一方面,餐饮、旅游、航空等服务业、影视娱乐行业遭受一定程度冲击,衣、住、行等方面的内需均有下降,国内相关企业同样面临了不小的挑战。但在食品、生鲜零售、清洁个护、大健康、高性价比家电、医疗防护、网络游戏等行业,也出现了不同程度的增长,并且催生了大量的创新机会。所以,危机之下,亦是机遇。在云服务的生态系统中,华为云云商店与合作伙伴致力于为用户提供优质、便捷的基于云计算、大数据业务的软件、服务和解决方案,满足华为云用户快速上云和快速开展业务的诉求,帮助许多中小微型企业获得转型升级的市场机会。以畅捷通T+Cloud解决方案为例,聚焦于企业、事业单位的财务管理,进销存管理解决方案,融合了企业人、财、货、客等方面管理需求,帮助提高协作效率、降低管理成本。上架云商店以来,众多企业通过部署T+Cloud解决方案实现“智能新生产”。特别是在五金、机械、电子电器、化妆品、食品、服装、紧固件等有加工制造过程的行业。将生产管理的多个流程集中起来,包括生产管理、委外管理、库存管理及财务核算等,实现管理流程的数字化、可视化和透明化,助企业节省更多的时间和人力成本。T+Cloud解决方案能够帮助企业解决哪些问题?以订货型生产企业为例,在订单执行过程中,客户对于交期要求非常严格,业务员时刻会面临客户催单,要保证订单处于可控状态。当订单量大时,业务员难以订单为依据,统计完工、发货和结算情况。1、实时进度:业务员可通过销售订单跟踪工具,一键查询订单的具体生产、出库、收款等情况,“订单执行图”即可清晰反映订单执行进度,故在面临客户询问时,业务员也可及时反馈,做到“心中有数”。老板也能够以订单为中心,查看购产销一体化的数据,根据订单整体的执行情况观察企业的经营活力。2、过程可视: 工序管理过程中,工序流转卡打印快捷、准确。工序报工便捷、高效,工序进度也能一目了然。采用大屏看板,实现数字化、可视化、透明化。工序汇报、工人产量统计、计件工资、薪资核算无缝衔接,管理更加高效、数据也更加透明。业务流程可以灵活掌控。3、采购计划:通过采购需求分析,结合产品结构和库存现存量,自动生成采购需求,调整确认后生成采购订单,做到有据可依,需求分析来源可以来自销售订单或预测单,也可以来自加工单。4、生产计划:针对生产投产备料难掌握的问题,T+Cloud解决方案可以在接单后,根据销售订单和产品结构,参考库存可用量,形成投产建议,支持按BOM结构的全阶、单阶或指定级次投产。根据投产建议, 精确投产,能够帮助生产企业保证生产订单的准确性与及时性,是确保订单的及时交付的前提。另外,合理的备料分析,在帮助生产不缺料的同时,做到库存不积压,同时还能实时有效地掌握库存,实现采购科学及时。合理备料、精确投产,及时交付,防范积压。5、自助报工:工序汇报单统一汇;手机随时随地自助下工序汇报单,提升报单效率,降低出错率。6、工资核算:计件工资核算单可按日/周/月核算,在与工序管理联用时可参照工序汇报单生成,可有效控制虚报冒领、错算、漏算工资等情况,支持自定义工资类型设置审批流程。7、严控成本:根据物料清单严格按生产加工单领料,补料重点监控,管控好直接材料成本。8、成本核算:直接材料、工人人力成本、制造费用等按数量金额及工时多维度进行产品成本分配(产品成本录入工具),无需增加财务核算工作量,轻松核算出成品成本。凭借优秀的产品能力与服务水平,T+cloud解决方案荣登华为云云商店7月热销榜Top2。>>>点击回顾华为云云商店7月热门榜单让企业成为构建新型生意社交网络和营销关系的“智公司”,云商店将携手伙伴持续创新,致力于成为用户首选的企业应用平台!文中提到的商品链接:T+cloud解决方案撰文&编辑 | 格子
  • [问题求助] PC机和小熊派开发版连接到同一个wify,网络助手连接不了?
    【操作步骤&问题现象】1、PC机上安装了网络助手,设置为server端2、小熊派开发办指定为client端。用AT指令【截图信息】弱弱的问一下AT指令发送成功了吗?我直接烧了实例代码,是不是就不需要单独烧录8266wifi模块了?我通过局域网wifi查看了,PC机和小熊版已经都连接了wifi,且在一个网段。
  • [技术干货] 越来越火的图数据库到底能做什么?
    图数据库像新一代的关系型数据库,取代传统关系型数据库在诸多领域大展拳脚、高歌猛进。图数据库较传统关系型数据库有何优势?适用于哪些技术领域?未来是何态势,有何机遇?《新程序员002》特邀Neo4j亚太地区售前和技术总监俞方桦为大家解读图数据库。随着大数据时代的到来,传统的关系型数据库由于其在数据建模和存储方面的限制,变得越来越难以满足大量频繁变化的需求。关系型数据库,尽管其名称中有“关系”这个词,却并不擅长处理复杂关系的查询和分析。另外,关系型数据库也缺乏在多服务器之上进行水平扩展的能力。基于此,一类非关系型数据库,统称“NoSQL”存储应运而生,并且很快得到广泛研究和应用。NoSQL(Not Only SQL,非关系型数据库)是一类范围广泛、类型多样的数据持久化解决方案。它们不遵循关系型数据库模型,也不使用SQL作为查询语言。其数据存储不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般都有水平可扩展的特征。简言之,NoSQL数据库可以按照它们的数据存储模型分4类:键值存储库(Key-Value-stores)列存储 (Column-based-stores)   文档库(Document-stores)图数据库(Graph Database)从DB-Engines发布的数据库技术类别变化趋势图(见图1)中,不难看出图数据库在近十年受到广泛关注、是发展趋势最迅猛的数据库类型。那么,到底什么是“图数据库”?相比关系型数据库,图数据库又有哪些优势呢?1、图数据库与关系型数据库的比较图数据库(Graph Database)是指以图表示、存储和查询数据的一类数据库。这里的“图”,与图片、图形、图表等没有关系,而是基于数学领域的“图论”概念,通常用来描述某些事物之间的某种特定关系。比如在我们的日常生活中:社交网络是图。每个社交网络的参与者是节点,我们在社交网络中的交互,例如“加好友”“点赞”就是连接节点的边。城市交通是图。每个路口、门牌号、公交站点等都是节点,街道或者公交线路是边,将可以到达的地方连接起来。知识也是图。每个名称、概念、人物、事件等都是节点,而类属关系、分类关系、因果关系等是边,将节点连接起来,形成庞大、丰富并且随时在演变的知识图谱。可以说,“图无处不在”(Graphs are everywhere),也正因如此,传统关系型数据库不擅长处理关系的问题,能够被图数据库很好地解决,图数据库正是为解决这一问题而生。其实,在某些方面,图数据库就像新一代的关系数据库,区别在于图数据库不仅存储实体,还存储实体之间的关系。关系型数据库通过“主键-外键”表示隐含的“关系”连接,但实际上这里的“关系”是关系代数中的概念,与我们现实世界中的“关系”不同。通过将关系预先物理存储在数据库中(我们称之为“原生”),图数据库将查询性能由原先的数分钟提高到数毫秒,特别是对于JOIN频繁查询,这种优势更加明显。图2中比较了在社交网络数据集上搜索朋友圈的查询,在原生的图数据库和关系数据库的查询执行效率。显然,使用图数据库比使用传统关系数据库效率有极大提升。作为NoSQL数据库的一种,图数据库通常不需要先定义严格的数据模式,以及强制的字段类型,这使其在处理结构化和半结构化的数据时同样得心应手。除了存储和查询效率方面的优势,图数据库也拥有更加丰富的分析能力,我们通过比较这四类主要的非关系型数据库特点(见表1),就可以得知。2、图数据库的主要技术领域既然图数据库有诸多优势且发展迅速,那它主要涉及哪些技术领域呢?我们用图3来描述。具体来讲,图数据库的主要技术领域包括存储模式、图模型、图查询语言、图分析以及图可视化。存储模式原生图vs非原生图图数据库以节点和边来对现实世界进行数据建模。对于实际的底层物理存储技术,目前主流有两大类方法:原生(Native),即按照节点、边和属性组织数据存储。典型代表有Neo4j、JanusGraph、TigerGraph等。非原生,使用其他存储类型。例如基于列式存储的DataStax、基于键值对的OrientDB以及基于文档的MongoDB。部分关系型数据库也在关系存储之上提供类似图的操作。有的图计算平台底层支持各类存储技术,包括图存储,称作“多模式”,例如百度HugeGraph。原生的图存储由于针对图数据和图操作的特点进行了优化,并且从物理存储到内存中的图处理,都采用一致的模型而无需进行“模式转换”,在大数据量、深度复杂查询以及高并发情况下,性能普遍优于非原生的图存储。图的分布式存储为了支持大规模的图存储和查询,需要对图进行分布式存储。这里有两类分布式的实现方法:1、分片(Sharding)。分片就是根据某一原则(例如根据节点的ID随机分布)将数据分布存储在多个存储实例中。根据切分规则,又可以分为:按点切分。每条边只保存一次,并且出现在同一个分区上。如果处于不同分区的两条边有共同的点,那么点会在各自的分区中复制。这样,邻居多的点(繁忙节点)会被分发到多个分区上,增加了存储空间,并且有可能产生同步问题。这种方法的好处是减少了网络通信。按边切分。通过边切分之后,顶点只保存一次,切断的边会打断保存在不同分区上。在基于边的操作时,对于两个顶点分到两个不同分区的边来说,需要通过网络传输数据。这增加了网络传输的数据量,但好处是节约了存储空间。出于优化性能的考虑,目前按点切分的分布式图更加常见。2、分库(Partitioning)。由于现实世界中的图往往遵循“幂律分布”,即少数节点拥有大量的边,而多数节点拥有很少的边。分片存储不可避免地会造成大量数据冗余复制,或增加分区间网络通信的负担。因此,另外一种分布式的方法是分库。这是借助图建模的方法,将节点按照业务需求、根据查询类型分布在不同库中,是最小化跨库的网络传输。不同库中的数据则通过联邦式查询(Federated Query)实现。图模型在基于图的数据模型中,最常见的两种方法是资源描述框架(Resource Description Framework,RDF)和标签属性图(Labelled Property Graph,LPG)。RDFRDF是W3C组织指定的标准,它使用Web标识符(URI)来标识事物,并通过属性和属性值来描述资源。根据RDF的定义:资源是可拥有URI的任何事物,比如 "http://www.w3school.com.cn/rdf";属性是拥有名称的资源,比如"author"或"homepage";属性值是某个属性的值,比如"David"或"http://www.w3school.com.cn"(请注意一个属性值可以是另外一个资源)。我们来看看RDF是怎样描述 “西湖是位于杭州的一个旅游景点”这个事实的(见图4)。RDF图的查询语言是SPARQL。如果要询问“位于杭州的旅游节点有哪些?”,使用SPARQL的查询如下:PREFIX ns: <http://kg.com/ns/travel#> SELECT ?place WHERE { ?place ns:地理位置 ns:杭州 . ?place ns:实例 ns:旅游景点 . }LPG在LPG属性图模型中,数据对象被表示成节点(拥有一个或多个标签)、关系和属性。我们用下面的例子来说明(见图5)。在图5中:节点/顶点是事物(Object)或者实体(Entity)的抽象,可以是“人”“导演”“电影”“演员”等抽象。节点可以拥有一个或多个标签,例如代表“张艺谋”的节点可以有“个人”“导演”“演员”等标签。节点的属性。节点的属性为节点提供丰富的语义,根据顶点代表的类型不同,每个顶点可以有不同的属性,比如以“人”作为顶点,属性可以是“姓名”“性别”等。边/关系。边连接两个节点或同一个节点(指向自己的边),边可以有向或无向。边可以有类型,比如连接“李连杰”和“英雄”的边的类型是“主演”。边的属性。和顶点的属性类似,每条边上也可以有属性。比如连接“李连杰”和“英雄”的边有属性“角色”,其值是“无名”。相比RDF,LPG由于可以在节点和边上定义丰富的属性,更加易于我们理解,建模也更加灵活。图查询语言应该说,关系型数据库在过去半个世纪的成功离不开SQL查询语言标准化。目前,图查询语言的标准化(GQL)工作还在进行当中,其核心语法和特性基于Neo4j的Cypher、Oracle的PGQL和GCORE框架。从查询语言本身来说,主要有两类:声明型(Declarative)。声明型查询语言只要求使用者描述要实现的目标,由查询引擎分析查询语句、生成查询计划然后执行。SQL是声明型查询语言。在图数据库领域,Cypher是最流行的声明型查询语言。命令型(Imperative)。命令型查询语言要求使用者描述具体执行的操作步骤,然后由数据库执行。在图数据库领域,Gremlin是最流行的(近似)命令型的查询语言。从未来的发展趋势来看,声明型查询语言由于其易于理解、学习门槛低、便于推广等特性,将成为主流的图查询语言。智能、优化的查询执行引擎将成为衡量图数据库技术优势的关键。图分析在计算机科学领域,图算法是一个重要的算法类别,经常用于解决复杂的问题。大家应该还能记得在《数据结构》或者软件开发相关课程中都会学到的“树的遍历”(前序、中序、后序等),这就是典型的图算法。部分成熟的图数据库内置了这些图算法,以提供对图数据的高级分析功能。最短路径搜索最短路径是图计算中一类最常见的问题,通常见于解决下面的应用场景:在两个地理位置之间寻找导航路径;在社交网络分析中,计算人们之间相隔的距离,“最短”则基于路径上边的距离和成本,例如:最少跳转次数;Dijkstra算法:边带权重的最短路径;A*算法:基于启发式规则的最短路径;k条最短路径。计算范围则包括:节点对之间;单一起点到图中其他所有节点;全图中所有节点对之间。除此之外,最小生成树、随机游走等图遍历算法也属于这一类。社团检测“物以类聚,人以群分”,这句话非常形象地描述了网络的一个重要特征:聚集成群。群也称作“社区”“团体”“群组”。社区的形成和演变是图分析和研究的又一个重要领域,因为它帮助我们理解和评估群体行为、研究新兴现象。社区检测算法就是在图中对节点进行分组和集合(见图6):在同一集合中的节点之间的边(代表交互/连接)比分属不同集合的节点之间更多。从这一意义上,我们认为它们有更多共同点。社区检测可以揭示节点集群、隔离的群组和网络结构。在社交网络分析中,这种信息有助于推断拥有共同兴趣的人群。在产品推荐中,可以用来发现相似产品。在自然语言处理/理解中(NLP/NLU),可以用来对文本内容自动分类。社区检测算法还用于生成网络的可视化展现。有助于推断拥有共同兴趣的人群。在产品推荐中,可以用来发现相似产品。在自然语言处理/理解中(NLP/NLU),可以用来对文本内容自动分类。社区检测算法还用于生成网络的可视化展现。中心性算法在图论和网络分析中,中心性指标识别图中最重要的顶点。其应用广泛,包括识别社交网络中最有影响力的人、互联网或城市网络中的关键基础设施节点,以及疾病的超级传播者。最成功的中心度算法当属“页面排行”(PageRank)。这是谷歌搜索引擎背后的网页排序算法的核心。页面排行除了计算页面本身的连接,同时评估链接到它的其他页面的影响力。页面的重要性越高,信息来源的可靠度也越高。应用到社交网络中,这一方法可以简单地解释成“认识我的人越重要,我也越重要”。是不是挺有道理?相似度算法相似度描述两个节点以及更加复杂的子图结构是否在何等程度上属于同一类别,或者有多相似。图/网络相似性度量有三种基本方法:结构等价(Structural Equivalence);自同构等价(Automorphic Equivalence); 正则等价(Regular Equivalence)。还有一类是先将节点转换成N维向量(x 1,x 2,…x n)并“投射”到一个N维空间中,然后计算节点之间的夹角或者距离来衡量相似度。这个转换的方法叫作“嵌入”(Embedding),转换的过程叫作“图的表示”,如果是由算法自动得到最佳的转换结果,那么该过程叫作“图的表示学习”。基于图的学习是近年来在人工智能领域非常热门的一个方向,被广泛应用到欺诈检测、智能推荐、自然语言处理等多个领域。图可视化“一图胜万言”这句话是对图可视化最恰当的描述。图可视化直观、智能地展现数据之间的结构和关联,能看到从前在表格或者图表中看不到的内容。2019年,当新冠病毒开始在全球肆虐时,来自Neo4j图数据库社区的一群成员集成了多个异构生物医学和环境数据集(https://github.com/covid-19-net/covid-19-community),建立了关于新冠病毒的知识图谱,以帮助研究人员分析宿主、病原体、环境和病毒之间的相互作用。图7是该知识图谱的部分可视化结果,图中最左边的部分是病毒暴发的地理位置子图,包含国家、地区、城市;中间绿色的部分是流行病学子图,包括有关病毒株、病原体和宿主生物的信息,病例和菌株分别与报告和发现它们的位置相关联;右边紫色的部分是生物学子图,代表生物体、基因组、染色体、变异体等等。图数据的可视化建立了关于事物之间关联的最直观的展现,并且使得原本并不明显、甚至于淹没在数据汪洋中的重要特征得以显现出来,成为新的认知。3、图数据库的未来展望在图数据库出现并兴起的十余年间,它在各个领域都得到了成功的应用,并且产生了众多创新性的解决方案。在社交平台的“网络水军”识别方面,通过分析用户的关系图特征、结合传统的基于用户行为和用户内容的发现方法,可以有效提高预测的准确性和鲁棒性。在金融领域,图和图分析帮助机构更高效地发现异常的关联交易,以赢得反洗钱战争。在电力、电信行业,图数据库帮助管理复杂庞大的设备和线路网络,并及时为故障分析根源、估算影响。在制造、科研、医药等领域,图数据库广泛用于存储和查询知识图谱,成为大数据管理、数据分析和价值挖掘乃至人工智能技术领域的重要支撑。在可预见的未来内,图数据库与人工智能技术的结合应用将会带来更多创新和飞跃。图数据库至少能在以下四个领域帮助提升AI能力。第一,知识图谱,它为决策支持提供领域相关知识/上下文,并且帮助确保答适合于该特定情况。第二,图提供更高的处理效率,因此借助图来优化模型并加速学习过程,可以有效地增强机器学习的效率。第三,基于数据关系的特征提取分析可以识别数据中最具预测性的元素。基于数据中发现的强特征所建立的预测模型拥有更高的准确性。第四,图提供了一种保证AI决策透明度的方法,这使得通过AI得到的结论更加具有可解释性。AI和机器学习具有很大的应用潜力,而图解锁了这种潜力。这是因为图数据库技术支持领域相关知识和关联数据,使AI变得更广泛适用。除此以外,近年来,云端部署的图数据库(SaaS/DaaS)成为了又一个发展趋势。国内的众多大厂纷纷推出自研的云端图数据库产品,例如百度的HugeGraph、阿里的GDB、腾讯的TGDB、华为的GES图计算引擎。就总体趋势而言,我们能够预见,大数据时代,数据缺失不再是最大的挑战,我们渴求的是挖掘数据价值的能力,而数据的价值很大一部分在于数据之间的关联。图数据库和图分析作为处理关联数据最有效的技术和方法,一定会继续大放异彩,书写数据库应用的新篇章。来源:CSDN
  • [问题求助] wifi连接后通过QCOM_V1.6执行AT指令没有反应
    【功能模块】串口数据线连接后,启动QCOM_V1.6执行AT指令只反映send ok没有其他数据显示【操作步骤&问题现象】\esp_iot_sdk\bin\at这个路径没找到,所以也没看到什么readme,麻烦请教一下,我把实例代码烧录进去后,还需要单独烧录At指令这个么?如果需要单独烧录的话,以上的路径应该在资料的什么位置?
  • [技术干货] 网络参考模型与标准协议
    网络参考模型OSI(Open System Interconnect),即开放式系统互连。OSI参考模型,是ISO组织在1985年研究的网络互连模型,该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层):7.应用层对应用程序提供接口6.表示层进行数据格式的转换,以确保一个系统生成的应用层数据能够被另外一个系统的应用层所识别和理解。5.会话层在通信双方之间建立、管理和终止会话。4.传输层建立、维护和取消一次端到端的数据传输过程。控制传输节奏的快慢,调整数据的排序等等。3.网络层定义逻辑地址;实现数据从源到目的地的转发。2.数据链路层将分组数据封装成帧;在数据链路上实现数据的点到点、点到多点方式的直接通信;差错检测。1.物理层在媒介上传输比特流;提供机械的和电器的规约。因为OSI协议栈比较复杂,且TCP和IP两大协议在业界被广泛使用,所以TCP/IP模型成为了互联网的主流参考模型,目前我们常用的是TCP/IP对等模型。三者的对应关系如下图所示: 标准协议在TCP/IP对等模型中,常用协议如下: 应用层HTTP(Hypertext Transfer Protocol,超文本传输协议):是互联网应用最为广泛的一种网络协议,用来访问在网页服务器上的各种页面。FTP(File Transfer Protocol,文件传输协议):是一个从一台主机传送文件到另一台主机的协议,用于文件的“下载”和“上传”。Telnet(Telecommunication Network Protocol,电信网络协议):是数据网络中提供远程登录服务的标准协议。为用户提供了在本地计算机上完成远程设备工作的能力。SSH(Secure Shell,安全外壳):允许在本地计算机和远程计算机之间建立安全渠道,以保护网络不受诸如IP地址欺诈、简单口令截取等攻击。SNMP(Simple Network Management Protocol,简单网络管理协议):该协议允许远程用户查看和修改网元的管理信息。DNS(Domain Name Service,域名称解析服务):用于实现从主机域名到IP地址之间的转换。传输层TCP(Transmission Control Protocol,传输控制协议):为应用程序提供可靠的面向连接的通信服务。目前,许多流行的应用程序都使用TCP。UDP(User Datagram Protocol,用户数据报协议):提供了无连接通信,且不对传送数据包进行可靠性的保证。网络层 IP(Internet Protocol,互联网协议):将传输层的数据封装成数据包并完成源站点到目的站点的转发,提供无连接的、不可靠的服务。 IGMP(Internet Group Management Protocol,因特网组管理协议):负责IP组播 成员管理的协议。它用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。 ICMP(Internet Control Message Protocol,网际报文控制协议):基于IP协议在网 络中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。ARP(Address Resolution Protocol,地址解析协议):根据已知的IP地址解析获得其对应的MAC地址。 
  • [行业资讯] “乾”行百业 | 以工匠精神打造工匠摇篮,华为乾坤助力职业教育园区无线网络建设