【问题标题】:Training distributed on AI engine is slowed down because the evaluation is not distributed分布在 AI 引擎上的训练因评估未分布而减慢
【发布时间】:2019-11-21 08:44:01
【问题描述】:

我们一直在使用包含 96 000 000 个数据点的数据集在 AI 引擎上训练神经网络。神经网络以分布式方式进行训练,并且按照惯例,我们使用 20% 的数据集作为评估数据。为了训练分布式,我们使用了 TensorFlow 估计器和方法 tf.estimator.train_and_evaluate。由于我们的数据集非常大,我们的评估集也非常大。查看主节点与工作节点的 CPU 使用情况,并使用仅包含 100 个样本的评估数据集进行测试,看起来评估似乎不是分布式的,并且仅发生在主节点上。这使得在具有标准大小的评估数据(占总数据的 20%)和只有 100 个数据点进行评估之间,消耗的 ML 单元的数量增加了大约 5 倍,而训练数据的数量是相同的。

我们看到了这个问题的两种可能的解决方案:

  1. 还进行分布式评估,但在 AI 平台上技术上可行吗?
  2. 寻找具有代表性的较小评估数据集。是否有构建这个较小数据集的最佳实践方法?

以下是我认为是代码的相关部分。函数 input_fn 返回一个已批处理的 tf.data.Dataset。

run_config = tf.estimator.RunConfig(
        save_checkpoints_steps=1000, keep_checkpoint_max=10, tf_random_seed=random_seed
    )

    myestimator = _get_estimator(
        hidden_neurons, run_config, learning_rate, output_dir, my_rmse
    )

    # input_fn for tf.estimator Spec must be a callable function without args.
    # So we pack our input_fn in a lambda function
    callable_train_input_fn = lambda: input_fn(
        filenames=train_paths,
        num_epochs=num_epochs,
        batch_size=train_batch_size,
        num_parallel_reads=num_parallel_reads,
        random_seed=random_seed,
        input_format=input_format,
    )
    callable_eval_input_fn = lambda: input_fn(
        filenames=eval_paths,
        num_epochs=num_epochs,
        batch_size=eval_batch_size,
        shuffle=False,
        num_parallel_reads=num_parallel_reads,
        random_seed=random_seed,
        input_format=input_format,
    )

    train_spec = tf.estimator.TrainSpec(
        input_fn=callable_train_input_fn, max_steps=max_steps_train
    )

    eval_spec = tf.estimator.EvalSpec(
        input_fn=callable_eval_input_fn,
        steps=max_steps_eval,
        throttle_secs=throttle_secs,
        exporters=[exporter],
        name="taxifare-eval",
    )

    tf.estimator.train_and_evaluate(myestimator, train_spec, eval_spec)

【问题讨论】:

  • 如果你在做异步训练(带参数服务器),对master(chief)的评估不会阻塞对workers的训练。您能否提供更多有关您如何进行培训的详细信息?
  • 我已将代码的相关部分添加到问题中。我们正在使用 tensorflow 估计器和方法 tf.estimator.train_and_evaluate 进行异步训练。我们基本上试图遵循这里写的内容:cloud.google.com/ml-engine/docs/tensorflow/…
  • 您是使用 GPU 还是 TPU 进行训练?
  • 根据您关于测试大小的问题。 20% 已经过时了。那是针对小型数据集的。数据集越大,测试(保留)所需的百分比越少。测试集只需代表数据集(总体)的代表性(采样)分布。对于 9600 万个示例,应以 1 到 2% 为后缀。
  • 所以你说只要你有1-2%的数据集的随机样本就足够了。

标签: python tensorflow distributed-computing google-cloud-ml


【解决方案1】:

TF 不适合分布式学习。查看mxnet。有很好的介绍here

【讨论】:

    【解决方案2】:

    在查看 cmets 并进行更多调查后,看起来评估并没有减慢流程,但评估发生了两次(一次在训练期间,总是在训练结束时)。因此,训练时间较长,仅仅是因为必须等待评估完成。感谢所有的cmets

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2021-06-28
      • 2013-07-04
      • 1970-01-01
      • 2018-06-17
      相关资源
      最近更新 更多