【问题标题】:How to train independent keras models in different nodes (embarrassingly parallel workload)如何在不同节点训练独立的keras模型(尴尬的并行工作负载)
【发布时间】:2020-01-29 21:41:10
【问题描述】:

我有一个 python 脚本,其中包含一些数据(大小适合内存),我想学习(在 X 个不同的本地节点中)X 个不同版本的这些 keras 模型(也可以是 tensorflow)相对不同这些数据的版本,然后组合结果(它有点像模型的集合)。我不需要进一步分发 keras 模型的训练,因为它们在多线程模式下运行就足够了。我认为这将是一个相对常见的设置,但我没有在网上找到任何工作示例。

有人知道最好的方法吗?

  1. Dask 是解决此问题的正确工具吗?它看起来并不乐观:https://github.com/dask/distributed/issues/2333 tensorflow 也有同样的问题吗?据此,使用 tensorflow 进行这种简单的并行化应该是可以的: http://matthewrocklin.com/blog/work/2017/02/11/dask-tensorflow 所以我倾向于认为正确的路径是使用map dask操作而不是延迟。

  2. 当我不想进一步并行化 TensorFlow 模型的训练时,是否需要创建 TensorFlow 集群? https://ml.dask.org/tensorflow.html

  3. 有没有使用 Scikit-learn 包装器和 joblib 的解决方法?

任何有关正确方向的线索将不胜感激。

【问题讨论】:

  • 创建X 相同的网络并一个接一个地训练它们有什么问题?
  • 嗯,我想在不同的节点上并行训练它们以加快整个过程。

标签: python tensorflow keras dask


【解决方案1】:

有很多方法可以使用 Dask 运行令人尴尬的并行工作负载。以下是贯穿当时的标准示例:https://examples.dask.org/applications/embarrassingly-parallel.html

正如您通过指向 this issue 所指出的,TensorFlow(以及 Keras 的扩展)不能很好地与其他系统配合使用。如果您正在运行的工作负载创建、训练、评估然后忘记了 tensorflow 对象,那么您应该没问题。当您尝试在不同机器之间传递 Tensorflow 图时,就会出现问题。 TensorFlow 中有一些错误会阻止它正常工作。

【讨论】:

  • 好的,谢谢你,所以你的意思是主要问题是围绕 keras/tensorflow 模型移动,而不管 Dask 的并行化策略是什么?然后我需要 1) 让 Dask 移动数据,例如:client.map(train_and_evaluate, hyper_param_list, data=data) 或 2) 从函数内部的磁盘写入/读取以进行并行化。鉴于我的数据约为 200MB,并且我可以通过 nfs 访问共享数据集群,您认为最佳策略是什么?
猜你喜欢
  • 2021-04-09
  • 2017-07-28
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多