TensorFlow会话的配置项

TensorFlow配置项的文档位于这里
TensorFlow可以通过指定配置项,来配置需要运行的会话,示例代码如下:

run_config = tf.ConfigProto()
sess = tf.Session(config=run_config)

ConfigProto类配置项

对于ConfigProto类具体有如下可配置的部分
map<string, int32> device_count:设备的数量映射。key为设备的名称(比如”CPU”或者”GPU”),而value为该类型设备的数量的最大值。如果没有设置的话,系统会自动设置合适的数值。

int32 intra_op_parallelism_threads:线程池中线程的数量,一些独立的操作可以在这指定的数量的线程中进行并行,如果设置为0代表让系统设置合适的数值。

int32 inter_op_parallelism_threads:每个进程可用的为进行阻塞操作节点准备的线程池中线程的数量,设置为0代表让系统选择合适的数值。需要注意的是,第一个创建的会话会为将来创建的所有会话设置这个线程的数值,除非use_per_session_threads被设置为True,或者是session_inter_op_thread_pool被配置。

bool use_per_session_threads:是否为每个会话使用单独的线程池。如果设置为True,则为这个会话使用新的线程池,而不是使用全局的线程池。仅仅支持直接的会话。如果设置为False,将会使用由第一个会话创建的全局线程池,或者使用由session_inter_op_thread_pool为每个会话配置的线程池。这个设置已经过时。设置session_inter_op_thread_pool参数中有一个元素,这个元素的num_thread等于session_inter_op_thread_pool,那么这个效果是一样的。

repeated ThreadPoolOptionProto session_inter_op_thread_pool:(实验性配置,将来可能被不同的机制所取代,这个参数是为了给那些会话需要运行在后台,并限制其运行在少量的线程中)配置会话的线程池。如果配置了这个,那么RunOption在Run被调用时,可以选择这个线程池来使用。如果线程池的num_thread被设置为0,那么inter_op_parallelism_threads会被作为num_thread设置。

int32 placement_period:这是数值是指定分配节点到硬件的周期,在系统预热(warm up)之前每隔placemeant_period步,都会重新计算节点到硬件的分配,而在此之后重新计算通常会自动降低频率。

repeated string device_filters:这个参数是硬件过滤器,如果被设置的话,会话会忽略掉所有不匹配过滤器的硬件。每个过滤器可以分别制定比如 "/job:ps" "/job:worker/replica:3".

GPUOptions gpu_options:关于GPU的配置项,这是个类对象,具体参数[后面](## GPUOpition配置项)补充。

bool allow_soft_placement:这个参数制定是否允许计算的“软分配”。如果这个参数设置为True,那么一个操作在下列情况下会被放在CPU上运行:
1.操作没有GPU的实现
2.没有已知的GPU
3.需要与来自CPU的reftype输入进行协同定位

bool log_device_placement:这个参数指定是否log硬件的分配,比如某个操作分配到CPU:0之类的。

GraphOptions graph_options:关于tensorflow图的配置项,这也是个类对象,具体能配置的内容,后面补充。

int64 operation_timeout_in_ms:为会话中所有阻塞操作的全局的超时时间。如果这个值不为0,也没有被每个操作的基准修改的话,这个值就是所有阻塞操作的最长等待时间。

RPCOptions rpc_options:远程操作的选项,只在会话在分布式运行的情况下使用,是个类对象,具体可设置的参数[后面](## RPCOption配置项)补充。

ClusterDef cluster_def:所有可选择为会话所使用的workers的列表。

GPUOpition配置项

GPUOptions类,有如下设置选项:
double per_process_gpu_memory_fraction:数值在0到1之间,表示预分配多少比例的可用GPU显存给每个进程。比如1表示预分配所有的可用的GPU显存,0.5则表示分配50%的可用的GPU显存。

string allocator_type:用于设置GPU分配的策略。””空字符串(为默认值)表示由系统选择策略,但是这个策略会一直变化。”BFC”指定采用最佳适配合并算法,是Doung Lea’s malloc算法的简化版,具体算法介绍,可以参考博文http://www.cnblogs.com/yao62995/p/5773166.html

int64 deferred_deletion_bytes:这是设置删除的缓存上限的值。如果这个值不为0,那么删除操作会到这个指定的bytes大小的时候才进行删除操作,以此来减少与CPU驱动代码的交互次数。如果设置为0,系统会选择一个合理的数值。

bool allow_growth:是否采用增长的方式分配显存。如果这个值为True,那么分配器不会预分配整个指定的GPU显存空间,而是开始分配一小部分显存,然后随着需要而增加。

string visible_device_list:逗号分隔的GPU的id列表,决定着GPU硬件从”可见的”到”虚拟的”之间的映射关系。比如TensorFlow在进程里可以看到8张GPU,而有人想把可见的GPU的5和3映射成”/gpu:0”和”/gpu:1”,那么他可以制定这个参数值为”5,3”。除了应用于进程可见的CPU之外,这个域类似于CUDA_VISIBLE_DEVICES环境变量。

注意:GPU驱动以某种顺序提供给进程可见的GPU,但是这个顺序并不保证与机器上的物理的CPU的id有任何关系。这个域用以重新从可见到虚拟建立映射,这就意味着这个操作在进程启动之后。因而,要求用户在调用TensorFlow之前,使用供应商指定的机制(比如CUDA_VISIBLE_DEVICES)来控制从物理的到可见硬件的映射关系。

int32 polling_active_delay_usecs:轮询的间隔时间长,当队列不为空的时候,两个轮询调用时间休眠设置的时间长(单位:microseconds),如果这个值被设置为0或者没有设置,那么会设置为一个非0的默认值。

int32 polling_inactive_delay_msecs:轮询休眠时长,当队列为空的情况下,两次调用轮询的时间间隔设置的时间长(单位:millisconds)。如果设置为0或没有设置,那么设置为默认的非0数值。

bool force_gpu_compatible:是否启动强制张量的GPU兼容。在启用了GPU的TensorFlow中,这个选项为True,意味着所有的CPU的张量将被分配Cuda的固定内存。通常情况下,TensorFlow会推断哪些张量应该分配固定内存。但是有些情况下这种推断可能不完整,那么只要它适配内存,这个选项就对于跨硬件的内存拷贝的性能尤为重要。
注意:这个选项对于未知或者非常大的模型不能默认开启,因为所有的Cuda固定内存是不能分页的,因而有大量固定内存对于整个主机系统的性能可能会有负面影响。

GraphOption配置项

GraphOptions类,有如下设置选项:
bool enable_recv_scheduling:接收节点调度选项,如果设置为True,会使用控制流来安排接收节点的激活。(暂时被忽略)

OptimizerOptions optimizer_options:图的优化选项,这是个类对象,具体能配置的内容,[后面](### OptimizerOption配置项)补充。

int64 build_cost_model:在返回成本模型之前运行的步骤数,这个模型会详细的描述图中每个节点的内存使用和性能。设置为0表示没有成本模型。

int64 build_cost_model_after:在为成本模型收集统计信息之前运行的步骤数,即成本模型运行前,模型运行的步骤数。

bool infer_shapes:是否推测形状数据。设置为True的话,会用输出的数据的形状信息来标注每个节点,只要这个形状能被静态的推导出来。

bool place_pruned_graph:是否放置修建的图。设置为True的话,仅仅只放置运行的子图,而不是整个图。这个对于交互图的构建很有用,因为在这过程中,可能会产生无法在调试进程中放置的图。特别是它允许用户在往图中添加了一个无法满足的其放置位置限制的节点后,还能够继续进行会话。

bool enable_bfloat16_sendrecv:是否开启到bfloat16的转换,如果这个设置为True,那么进程之间的float数据会被转换成bfloat16的类型,这个类型定义文件见这里

int32 timeline_step:时间表的记录的间隔步骤数。如果大于0的话,在每隔设置的步骤数,记录时间表。实验性的:这个现在对于主会话没有影响。

RewriterConfig rewrite_options:控制图的重写类型和次数的选项。

OptimizerOption配置项

OptimizerOptions类,有如下设置选项:
bool do_common_subexpression_elimination:是否使用通用子表达式删除来优化图。关于通用子表达式删除算法的描述,见这里

bool do_constant_folding:是否使用常量合并来优化图。常量合并(constant folding optimization)具体描述,见这里这里

bool do_function_inlining:是否使用函数内联。如果设置为True,在图中执行函数内联。

enum Level:优化的等级。L1(=0)为默认的等级,会执行如下优化:1.通用子表达式删除;2.常量合并。L0(=-1)为没有优化。

Level opt_level:优化的等级选择。

enum GlobalJitLevel:控制编译器/运行时编译的使用。(实验性参数)默认设置为关闭,但是以后将被设置为打开。关闭的设置参数为OFF(=-1),其他参数(ON_1,ON_2)是打开编译器,并且数值越高,越为主动积极。更高的数值可能会降低并行的机会,并且会使用更多的内存(现在对于这些没有限制,但是之后会改变。)

GlobalJitLevel global_jit_level:编辑器/运行时编译的等级。

RPCOption配置项

RPCOptions类,有如下设置选项:
bool use_rpc_for_inprocess_master:是否在进程间使用远程调用的选项。如果设置为True,总是允许使用远程调用来联系会话目标。默认设置为False,那么TensorFlow会为客主之间的交流提供优化的传送方式,从而避免使用远程调用堆栈。这个选项主要用于测试远程堆栈的时候使用。

比较完整的配置使用示例:

run_config = tf.ConfigProto()
run_config.use_per_session_threads = False
run_config.allow_soft_placement = False

run_config.gpu_options.per_process_gpu_memory_fraction = 0.0
run_config.gpu_options.allow_growth = False

run_config.graph_options.enable_recv_scheduling = False
run_config.graph_options.timeline_step = 0

run_config.rpc_options.use_rpc_for_inprocess_master = False

sess = tf.Session(config=run_config)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,174评论 11 349
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,863评论 6 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • java 接口的意义-百度 规范、扩展、回调 抽象类的意义-乐视 为其子类提供一个公共的类型封装子类中得重复内容定...
    交流电1582阅读 2,207评论 0 11