分布式Tensorflow:工作人员因OOM而被杀

时间:2016-05-24 23:28:33

标签: tensorflow deep-learning

我正在运行类似于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作业占地面积小得多。 我试过禁用摘要操作,模型保护程序,变量平均器,减少读取器线程,但无济于事。

1 个答案:

答案 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设备规范,也许原始代码可以正常工作。