【tensorflow】tf.ConfigProto和tf.GPUOptions

tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置,而tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。

 

一、tf.ConfigProto
tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置。

1.1 tf.ConfigProto()的参数

log_device_placement=True : 是否打印设备分配日志
allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备

1.2 tf.ConfigProto()使用参数的两种方法
(1)第一种是在构造config对象时直接赋值,如下:

tf.ConfigProto(log_device_placement=True,allow_soft_placement=True)

(2)第二种是先构造config对象,再对构造的config对象进行赋值,如下:

config = tf.ConfigProto()
config.log_device_placement= True
config.allow_soft_placement=True

tf.ConfigProto()含有的部分参数(属性与方法,可使用dir(tf.ConfigProto())进行查看)

1.3 让参数设置生效的方法

session = tf.Session(config=config)

 

二、使用tf.GPUOptions限制GPU资源的使用

tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。同样有两种方法实现。

为了加快运行效率,TensorFlow在初始化时会尝试分配所有可用的GPU显存资源给自己,这在多人使用的服务器上工作就会导致GPU占用,别人无法使用GPU工作的情况。

tf提供了两种控制GPU资源使用的方法,一是让TensorFlow在运行过程中动态申请显存,需要多少就申请多少;第二种方式就是限制GPU的使用率。

 

2.1 动态申请显存

使用allow_growth=True,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放内存,所以会导致碎片

方法一:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)

方法二:

gpu_options=tf.GPUOptions(allow_growth = True)
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)

 

2.2 限制GPU的使用率

方法一:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.85 #占用85%显存
session = tf.Session(config=config)

方法二:

gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.85)
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)

方法三:

gpu_options=tf.GPUOptions(allow_growth = False) # 设为false,占用全部显存,避免碎片提高效率
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)

 

【注意】当限制GPU使用率时,GPU所占的显存是一直占着的,需要手动kill进程。

 

 

参考:

https://blog.csdn.net/dcrmg/article/details/79091941

https://blog.csdn.net/C_chuxin/article/details/84990176

posted @ 2021-08-03 15:53  AliceYing  阅读(230)  评论(0编辑  收藏  举报