【发布时间】:2019-11-21 08:44:01
【问题描述】:
我们一直在使用包含 96 000 000 个数据点的数据集在 AI 引擎上训练神经网络。神经网络以分布式方式进行训练,并且按照惯例,我们使用 20% 的数据集作为评估数据。为了训练分布式,我们使用了 TensorFlow 估计器和方法 tf.estimator.train_and_evaluate。由于我们的数据集非常大,我们的评估集也非常大。查看主节点与工作节点的 CPU 使用情况,并使用仅包含 100 个样本的评估数据集进行测试,看起来评估似乎不是分布式的,并且仅发生在主节点上。这使得在具有标准大小的评估数据(占总数据的 20%)和只有 100 个数据点进行评估之间,消耗的 ML 单元的数量增加了大约 5 倍,而训练数据的数量是相同的。
我们看到了这个问题的两种可能的解决方案:
- 还进行分布式评估,但在 AI 平台上技术上可行吗?
- 寻找具有代表性的较小评估数据集。是否有构建这个较小数据集的最佳实践方法?
以下是我认为是代码的相关部分。函数 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