tensorflow源码解析之common_runtime-session
目录
- 核心概念
- session
- session_factory
1. 核心概念
session可以认为是一个执行代理。我们在客户端构建计算图,提供输入,然后把计算图丢给session去执行。因此,session应该具备一定的执行功能。另外TF还提供了session的工厂类,session_factory,用于产生session。
2. session
session没有提供头文件声明,直接在session.cc文件中提供了实现,我们略去空实现,如下:
Status Session::Run(const RunOptions& run_options, const std::vector<std::pair<string, Tensor>>& inputs, const std::vector<string>& output_tensor_names, const std::vector<string>& target_node_names, std::vector<Tensor>* outputs, RunMetadata* run_metadata);
Status Session::PRunSetup(const std::vector<string>& input_names, const std::vector<string>& output_names, const std::vector<string>& target_nodes, string* handle);
Status Session::PRun(const string& handle, const std::vector<std::pair<string, Tensor>>& inputs, const std::vector<string>& output_names, std::vector<Tensor>* outputs);
Session* NewSession(const SessionOptions& options);
Status NewSession(const SessionOptions& options, Session** out_session);
Status Reset(const SessionOptions& options, const std::vector<string>& containers);
可以看到,Session除了提供Run接口之外,还提供了部分执行的接口(PRunSetup和PRun)。部分运行是指,我们并不是运行整张图,而是给定了图中的某几个节点作为输入,某几个节点作为输出,运行部分的图。另外,Session还可以根据提供的SessionOptions产生新的会话。
3. session_factory
SessionFactory提供了工厂类的功能,其API如下:
class SessionFactory {
public:
virtual Session* NewSession(const SessionOptions& options) = 0;
virtual bool AcceptsOptions(const SessionOptions& options) = 0;
virtual Status Reset(const SessionOptions& options, const std::vector<string>& containers);
static void Register(const string& runtime_type, SessionFactory* factory);
static Status GetFactory(const SessionOptions& options, SessionFactory** out_factory);
}
- 对于其中的Reset函数,它的作用是终止和关闭所有现有的session,断开所有的资源与它们的连接。Reset函数能够使那些运行过慢或者运行出错的会话终止和关闭,并且释放与之相关的资源。Reset不会等待旧会话里的计算结束,它会启动一个将计算终止的进程。然而,如果在Reset之后启动了一个新的会话,那么这个新的会话将会与针对旧会话的操作隔离开。
- 如果旧会话的某些资源没有被列入containers,那么旧会话仍然可能在某些地方影响后续会话的计算,而且这种影响很难预测,因此,为了安全尽量在Reset的containers参数中包含尽量全的容器。
- 如果containers向量是空的,那么默认的container将会被使用,如果containers是非空的,那么默认容器需要被显式的放入。
- 支持资源容器的会话,需要重写这个函数。
tensorflow源码解析之common_runtime-session的更多相关文章
- tensorflow源码解析之common_runtime拾遗
把common_runtime中剩余的内容,按照文件名排序进行了简单的解析,时间原因写的很仓促,算是占个坑,后续有了新的理解再来补充. allocator_retry 有时候内存分配不可能一次完成,为 ...
- tensorflow源码解析系列文章索引
文章索引 framework解析 resource allocator tensor op node kernel graph device function shape_inference 拾遗 c ...
- Tensorflow源码解析1 -- 内核架构和源码结构
1 主流深度学习框架对比 当今的软件开发基本都是分层化和模块化的,应用层开发会基于框架层.比如开发Linux Driver会基于Linux kernel,开发Android app会基于Android ...
- Tensorflow源码解析2 -- 前后端连接的桥梁 - Session
Session概述 1. Session是TensorFlow前后端连接的桥梁.用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计 ...
- tensorflow源码解析之framework拾遗
把framework中剩余的内容,按照文件名进行了简单解析.时间原因写的很仓促,算是占个坑,后面有了新的理解再来补充. allocation_description.proto 一个对单次内存分配结果 ...
- tensorflow源码解析之common_runtime-executor-上
目录 核心概念 executor.h Executor NewLocalExecutor ExecutorBarrier executor.cc structs GraphView ExecutorI ...
- tensorflow源码解析之framework-allocator
目录 什么是allocator 内存分配器的管理 内存分配追踪 其它结构 关系图 涉及的文件 迭代记录 1. 什么是allocator Allocator是所有内存分配器的基类,它定义了内存分配器需要 ...
- tensorflow源码解析之common_runtime-executor-下
目录 核心概念 executor.h Executor NewLocalExecutor ExecutorBarrier executor.cc structs GraphView ExecutorI ...
- tensorflow源码解析之distributed_runtime
本篇主要介绍TF的分布式运行时的基本概念.为了对TF的分布式运行机制有一个大致的了解,我们先结合/tensorflow/core/protobuf中的文件给出对TF分布式集群的初步理解,然后介绍/te ...
- tensorflow源码解析之framework-op
目录 什么是op op_def定义 op注册 op构建与注册辅助结构 op重写 关系图 涉及的文件 迭代记录 1. 什么是op op和kernel是TF框架中最重要的两个概念,如果一定要做一个类比的话 ...
随机推荐
- bom案例4-模拟滚动条
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- rpm与yum安装及管理程序
安装及管理程序 1.Linux应用程序基础 2.RPM软件包管理工具 3.yum源仓库创建 1.应用程序与系统命令的关系如图: 典型应用程序的目录结构如图: 常见的软件包封装类型如图: 2.RPM包 ...
- 利用redis+AOP简单处理MQ冥等问题
思路: 1.利用redis内部的串行执行特性,使用getandset()处理分布式问题; 2.注解提供入参选择,通过数据抽取后计算MD5值,实现业务性值的冥等: 代码区: 1.注解 1 /** 2 * ...
- netty系列之:让TCP连接快一点,再快一点
简介 经典的TCP三次握手大家应该很熟悉了,三次握手按道理说应该是最优的方案了,当然这是对于通用的情况来说的.那么在某些特殊的情况下是不是可以提升TCP建立连接的速度呢? 答案是肯定的,这就是今天我们 ...
- Linux爱情故事之如何以不一样的姿势(ssh)进入她的心
文章目录 1.ssh是谁,为什么要进入她的心 2.如何正确的扒拉ssh 2.1.ssh的常用参数 2.2.您配钥匙吗?(ssh生成公钥或者秘钥) 2.3.我要单向畅通无阻的进入你的心(ssh-copy ...
- php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之 ...
- 《深度探索C++对象模型》第一章 | 关于对象
C++对象模式 非静态数据成员放置在每个类对象内,静态数据成员则被放置在所有类对象之外.静态和非静态的成员函数也被放置在所有类对象之外.每个类产生一堆指向虚函数的指针,放在虚表(vtbl)中.每个类对 ...
- oracle11g在windows下安装
oracle下载 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 下载11g ...
- kali linux 中python2不带pip的解决方法
在使用kali2020版本时,发现pip只能安装python3的模块,没办法安装python2模块,但是我有需要用到python2来运行脚本,在此贴出解决办法 https://bootstrap.py ...
- 图片隐写之Image Steganography软件的使用
CTF_论剑场 MISC 坏掉的图像 writeup 把图片丢进winhex里,发现头部的 0D 1A 0A 1A是不正确的,正确的应该为 0D 0A 1A 0A,所以需要更改. 更改完成后打开图片可 ...