• [流程编排] api流程互斥网关script条件怎么赋值
    1.5版本,api流程互斥网关script条件怎么赋值zjyd
  • [技术干货] ADC2.0-邮件、短信功能配置使用
    ADC2.0的邮件短信功能由Notice提供服务;当系统装notice过后,新创建的租户中才会在  管理员配置->通用配置 中生成一个 通知服务管理菜单:一、邮件配置点击菜单后可以在 邮箱配置中配置你的服务器等信息,根据提供的IP地址、邮箱、(用户名、密码)配置好后,点击'测试'按钮可以测试服务器是否连通,如果连通就可以点击'应用'配置好邮箱。然后就可以在左侧发送通知中发送邮件给用户二、短信配置点击短信网关配置,确认短消息编码协议,填写ip地址,端口,用户名,密码,发送短消息号码,接收短消息号码(仅用于测试功能,当该字段为空时测试功能不可用。)点击'测试'按钮可以测试服务器是否连通,如果连通就可以点击'应用'配置好短信网关。然后就可以在左侧发送通知中发送短信给用户注:邮件和网关的ip地址端口号,需要用户自己提供,环境不提供。
  • [技术干货] 2.0 procode使用
    Pro Code配置指南概述Pro Code 提供给用户开发自定义单页面工程的能力用户可以:l  通过“procode管理页面”或者“No Code 自定义组件” 页面下载cli工具;l  使用cli工具创建、上传“Pro Code工程”,然后配置对应菜单,即可直接访问工程页面;l  管理上传的“Pro Code 工程”。CLI工具使用安装离线CLI提供生成“No Code 自定义组件”组件模板, build组件等功能,下载CLI工具后在本地运行,具体支持功能可通过 adc  --help命令查看前提条件在本地使用CLI工具,需要提供Node v8.11.2以上版本。安装步骤a)     进入“Pro Code 管理”;b)     点击CLI工具下载链接将工具包下载到本地;c)      解压CLI工具包;d)     双击run.bat文件进行安装(请先阅读README.md,若以前安装过cli工具,请先卸载)。命令adc --help(adc命令提示,帮助菜单)adc config set执行如下命令,配置服务器信息adc config set protocol $adc config set host $adc config set port $第一个$表示服务器使用的协议,第二个$表示服务器IP地址,第三个$表示服务器端口号,请根据实际情况进行设置。如果是第一次使用该工具,需要执行如下命令配置代理。npm config rm proxynpm config rm http-proxynpm config rm https-proxynpm config set no-proxy .huawei.comnpm config set registry http://cmc-cd-mirror.rnd.huawei.com/npmnpm config set @adc:registry http://npm.cloudartifact.szv.dragon.tools.huawei.com/artifactory/api/npm/npm-adc-release/执行adc config list命令,查看配置信息port=38443protocol=httpshost=100.95.72.5use-basic-auth=trueadc set-auth执行如下命令。adc set-auth界面显示如下:? Input your tenant admin? Input your username admin? Input your password ****adc init初始化“Pro Code 工程”:选择“project”,根据操作提示,输入相关信息,便会初始化一个 “pro code 工程”。adc run进入当前工程所在目录,执行adc run命令,运行工程。adc build打包“Pro Code 工程”:打包文件在项目下生成:在页面上传上传到服务器。本地开发模板Cli目录结构开发时主要目录project(component name)│              └───src                 *【开发目录】│   └───app         │   │   └───app.vue    *【首页vue页面】│   │   └───index.js    *【全局一些工程相关配置(例如:全局引入三方插件配置及国际化配置)】 │   └───components  *【在这里开发相关页面组件】│   │   └───nav      *【示例组件】│   └───router           *【页面路由配置】│   └───views            *【页面视图页面(路由中相关页面可在这里开发)】│   │   └───home          *【路由示例home】│   │   └───example        *【路由示例 example】└───webpack           *【webpack打包相关配置】│ └───package.json        *【三方依赖插件及工程包相关信息配置】└───...以上目录结构中出现 “ * ” 的是需要关注的目录。其他目录在正常的开发中无需关注。标记的目录名称在build时会拷贝到生产目录下,切勿改名。)开发注意事项若调用环境上逻辑流服务,需配置如下操作:1.       先配置如下文件(webpack\dev.server.js)将该段代码,复制到文件下该位置:proxy: [{context: ['/adc-service', '/adc-studio-web'],target: 'https:///',changeOrigin: true,secure: false}],其中target 填写自己环境的域名;具体示例如下截图:2. 本地代码先启动,然后登陆环境,将环境中 “MATEINFO_SESSION_ID”这个cookie值复制到本地启动的页面中,如下图:开发示例Procode中使用axios调用平台逻辑流服务,展示echarts图表。1、  先通过npm安装axios与echarts,然后在src/app/index.js 中全局引入echarts,及axios。2、  在src/components目录下,创建demoEcharts 组件,然后进行相关配置,如下:3、  在src\components\demoEcharts\demoEcharts.vue 中开发需要展示页面,如下:
  • [交流分享] WLAN实战项目配置
    一、实战项目目标:(1)通过组网设计,掌握小型网络的组建、无线AC控制器的配置,对网络使用无线设备范围、无线认证和信道进行分析;(2)综合运用路由、防火墙安全规则、NAT和无线AC控制器;(3)通过使用无线AC控制器对网络中的无线AP进行管理,设置无线规则和认证策略,配置DHCP地址池,对无线AP和通过AP连接的设置进行动态地址分配。二、用户需求分析:对于小型局域网中,对于接入设备的需求,需要在局域网中部署无线网络,通过无线控制器AC管理网络中所有的无线AP设备,下发无线配置信息,无线网络发布2.4G和5G信号,满足不同设备的连接使用。三、网络拓扑规划:(1)防火墙连接外网网卡地址为192.168.20.9/24,路由器与核心交换机通联地址为192.168.2.0/24,防火墙安全规则只允许网络中无线网络中地址可以访问外网。(2)配置路由器与防火墙之间连接地址为192.168.5.0/24网段,配置与交换机互联地址为192.168.2.2/24。(3)核心交换机配置vlan 3为连接无线网络设备,网关地址为172.16.3.1 /24,配置vlan1002为连接路由器,IP地址为192.168.2.1/24。(4)AC控制器管理地址为192.168.3.1/24,设置vlan1003为AC和AP之间管理VLAN,配置DHCP地址池,使AP可以自动获取管理地址。
  • [技术干货] 【2.0】流程网关的使用
    1. 排他网关1.1   概念排他网关定义了一组分支的唯一决策,所有流出的分支被顺序评估,第一个条件被评估为true的分支被执行,并不再继续评估下面的分支。即排他网关之后的多条分支只会执行一条分支1.2   验证(1)创建一个自动流程(2)开始节点定义一个变量condition为a(3)网关后三个分支分别判断contidion的值         condition is a分支条件condition is b分支条件condition is c分支条件(4)调试流程验证        流程执行了condition is a分支2. 并行网关2.1概念并行网关根据前置连线或后继连线,无条件创建分支或回收分支。即并行网关之后所有分支都会执行。2.2验证(1) 创建一个自动流程(并行网关需要成对使用,否则可能会出现一个分支走完其他分支走不下去的情况)。(2)开始节点定义一个变量condition为a(3)网关后三个分支分别判断contidion的值condition is a分支条件condition is b分支条件condition is c分支条件(4)调试流程验证流程执行了所有分支,即配置条件是无效的3. 包容网关3.1概念包容网关是排他网关和并行网关的综合体。当决策时,与排他网关所不同的是,所有条件为true的后继分支都会被执行。即包容网关之后所有满足条件的分支都会执行。3.2验证(1)创建一个自动流程(包容网关需要成对使用,否则可能会出现一个分支走完其他分支走不下去的情况)(2)开始节点定义变量condition为a,condition1为b,condition2为c(3)网关后三个分支分别判断contidion、condition1、condition2的值condition is a分支条件condition1 is b分支条件condition2 is b分支条件(5)调试流程验证流程执行了condition is a和condition1 is b分支,即执行了符合条件的分支。
  • 组播包是三层交换机就可以转发的还是必须经过路由器转发的?
    组播包是三层交换机就可以转发的还是必须经过路由器转发的?
  • [技术干货] 路由器和三层交换机区别
    路由器用于网络出口(几万人的园区,可能只有2台出口路由器)三层交换机用于汇聚节点和核心(几万人的园区,有几十台 三层交换机做汇聚/核心交换机)一些基础功能,如OSPF/BGP/MPLS,路由器和三层交换机均能很好支持。正是由于路由器和三层交换机使用位置的不同,塑造他们的差异化:1.接口形态:路由器用于连接运营商,运营商甩给用户的线路可以有ATM、POS、CPOS、以太网等多种线路,路由器都需要支持;而我们平时所说的三层交换机一般只支持以太网接口,接口数量非常多(毕竟用在园区内部)2.功能:路由器用于园区出口,承担访问互联网的功能,支持NAT/IPSEC等功能;这些功能90%的三层交换机是不支持的。3.性能:三层交换机组建的是内部高速路,到了出口路由器就进入国道了。交换机上10G/40G/100G接口都可以灵活扩展;而一般园区网出口路由器不需要太高性能,够用即可,就算插个100G板卡,也买不起运营商100G链路呀,太贵!4.成本:高端路由器比高端交换机价格贵,路由器单接口成本也更高。支持500个接口的交换机很多,但能有500个接口的路由器已经非常贵了。5.厂商情况:思科是做路由器起家,后来收购了Catalyst,开始出交换机;华为重点运营商,运营商/金融/公安这类纵向网,都是路由器大户,所以至今华为的路由器也比交换机做得好;新华三数通优势在交换机,毕竟全球第一款交换机就是他的前 前 前 东家3COM公司搞出来的;迈普以前重点行业是金融、运营商低端设备,路由器做得比交换机好;锐捷重点校园网,应该是最大的园区网了吧,也是交换机起家。
  • [交流分享] 路由器和三层交换机区别
    路由器用于网络出口(几万人的园区,可能只有2台出口路由器)三层交换机用于汇聚节点和核心(几万人的园区,有几十台 三层交换机做汇聚/核心交换机)一些基础功能,如OSPF/BGP/MPLS,路由器和三层交换机均能很好支持。正是由于路由器和三层交换机使用位置的不同,塑造他们的差异化:1.接口形态:路由器用于连接运营商,运营商甩给用户的线路可以有ATM、POS、CPOS、以太网等多种线路,路由器都需要支持;而我们平时所说的三层交换机一般只支持以太网接口,接口数量非常多(毕竟用在园区内部)2.功能:路由器用于园区出口,承担访问互联网的功能,支持NAT/IPSEC等功能;这些功能90%的三层交换机是不支持的。3.性能:三层交换机组建的是内部高速路,到了出口路由器就进入国道了。交换机上10G/40G/100G接口都可以灵活扩展;而一般园区网出口路由器不需要太高性能,够用即可,就算插个100G板卡,也买不起运营商100G链路呀,太贵!4.成本:高端路由器比高端交换机价格贵,路由器单接口成本也更高。支持500个接口的交换机很多,但能有500个接口的路由器已经非常贵了。5.厂商情况:思科是做路由器起家,后来收购了Catalyst,开始出交换机;华为重点运营商,运营商/金融/公安这类纵向网,都是路由器大户,所以至今华为的路由器也比交换机做得好;新华三数通优势在交换机,毕竟全球第一款交换机就是他的前 前 前 东家3COM公司搞出来的;迈普以前重点行业是金融、运营商低端设备,路由器做得比交换机好;锐捷重点校园网,应该是最大的园区网了吧,也是交换机起家。
  • [问题求助] Hilink 能支持多大内存的路由器刷系统?
    因为 手上 有 很多 限制的   路由器  ,希望 可以 刷上  华为的  智能 家庭 系统 这样就  可以 对接 家里的  小艺 音箱  和 智能 台灯 ,还有  之前的  一些 美的 家电 希望 可以  得到 一些  教程  目前 是 斐讯 的 路由器  和  TP  的迅雷的 NAS  不知道 能不能 刷上 华为 系统   
  • [技术干货] 无线传感器网络——树类路由协议
    >层次(分簇)型路由:网络被划分为若干个簇,每个簇由一个簇头节点和若干个簇成员节点组成。簇头节点负责簇内成员节点数据信息的收集和融合处理,以及簇间数据的转发。分簇协议中设计簇头的选举策略是一个重要议题。典型的分簇路由协议有:LEACH、PEGASIS、HEED等! # 背景 1.无线传感器网络由于其节点的能量有限,应用场景复杂多变,因此网络的动态性较大,节点往往会由于某种原因而失效,这种情况称为弹性。 2.为了解决WSN中数据传输的可靠性问题,**一种常见策略是采取多条路径的路由策略**。利用冗余路径,当一条路径失效时,可以选择其余路径。在多路径路由当中,通常多条路径中性能最优的路径作为主路径,其余路径则作为备选路径。性能最优可以根据需要定义不同的衡量标准。 通常,多路径路由有两种:一种是**分离多路径**,另一种则是**缠绕多路径**。 3.多路径的弹性和维护开销有着密切关系:弹性好,意味着协议能够快速检测到路径失效并切换到另外的路径上 # 1.SAR路由协议 SAR(Sequential Assignment Routing)有序分配路由协议是第一个在无线传感器网络中保证QoS的主动路由协议,也是一种基于多路径的路由协议。 为了建立起从每个节点到达汇聚节点的多径路由,从汇聚节点的邻居节点开始为树根,依次扩展建立树状结构。从汇聚节点开始,每一个树都会尽可能地向具有满足QoS或者剩余能量较多的邻居节点延伸和扩展。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/112625r9shbe8re1sntfjb.png) # 2.LEACH路由协议 LEACH是一种低功耗自适应聚类路由协议,它打破了原有成簇算法中固定簇头的思想,采用本地簇头随机轮循机制将能量负载均匀分布到网络中的所有节点,提升了簇状无线传感器网络的性能。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/112726yxippsgwyrxvwaom.png) ## 2.1 LEACH路由协议的基本思想 LEACH基本思想:将节点组织成簇结构形式,每个簇有一个簇头节点(Cluster Head Node),其他节点作为非簇头节点。所有的非簇头节点只与本簇的簇头节点通信,数据由簇头节点传输到Sink节点。 簇头节点除了传输非簇头节点的数据外,还要执行数据融合功能。因此,簇头节点要比非簇头节点消耗更多能量,为避免节点长期担当簇头而过早耗尽能量,LEACH使用轮转的方式选举节点成为簇头节点,从而让所有的节点都有机会成为簇头节点而达到网络中节点能量消耗均匀的目的。 其拓扑图如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/11284249ktqrqgarg10mfu.png) ## 2.2 LEACH路由协议的优点 - 由于采用层次结构,使得节点路径的选择及路由信息的储存都非常简单直接,节点不需要储存大量路由信息,比较适合无线传感器网络。 - 簇头随机选取,无需全网命令控制,实现比较容易。而且节点机会均等,网络负载比较均衡。 - LEACH中采用的成簇技术使网络具有很好的扩展性,同时簇头的轮转选择使网络具有较强的抗毁性。 - 传感器节点对信息收集是集中和周期性的,因此该协议能良好的应用于持续监测的区域。 ## 2.3 LEACH路由协议的缺点 - 在LEACH算法中,所有节点都与簇头节点通信,而簇头节点又要与Sink节点进行通信,簇头能量消耗将大大增加,会导致其过早死亡。一旦簇头节点死亡失效,就会导致其簇内成员不能将数据传送到Sink节点,使网络覆盖不全; - 在所有节点初始能量相同的前提下,LEACH在选取簇头时没有考虑到节点当前能量问题。当节点当前能量较低时,继续担任簇头节点,将加快其死亡而成为盲节点。过多的盲节点会降低网络平均生命周期,导致路由协议的低效率。 - 选择簇头的方法无论从数量上还是分布位置上往往呈现较大不确定性 # 3. PEGASIS路由协议 PEGASIS(Power-Efficient Gathering in Sensor Information Systems),一种基于LEACH协议基础上建立起来的路由协议,主要解决LEACH协议中由于簇头频繁变更,导致通信开销较大的问题。 PEGASIS协议并不采用全网多个簇头的方案,而是只采用一个簇头,其将全网看成是一个簇群,并将其称为链。簇头节点与汇聚节点能够通过一跳通信,其余传感器节点只能通过多跳的形式与簇头节点通信。 PEGASIS将全网看成是一个链,因此簇头节点将链分成两部分,而数据分别从两端传输至簇头节点。 在传输的过程中,每个节点必须知道自己的所在地理位置,以便在转发时采用贪心策略,将数据转发给与其距离最近的节点,并在转发过程中应做相应的数据融合。当两端数据发送完毕后,进行下一轮簇头节点的选择。 ## 3.1 PEGASIS路由协议的缺点 - 一旦簇头出现故障,整个网络将陷于瘫痪; - 协议假定每个节点均能直接与汇聚节点通信,而在实际网络中,传感器节点一般是通过多跳的形式传输数据以减少能量消耗; - 每个节点需要知道邻居节点的能量状态以及地理位置信息,需要大量的能量开销; - 远距离的节点(链尾)会有较大的信息延迟;
  • [技术干货] 无线传感器网络——简单的无结构路由协议
    >Flooding和Gossiping两个路由协议是传统网络中最为经典和简单的路由协议,它们都是基于洪泛机制的路由协议,可以应用到无线传感器网络中。 # 1.Flooding路由协议 Flooding路由协议不要求维护网络的拓扑结构和相关路由计算,仅要求传感器网络节点在接收到信息后以广播的方式向邻居节点转发数据包,邻居节点重复执行上述过程(转发时除去刚刚发送给它们的节点),直到数据包到达目的地或者该数据包的生命周期结束。特别指出的是,无线传感器网络中数据包的生命周期TTL(Time To Live),一般预先设定这个数据包所转发的最大跳数。 ## 1.1基本过程 - 源节点A需要将数据包p发送至汇聚节点D - 节点A首先将p的副本广播,则其邻居节点B接收到p副本 - 节点B直接将p副本通过广播的形式转发给E、F、C - 以此类推,直到p到大汇聚节点D或到达TTL ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/111753t8x2yy1xk22igvbu.png) ## 1.2 Flooding路由协议的优缺点 **缺点:**Flooding路由协议的漏洞十分明显且致命的,主要有以下3个方面: ① 信息内爆(Implosion):网络中的节点收到一个数据的多个副本。 ② 部分重迭(Overlap)现象:由于WSN中节点密集部署,因此在同一局部区域中,若干个节点对区域内同一个事件做出的反应相同,数据相近,这些节点的邻居节点所接收到的数据副本也具有较大的相关性。 ③ 网络能耗高:未考虑各节点能量可用状况,在任何情况下都转发数据。 **优点:**简单。每个节点只需将接收到的数据包进行广播,而无需查找路由表;其次,无需特殊的算法保持网络拓扑信息的更新以及新路由的发现。 >尽管Flooding路由协议在数据传输时能量消耗巨大,网络生命周期一般较短,不适应大规模的网络,但具有路径容错性好,传输延时短的优点,适用于对数据可靠性要求较高的应用场景。 # 2.Gossiping路由协议 **Gossiping路由协议,即闲聊路由协议,是对Flooding协议的改进**。 当节点接收到数据之后,是按照一定概率随机地将数据包转发给邻居节点中不同于发送节点的某一个节点,这个节点以相同的方式向其邻居节点进行数据转发直到数据到达汇聚节点。 Gossiping路由协议考虑了节点的能量消耗,因此在选择下一跳时**只选择一个节点进行数据转发**,但在每次选取下一跳节点时,并没有采用路径优化相关算法,因此所选择的路由往往不理想,这将导致数据包的端到端延时增加或者没到达目的节点之前就结束。 ## 2.1 步骤 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/112124jlt1erc9uxusjdul.png)
  • [技术干货] 无线传感器网络中的路由
    路由协议的作用是寻找一条或多条满足一定条件的,从源节点到目的节点的路径,将数据分组沿着所寻找的路径进行转发,路由协议的功能主要有: - 一、搜索满足条件的优化路径 - 二、转发资料分组 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/1109468gpua8mgrxgydihq.png) ## 路由协议的设计需求 传统有线网络的路由协议主要运行在路由器上,采用集中控制的路由寻找方法。 而WSN中,路由协议的设计必须考虑: -(1)运行于无源节点上,节能是首要目标; -(2)节点运算能力有限,协议不能过于复杂; -(3)尽量提供高质量服务,合理利用无线带宽,避免发生网络拥塞,能够以较快速度响应服务请求。 **路由协议类型:** ① 以数据为中心的路由协议 ② 基于层次结构(树结构)的路由协议 ③ 基于地理信息路由协议 ④ 基于多路径的路由协议 ## 平面路由协议 平面型路由协议:各个节点间的地位平等,节点通过局部信息来生成路由,其优点是结构简单,鲁棒性较好,但对网络动态变化的反应较慢。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/1112200jsexo03eiovvr3x.png) ## 层次(分簇)型路由 层次(分簇)型路由:网络被划分为若干个簇,每个簇由一个簇头节点和若干个簇成员节点组成。簇头节点负责簇内成员节点数据信息的收集和融合处理,以及簇间数据的转发。分簇协议中设计簇头的选举策略是一个重要议题。典型的分簇路由协议有:LEACH、PEGASIS、APTEN、HEED等。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/29/111247fkfjdoa7umf8qz9t.png) ## 路由设计的关键问题 无线传感器网络在设计路由协议时一个最重要的目标就是在传输数据的同时,最大限度地延长网络寿命并且避免网络连通性降低。因此,在设计路由协议时需要考虑到以下关键问题: ① 节点部署。部署方案:① 手工 ② 随机 ② 数据精确性前提下的能耗 ③ 以数据为中心的数据报告模型 ④ 鲁棒性与容错性 ⑤ 网络动态性 ⑥ 数据融合
  • [分布式并行] 【转载】动态路由条件计算-万亿级参数超大模型关键技术与MindSpore支持(2)
    本文是Switch Transformer的动态路由条件计算的模型分析的第二篇-算法实现。动态路由条件计算的原理介绍可以参见:金雪锋:动态路由条件计算-万亿级参数超大模型关键技术与MindSpore支持(1)​zhuanlan.zhihu.com实现策略实现各种模型的带有动态路由稀疏激活的超大规模参数版本,需要分模型研究和实现。以Switch Transformer为例,其参数扩展到部分在Transformer的FFN部分。其MoE化扩展,如下图:可见,MoE化主要变化在需要Expert子网络前后增加MoE相关的逻辑。本文主要介绍平台上的实现。动态路由条件计算,主要包括四个步骤:路由计算、数据分派、独立计算,结果合并。1. 路由计算-Gate:根据输入(可以为整个网络的输入,或者前面网络单元/层的输出),在路由单元完成计算,在以batch内sample-wise的路由中,计算出每个样本要分派的后续网络路由(Mixture-of-Experts/MoE中的专家)。2. 数据分派-Dispatch:从输入的整体的Tensor中,按照路由计算的样本-专家关系,收集合并出每个专家需要处理的Tensor。如果在固定expert-batch的设计中,要平衡每批训练中,分派到每个专家的样本数和专家每轮训练最大容量,由于样本输入的随机性,很难保证较为均匀的分派,对于低于最大容量的批次,对固定batch-size的要做pad,对于高于最大容量的样本,可以采用延后重采样等方式。为了维护正确的输入输出关系(Input/X – Label/Y)和训练是反向传播的求导关系,实现中需要维护原始batch到每专家的sub-batch的index关系,在后来求导和结合合并时使用。3. 独立计算-Expert:并发(逻辑上可以先后)调用各个专家处理对应的sub-batch。这也是智能平台要支持的并发API之一。4. 结果合并-Combine:合并每专家的结果tensor到整个batch的tensor,并按照数据分派索引,交换到原始输入的顺序。在主流的深度学习智能平台中,可以采用两类主要的实现策略:张量置零:对需要分派到不同的后续网络单元(专家网络子网等),对需要分派的专家拷贝若干份tensor,对于不应输入当前专家处理的数据维度置零。该方式在保证置零计算逻辑正确的情况下,实现简单,全张量操作,对平台无特殊要求,适用于算法研究,仅体现条件计算前序数据被动态路由到不同的后续网络单元,分析算法的效果。如果通过置零方式,该方法每个专家处理的tensor在batch维度大小是全batch,不能节省计算量和内存使用量。张量整理:对需要分派到不同的后续网络单元(专家网络子网等),对需要分派的专家拷贝若干份tensor,对于不应输入当前专家处理的数据维度不保留。并维护好sample级的index在变换前后的对应关系。在分布式友好的实现中,如果专家子网为单位被划分到不同的计算节点,那么专家网络的实现最好从子网级的平台对象继承后实现,比如:MindSpore中的mindspore.nn.Cell。详细实现细节参见后续技术实现章节。核心代码:路由计算、数据分派、独立计算,结果合并参考代码采用MindSpore示意实现。(注:import mindspore as ms)Mixture of Experts的核心逻辑,对输入I,经过routing_network(最简单*W即可),然后topk(若变种算法需要gate权重则需要softmax,否则可不),然后用tensor的操作(可按照batch)选择出每个subnetwork/expert的张量。为方便调试,采用了规模极小的非随机的确定数值构造输入和路由权重,路由网络采用简单的X*W。1、路由 data_inputs = ms.Tensor([ [0.1,0.9], [0.8,0.8], [0.9,0.1], [0.1,0.9], [0.9,0.1], ]) #假设输入为5个样本,每个2维,当然可以扩展到高维 (batch,dimension) = (5,2) gate_weights = ms.Parameter(ms.Tensor([ [0.1,0.5,0.9], [0.9,0.5,0.1], ] , ms.float32) , requires_grad=True) #假设路由门权重,3个专家,每个2维和输入一样 (dimension,experts) = (2,3)当上述输入5行(仅3类,希望分派给3个专家)样本,和Gate权重做矩阵乘后,可以明确算出每个样本要分派的专家。可以用matmul,也可以类似gates_weighted = einsum('bd,de->be', [data_inputs, gate_weights])第一轮矩阵乘的结果为: gates_weighted= [[0.8200, 0.5000, 0.1800], [0.8000, 0.8000, 0.8000], [0.1800, 0.5000, 0.8200], [0.8200, 0.5000, 0.1800], [0.1800, 0.5000, 0.8200]]输入和权重乘法,在python中可以采用@,也可以采用matmul,也可以采用爱因斯坦求和简记忆法函数einsum。当是简单的矩阵乘的时候,采用einsum在计算图编译的时候实际会拆分成多个算法,性能并不好;但当输入和权重超过2维,需要以batch维固定做路由计算的时候,使用einsum可以编程实现很简单。2、分派条件计算的分派,主要逻辑是根据路由网络的输出,为每个样本计算出top-k的专家。其实现可以通过topk函数实现。 由于top选择score可作为后续网络单元的输入信息(含路由的信息),所以一般要对路由输出做softmax做归一化。 gates_softmax = softmax(input=gates_weighted, axis=-1) 按需计算1:all-N专家之间的归一化权重 (please refer to #2) ,gates_weighted一样,按照dim=-1做了归一化而已其输出为: gates_softmax= [[0.4438, 0.3222, 0.2340], [0.3333, 0.3333, 0.3333], [0.2340, 0.3222, 0.4438], [0.4438, 0.3222, 0.2340], [0.2340, 0.3222, 0.4438]]为batch中每个sample选择Top-K个专家 这里为batch中每个的专家权重,可以从softmax-ed来top-k,也可以直接从gates_weighted来top-k;由于这里可能不做softmax或者延后,所以可gates_weighted,这里为batch中每个的专家序号gates_topk_value, gates_topk_index =topk(gates_softmax, 1) 其输出为: gates_topk_value= [[0.4438], [0.3333], [0.4438], [0.4438], [0.4438]] gates_topk_index= [[0], [1], [2], [0], [2]])接着:gates_topk_softmax = softmax(gates_topk_value) 按需计算2: top-n专家之间的归一化权重如何根据分派索引,从原始的输入中,为每个专家提取出属于该专家处理的tensor,在当前的主流智能平台,都没有专门的算子,可以通过其他算子的组合来实现类似的效果。在MindSpore中,可以通过底层的C++实现算子,也可以通过Python中继承Cell并实现bprob, 然后将原始 gate tensor中按照index组织到目标输出中。这里我们实现一个Dispatch类 class Dispatch(ms.nn.Cell): def __init__(self, expert_number): super().__init__() self.expert_number = expert_number self.reshape = ms.ops.Reshape() self.concat = ms.ops.Concat() self.zeros = ms.ops.Zeros() self.add = ms.ops.AddN() def set_indices_in(self, indices_in): #可以作为construct的参数 self.indices_in = indices_in def get_indices_out(self): #可以用construct的返回值返回 return self.indices_out def construct(self, data): dispatch = [] indices_out = [] for _ in range(self.expert_number): dispatch.append([]) indices_out.append([]) for uid,(idx,dat) in enumerate(zip(self.indices_in, data)): dat = self.reshape(dat, (1, dat.shape[0])) if len(dispatch[idx]) == 0: dispatch[idx] = dat indices_out[idx] = [uid] else: dispatch[idx] = self.concat((dispatch[idx], dat)) indices_out[idx] = indices_out[idx]+[uid] self.indices_out = [y for x in indices_out for y in x] return dispatch def bprop(self, data, out, dout): #反向梯度计算 dall = None for one in dout: if dall == None: dall = one else: dall = self.concat((dall, one)) do = self.zeros(dall.shape, ms.float32) for idx_target, idx_source in enumerate(self.indices_out): do[idx_target] = self.add((do[idx_target], dall[int(idx_source)])) return do3、独立计算直接并行调用后续的专家网络。并行部分可以通过平台来支持。可以通过特殊的函数或者annotation等标识,也可以由平台编译时优化为并行执行。(在非动态路由条件计算的网络模型中,一般不存在类似的优化。)4、合并合并的逻辑相对简单,先通过cat按照batch维度做拼接,然后构造正确的zeros tensor用index_add按照索引将各个专家网络的结果在保持input序合并到一起,做为该MoE模块的输出。class Combine(ms.nn.Cell): def __init__(self): super().__init__() self.zeros = ms.ops.Zeros() self.add = ms.ops.AddN() def set_indices(self, indices): #可以作为construct的参数 self.indices = indices def construct(self, data): O = self.zeros(data.shape, ms.float32) for idx_target, idx_source in enumerate(self.indices): O[idx_target] = self.add((O[idx_target], data[int(idx_source)])) return O def bprop(self, data, out, dout): #反向梯度计算 do = self.zeros(dout.shape, ms.float32) for idx_target, idx_source in enumerate(self.indices): do[idx_target] = self.add((do[idx_target], dout[int(idx_source)])) return do上述完成了整个MoE的完整计算过程。代码框架我们按照上述基本动态路由条件计算的张量操作为主的逻辑,扩展到一个完整的训练代码框架中:class Dispatch(ms.nn.Cell): 实现路由中的分派逻辑class Combine(ms.nn.Cell): 实现路由中的组装逻辑class Route(ms.nn.Cell): 完成整个动态路由逻辑,可以实现为相对通用的类class Expert(ms.nn.Cell): 平台用户自定义的专家网络class Network(ms.nn.Cell): 平台用户自定义的大网络class MSELoss(ms.nn.Cell):实现MSE损失,实现辅助损失的逻辑class OutputLossGraph(ms.nn.Cell):输出infer和loss,PyNative模式单步class Dataset: 数据集类,仅满足输入shape和X-Y合理对应关系,仅仅示例def train( …): 训练入口完整的代码在mindspore官网:https://gitee.com/mindspore/mindspore/new/master/model_zoo/research/moe/moe.py条件计算实现技术点1)动态路由不可学习路由如使用LSH (locality sensitive hashing)做路由:在整个可学习网络的前端,使用LSH来分派样本,这样可以避免LSH部分求导问题;如果在网络中间增加LSH模块,需要通过梯度估计完成确定性算法部分梯度传递。可学习路由简单的做法,定义gate_weights为可学习Parameter,对于二维的张量,通过python@或者matmul等完成权重路由计算;如果是更高维度的张量,且需固定batch维,einsum('bd*,*de->b*e')的形式完成计算。2)topk和softmax的前后关系在G_1(x)=softmax(topk(X*W)))和G_2(x)=topk(softmax(X*W)))两类Gate实现中,将softmax置于Topk前后,对top-k的选择不变;当需要将G_*作为后序网络输入的一部分,即将路由权重信息作为后续网络输入信息,则需要考虑:需要all-N专家之间的归一化权重,则softmax置于top-k之前;否则softmax置于top-k之后,来计算top-N专家之间的归一化权重。3)如何每专家在批次处理中平衡按照每样本的路由权重求和,即对batch单个样本被分配的1+个export的重要性和权重求和,计算出importance;按照每样本的路由权重中非0的求和,计算出有负载的专家来求得load。将coefficient_of_variation(importance) + coefficient_of_variation(load)作为auxiliary_loss参与优化,来平衡importance和load。变异系数(Coefficient of Variation)是用于无量纲度量数据的离散程度,越离散在此处表示均衡性越差,需要向更小优化。在Transformer等多层(多处)MoE的模型中,将多组auxiliary_loss联合作为auxiliary_loss, 在加dominated_loss之后即可。分布式友好动态路由在https://arxiv.org/abs/2006.16668(https://github.com/lucidrains/mixture-of-experts)中,直接矩阵操作,不做输入张量的切分,并不是分布式优化好。在https://arxiv.org/abs/1701.06538 (https://github.com/davidmrau/mixture-of-experts)中,对每专家需要处理的batch做tensor选择组合,将专家实现为mindspore的Cell,可以分布式训练和推理的时候,编译优化到不同的计算节点,是更分布式友好的实现形式,可以从Cell大粒度级别做子图切分。转自文章链接:https://zhuanlan.zhihu.com/p/367475005转自作者:金雪锋感谢作者的努力与分享,侵权立删!
  • [问题求助] 【Atlas200DK】【联网】没有路由器,仅有网线和usb,想让Atlas200DK上网
    【功能模块】没有路由器,仅有网线和usb,想让Atlas200DK上网【操作步骤&问题现象】1、根据连接 DK_NetworkConnect/Readme.md · Atlas200dk/sample-README - Gitee.com得知Atlas200dk上网有两种方式,其中第二种需要网口,然后看第一种。2、第一种需要执行sudo iptables -t nat -A POSTROUTING -o enp2s0 -s 192.168.1.0/24 -j MASQUERADE,可我的板子上没有iptables模块,又不能sudo安装,因为板子没联网,于是我就在虚拟机上下了一个iptables的deb安装包,然后scp到板子上,就不知道咋办了3.如果有其他的上网方法,还望指教。【截图信息】如图,板子上没有iptables然后scp了一个deb包到板子上,但是不知道怎么安装【日志信息】(可选,上传日志内容或者附件)
  • 有换过荣耀猎人路由 5G双千兆的吗
    使用起来怎么样