【问题标题】:Deep learning on massive datasets海量数据集的深度学习
【发布时间】:2018-03-29 10:16:42
【问题描述】:
这里的理论问题。我知道,在处理无法在单台机器上放入内存的数据集时,spark + EMR 是一个很好的选择。
不过,我也想使用 tensorflow 代替 spark 的 ml lib 算法来对这些大型数据集执行深度学习。
根据我的研究,我发现我可以结合使用 pyspark、elephas 和 EMR 来实现这一目标。另外还有 BigDL 和 sparkdl。
我是不是走错了路?对无法放入内存的数据进行深度学习的最佳实践是什么?我应该使用在线学习还是批量培训? This post 似乎在说“大多数高性能深度学习实现都是单节点的”
任何帮助我指出正确方向的人将不胜感激。
【问题讨论】:
标签:
apache-spark
deep-learning
【解决方案1】:
当您提到“将海量数据集装入内存”时,我了解到您正在尝试将所有数据一次加载到内存并开始训练。因此,我根据这个假设给出答复。
一般的想法是,如果您无法将数据适合您的资源,请将数据分成更小的块并以迭代方式进行训练。
1- 一个接一个地加载数据,而不是一次加载所有数据。如果您将执行工作流创建为“加载数据 -> 训练 -> 发布数据(这可以由垃圾收集器自动完成) -> 重启”,您可以了解训练单个数据需要多少资源。
2- 使用小批量。一旦你从 #1 中获得资源信息,你就可以通过简单的计算来估计 mini-batch 的大小。例如,如果训练单个数据消耗 1.5 GB 的 RAM,而您的 GPU 有 8 GB 的 RAM,理论上您可以一次训练大小为 5 的 mini-batch。
3- 如果资源不足以训练 1 个大小的单批次,在这种情况下,您可能会考虑增加您的 PC 容量或减少您的模型容量/层/功能。或者,您可以选择云计算解决方案。