首页 文章

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

提问于
浏览
0

我正在运行类似于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 作业 . 两个 Worker 工作的res内存占用量逐渐增加,直到大约3000步,主要工作人员被OOM杀死(两个 Worker 在崩溃前都占据了约49%的RAM) . 我也尝试过一个单独的工作人员,也有人被杀 . ps 作业占地面积小得多 . 我试过禁用摘要操作,模型保护程序,变量平均器,减少读取器线程,但无济于事 .

1 回答

  • 0

    我在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个时代 .

    也许原始代码在没有CPU设备规范的情况下也能正常工作 .

相关问题