《机器学习系统:设计和实现》以MindSpore为例的学习(2)

机器学习系统:设计和实现

3.计算图

3.2计算图的组成

在这里插入图片描述

3.3计算图的生成

1.静态生成
在这里插入图片描述
静态图的生成与执行原理如 图3.3.1 所示,采用先编译后执行的方式,该模式将计算图的定义和执行进行分离。在静态图模式下使用前端语言定义模型形成完整的程序表达后,并不使用前端语言解释器进行执行,而是将前端描述的完整模型交给计算框架。框架在执行模型计算之前会首先对神经网络模型进行分析,获取网络层之间的连接拓扑关系以及参数变量设置、损失函数等信息,接着用一种特殊的静态数据结构来描述拓扑结构及其他神经网络模型组件,这种特殊的静态数据结构通常被称为静态计算图。静态计算图可以通过优化策略转换成等价的更加高效的结构。当进行模型训练或者推理过程时,静态计算图接收数据并通过相应硬件调度执行图中的算子来完成任务。
在这里插入图片描述
2.动态生成
在这里插入图片描述
在静态生成环节,由于已经获取完整的神经网络模型定义,因此可以同时构建出完整的前向计算图和反向计算图。而在动态生成中,由于边解析边执行的特性,反向梯度计算的构建随着前向计算调用而进行。在执行前向过程中,计算框架根据前向算子的调用信息,记录对应的反向算子信息以及参与梯度计算的张量信息。前向计算完毕之后,反向算子与张量信息随之完成记录,计算框架会根据前向动态图拓扑结构,将所有反向过程串联起来形成整体反向计算图。最终,将反向图在计算硬件上执行计算得到梯度用于参数更新。

在这里插入图片描述
动态图模式下拥有简洁的接口和编程体验,具备友好的调试交互机制。代码按照编写顺序即时执行,符合我们在编写模型的直观感受和习惯。可以快速将算法思想转化为实际代码。静态图模式下可以分离前后端语言,编译解析前端语言构建的整体网络结构,并进行优化后以高效后端语言执行,可以直接用于部署。

3.4 算子调度执行

在这里插入图片描述
上图是一张有向无环图。图中包含了a,b,c,d,e五个节点和a->d,b->c,c->d,d->e四条边(a->d表示d依赖于a,称之为依赖边)。将图的依赖边表达成节点的入度(图论中通常指有向图中某点作为图中边的终点的次数之和),可以得到各个节点的入度信息(a:0, b:0, c:1, d:2, e:1)。拓扑排序就是不断循环将入度为0的节点取出放入队列中,直至所有有向无环图中的节点都加入到队列中,循环结束。例如,第一步将入度为0的a,b节点放入到队列中,此时有向无环图中c,d的入度需要减1,得到新的入度信息(c:0, d:1, e:1)。以此类推,将所有的将所有的节点都放入到队列中并结束排序。
生成调度序列之后,需要将序列中的算子与数据分发到指定的GPU/NPU上执行运算。根据算子依赖关系和计算设备数量,可以将无相互依赖关系的算子分发到不同的计算设备,同时执行运算,这一过程称之为并行计算,与之相对应的按照序贯顺序在同一设备执行运算被称之为串行计算。在深度学习中,当数据集和参数量的规模越来越大,我们在分发数据与算子时通信消耗会随之而增加,计算设备会在数据传输的过程中处于闲置状态,此时采用同步与异步的任务调度机制可以更好的协调通信与训练任务,提高通信模块与计算设备的使用率,在后续的小节中将详细介绍串行与并行、同步与异步的概念。

3.4.2 串行与并行

1.串行
算子的串行

2.并行在这里插入图片描述
并行包括算子并行、模型并行以及数据并行。算子并行不仅可以在相互独立的算子间执行,同时也可以将单个算子合理的切分为相互独立的两个子操作,进一步提高并行性。模型并行就是将整体计算图进行合理的切分,分配到不同设备上进行并行计算,缩短单次计算图迭代训练时间。数据并行则同时以不同的数据训练多个相同结构的计算图,缩短训练迭代次数,加快训练效率。这三种并行方式将在后续章节中进行详细讲解

3.4.3 数据载入同步与异步机制

1.同步在这里插入图片描述
2.异步
在这里插入图片描述
3.异步并行
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值