【问题标题】:Distributed Tensorflow: worker killed due to OOM分布式 Tensorflow:工人因 OOM 而死亡
【发布时间】:2016-05-24 23:28:32
【问题描述】:

我正在运行类似于Inception sample code 的分布式张量流训练,但使用的是这个设备设置器:

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 上运行,并且有两个 worker 作业在 2 个单独的 GPU 上运行。两个工作者作业的 res 内存占用逐渐增加,直到大约 3000 步,首席工作者被 OOM 杀死(两个工作者在崩溃前都占用了大约 49% 的 RAM)。我也试过一个工人,那个工人也被杀了。 ps 作业占用的空间要小得多。 我尝试禁用摘要操作、模型保护程序、变量平均程序、减少阅读器线程,但无济于事。

【问题讨论】:

    标签: tensorflow deep-learning


    【解决方案1】:

    我通过在image_processing.py 中调用batch_inputs 时评论with tf.device('/cpu:0'): 规范与工人解决了这个问题。我的设置可能发生这种情况的一个原因虽然不完全清楚,但我使用了

    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 个 epoch。

    也许没有这个 CPU 设备规范,原始代码也能正常工作。

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2017-01-24
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多