tf.ConfigProto()

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

ConfigProto类:
device_count:map
设备的数量映射。key为设备的名称(比如”CPU”或者”GPU”),而value为该类型设备的数量的最大值。
如果没有设置的话,系统会自动设置合适的数值。
eg:device_count={"CPU": cpu_num}

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

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

use_per_session_threads :bool (这个设置已经过时)
是否为每个会话使用单独的线程池。如果设置为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设置。

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

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

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

log_device_placement :bool 
是否打印出各个操作在哪个设备(cpu或者gpu)上运行。

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

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

gpu_options :GPUOptions
关于GPU的配置项,具体参数见GPUOpition配置项

graph_options :GraphOptions
tensorflow图的配置项,具体参数见GraphOption配置项

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

 

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

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

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

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

visible_device_list:string
逗号分隔的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)来控制从物理的到可见硬件的映射关系。

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

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

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

 

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

 

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

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

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

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

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

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

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

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

optimizer_options :OptimizerOptions
图的优化选项,具体参数见OptimizerOption配置项

 

OptimizerOptio n配置项
OptimizerOptions类,有如下设置选项:
do_common_subexpression_elimination :bool 
是否使用通用子表达式删除来优化图.

do_constant_folding :bool 
是否使用常量合并来优化图。

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

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

opt_level :Level
优化的等级选择。

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

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

 

# gpu配置
# tf.ConfigProto()的参数
# per_process_gpu_memory_fraction 设置每个GPU应该拿出多少容量给进程使用,0.4代表 40%
# log_device_placement=True : 是否打印设备分配日志
# allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备
gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.7,allow_growth=True)
tf.ConfigProto(log_device_placement=True,
    allow_soft_placement=True,
    gpu_options=gpu_options
)

with tf.Session(config=tf_config,...) as sess:
    with tf.device("/gpu:0"):
        ...

 

参考:
https://www.jianshu.com/p/b9a442bcfd2e
https://blog.csdn.net/u012436149/article/details/53837651 
 

你可能感兴趣的:(tensorflow,深度学习)