tensorflow之tf.ConfigProto()的使用

tf.ConfigProto()主要是用来配置session运行的一些参数

比如:

1
2
3
4
5
6
7
8
config = tf.ConfigProto(device_count={'GPU': GPU_NUM}, allow_soft_placement=True)
config.gpu_options.allow_growth = True

strategy = tf.contrib.distribute.MirroredStrategy(num_gpus = GPU_NUM)

run_config = tf.estimator.RunConfig(train_distribute=strategy,
save_checkpoints_steps=100,
session_config=config)
1
2
3
config = tf.ConfigProto(allow_soft_placement=True, allow_soft_placement=True)
config.gpu_options.per_process_gpu_memory_fraction = 0.4 #占用40%显存
sess = tf.Session(config=config)

log_device_placement=True:记录设备指派情况

  • 设置log_device_placement=True,可以获取到op和tensor被指派到哪个设备(几号CPU或者几号GPU),会在终端打印出各项操作是在哪个设备上运行

allow_soft_placement=True:自动选择运行设备

  • 在tf中通过命令 with tf.device(‘/cpu:0’) 允许手动设置操作运行的设备,如果手动设置的设备不存在或者不可用,就会导致tf程序等候或者异常,为了防止这种情况,可以设置tf.ConfigPro()中参数allow_soft_placement=True,允许tf自动选择一个存在并且可用的设备来运行操作

还可以限制CPU资源使用

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

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

1、动态申请显存

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

2、限制GPU使用率

1
2
3
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.4 #占用40%的显存
session = tf.Session(config=config)

或者

1
2
3
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.4)
config = tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)

参考:

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