在Google Cloud ML上分配工作人员之间的数据

时间:2017-04-10 07:08:51

标签: google-cloud-ml google-cloud-ml-engine

我已经能够在分布式谷歌云ML中运行代码但是当我运行它时,数据会在群集中的每台机器上复制,但我想在每台机器上分发数据。

如何在云端ML上的群集中的每台计算机上分发数据? 请帮忙!!!!

1 个答案:

答案 0 :(得分:0)

通常,在分布式异步培训中,您希望每个工作人员处理所有数据,而不是让每个工作人员都在数据的非重叠分区上进行训练。

在异步培训中,参数不会等待从所有工作人员接收更新 - 它会在更新时处理更新。因此,如果一个工人比其他工人慢,那么它将比其他工人贡献更少的更新。如果对数据进行分区,使每个工作人员只能访问自己的数据,这意味着您实际上对属于较慢工作者的示例进行了权重下调,因为它们会导致对参数的更新更少。这会对您的模型的质量和普遍性产生不利影响。

如果您使用synchronous training并强制更新等待所有工作人员,您可以安全地跨工作人员对数据进行分区,但是,培训将与最慢的工作人员一样慢,因为每个步骤都必须等待更新来自所有工人。如果您不强制所有工作人员进行更新,那么情况实际上可能比异步培训更糟糕,因为慢工作人员的示例可能会被完全忽略。

因为它更强大,异步训练更常见。

幸运的是,让所有工作人员检查所有数据通常是明智之举。只要您随机化数据(herehere),那么在任何给定时间(跨所有工作者)检查的示例都是一组随机抽样(几乎)均匀的batch_size * num_workers示例从完整数据集中替换。

在异步训练中读取数据的规范方法通常在实践中足够好,特别是在分布式训练中。但是,如果您拥有如此多的数据,您只能执行几个训练时期,那么您的模型可能会从每个示例中看到相同的次数(无需替换的采样)。这更复杂,更不稳健,但可以做到;这是一个单独的帖子。