1. 前言
executor在MXnet中扮演着连接各个组件的作用,它根据symbol构建graph,它通过方法forward, backward将操作传递给engine,完成计算,它还负责了很多转换的工作。
2. executor.h
该文件定义了executor
的接口:
-
Forward
:前向计算 -
PartialForward
:计算部分前向计算 -
Backward
:反向传播 -
outputs
:返回输出 -
in_arg_map
:输入的字典表示 -
arg_grad_map
:梯度的字典表示 -
aux_state_map
:状态变量的字典表示 -
Reshape
:改变输入,输出的大小 -
Bind
:将symbol转换为executor
3. graph_executor
GraphExecutor
是Executor
的子类,是接口的具体实现,用于计算图的执行。
-
Bind
:bind
其实是我们在训练过程中一定会使用到的,只是MXNet的module对它进行了封装,当我们调用Module的bind方法时,就会建立一个DataParallelExecutorGroup
,它在初始化的时候会对传递给它的symbol
在每个context
建立一个模型,来完成多卡的数据并行的训练。在建立的时候,调用的是symbol
的simple_bind
方法。simple_bind
方法完成了很多的处理(源码很长一段),最终返回一个executor
。在MXNet中支持了一些变量是多种类型的情况,因此多了很多代码,个人感觉还是固定一种输入形式更加清晰。 -
Init
:Bind
调用了Init
方法,该方法完成一个executor的初始化工作,它调用InitGraph
来将一个symbol和各种信息例如ctx,stype
处理,返回一个graph
。 -
InitFullGraph
:建立一个计算图和它的反向传播图,它调用图的pass:Gradient
函数来建立反向传播图。除此之外,还完成反向计算时head
的处理。 -
RunOps
:计算图中的操作,从topo_start
到topo_end
,forward
和backward
调用该方法来完成前向和反向的计算。
网友评论