我正在运行类似于Inception sample code的分布式tensorflow培训,但使用此设备设置器:
with tf.device(tf.train.replica_device_setter(ps_tasks=1,
worker_device="/job:worker/task:%d" % FLAGS.task_id,
cluster=cluster_spec)):
该机器有4个GPU和64 GB RAM。 ps
作业仅在CPU上运行,并且在两个单独的GPU上运行两个worker
作业。两个工作人员的内存占用量逐渐增加,直到大约3000步,主要工作人员被OOM杀死(两名工人在崩溃前占据了约49%的RAM)。我也尝试过一个单独的工作人员,也有人被杀。 ps
作业占地面积小得多。
我试过禁用摘要操作,模型保护程序,变量平均器,减少读取器线程,但无济于事。
答案 0 :(得分:0)
我通过在image_processing.py
中调用with tf.device('/cpu:0'):
时评论batch_inputs
规范,向工作人员解决了此问题。我的设置可能发生的一个原因虽然不完全清楚,但我使用
with tf.device(tf.train.replica_device_setter(ps_tasks=1,
worker_device="/job:worker/task:%d" % FLAGS.task_id,
cluster=cluster_spec)):
而不是
# Ops are assigned to worker by default.
with tf.device('/job:worker/task:%d' % FLAGS.task_id):
# Variables and its related init/assign ops are assigned to ps.
with slim.scopes.arg_scope(
[slim.variables.variable, slim.variables.global_step],
device=slim.variables.VariableDeviceChooser(num_parameter_servers)):
作为调用批处理的最外层训练范围(inception_distributed_train.py
)。
不确定为什么这对我修改后的设置造成问题(由于没有关于如何进行设备分配的机制的文档),但现在内存增加趋势已经减少了至少十倍,并且测试了运行100个时代。
如果没有这个CPU设备规范,也许原始代码可以正常工作。