分发tf,参数服务器GPU利用率很高,工作者运行非常慢

时间:2019-01-06 05:19:50

标签: tensorflow

我有两个ps(参数服务器),一名负责人,一名工人。 我的2 ps GPU利用率是80%,首席和工作GPU利用率是1%。

我的情况是:   我们正在开发大规模的命令系统,我们的嵌入之一非常大,大约10G(以后更大)。我们的网络就像“深层建筑”

下面是一些代码段。

MAX_SHARD_BYTES = (1 << 29) - 1
def embedding_layer(self, ids, weights, embedding_initializer, shape, feature_name=""):
  E = tf.get_variable("embeddings", trainable=True, initializer=embedding_initializer, shape=shape, partitioner=tf.variable_axis_size_partitioner(MAX_SHARD_BYTES))                                                                                                                                                                      
  return embedding_ops.embedding_lookup_sparse_with_distributed_aggregation(E, ids, weights, combiner='sum')

def model_fn(features, labels, mode, params, config):
  with tf.device(tf.train.replica_device_setter(
                    cluster=cluster,
                    ps_strategy=tf.contrib.training.GreedyLoadBalancingStrategy(
                    num_tasks=2, load_fn=tf.contrib.training.byte_size_load_fn))
              ):                                                                                                                                  
    model = Model(features, labels, mode, params, config)
    if mode == tf.estimator.ModeKeys.TRAIN:
      optimizer = tf.train.AdamOptimizer(FLAGS.learning_rate, params['adam_epsilon'])
      train_op = optimizer.minimize(model.loss, global_step=tf.train.get_global_step())
      return tf.estimator.EstimatorSpec(mode, loss=model.loss, train_op=train_op)
    elif mode == tf.estimator.ModeKeys.EVAL:
      return tf.estimator.EstimatorSpec(mode, loss=model.loss, eval_metric_ops=model.metrics)

开始代码如下:

opts = tf.GPUOptions(allow_growth=True)
sess_config = tf.ConfigProto(gpu_options=opts, allow_soft_placement=True,                                            inter_op_parallelism_threads=20, intra_op_parallelism_threads=20)
estimator = tf.estimator.Estimator(model_fn=model_fn, params=params, config=config)
if not FLAGS.need_eval:
   train_spec = tf.estimator.TrainSpec(input_fn=lambda:train_input_fn(FLAGS.dataset, FLAGS.batch_size, params['feature_num'], True), max_steps=None,
                                                                hooks=[tf.train.CheckpointSaverHook(FLAGS.new_checkpoint_dir, save_steps=FLAGS.save_steps), tf.train.ProfilerHook(save_steps=10, output_dir='.')])
   eval_spec = tf.estimator.EvalSpec(input_fn=lambda:None)
   tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

我们使用图间,我们尝试了tf.contrib.distribute.MirroredStrategy,并出现OOM错误。

我已经尝试过为工作人员提供时间轴配置文件,几乎所有时间成本都是RecvTensor。 我们不知道PS有什么问题,并且PS无法与时间轴配合使用。

我已经呆在服务器上了几天,感谢您的帮助。

0 个答案:

没有答案