『深度长文』Tensorflow代码解析(五)

6. TF – Session分析

客户端使用会话来和TF系统交互,一般的模式是,建立会话,在会话中添加节点和边,形成一张图,然后执行。如图 6 1所示,包含一个client和一个master。Client通过Session与Master交互,而Master协调一个或者多个的 worker processes 完成计算任务,每个 worker process 负责对一个或者多个计算设备(CPU 核或者 GPU card)的任意访问和在这些设备上进行图节点的计算按照 master 的要求执行。

图 6 1 TF Session Simple Example

图 6 1中Session.run()向Master发送计算请求,执行graph计算。Session.run函数定义如下:

TF中Session有两种实现:一种是DirectSession类,可以执行localhost环境运行的图;另一种是GrpcSession类,可以执行分布式环境运行的图。

6.1 Direct Session分析

DirectSession定义在localhost环境,运行环境如下所示。图 6 2中仅一个本地worker,由master管理worker完成计算任务。

图 6 2 Session本地运行架构

首先,从run函数开始,指定feed节点、fetch节点和feed数据。

创建Executors。Executor将执行graph计算操作,多个Executor可以并行计算,在feed批处理计算数据时非常有用。

将input放入Rendez消息信箱中,等待consumer取出。

创建ExecutorBarrier。ExecutorBarrier在多个Executor并行计算时起协调作用,保证每个Executor执行graph计算时数据的一致性。

在barrier的协调下,每个executor完成对应的graph计算操作。

每个executor对应一个ExecutorState实例。executorstate跟踪graph中的node,通常认为node有完成计算、准备计算、等待计算等状态。当node处于就绪状态就为该节点执行计算操作。

创建节点序列触发器TaggedNodeSeq 变量,即ready队列。先为ready队列添加root节点,即起始点,然后放入schedule任务队列中。

从ready队首开始,执行计算操作,计算过程由ExecutorState::Process函数完成。

ExecutorState::Process调用每个节点中OpKernel对应的Compute函数或ComputeAsync函数,如MatMulOp实现了Compute函数,RecvOp实现了ComputeAsync函数。

专业用户独享

本文为机器之心深度精选内容,专业认证后即可阅读全文
开启专业认证
工程TensorFlow计算图工程分布式计算
4
暂无评论
暂无评论~