【问题标题】:TensorflowJS: Training multiple models simultaneously (for performance)TensorflowJS:同时训练多个模型(为了性能)
【发布时间】:2018-06-28 13:09:27
【问题描述】:

在我的项目中,我正在训练许多小图。看看 GPU 上的工作是如何完成的,并且 GPU 运行在 5% 的低水平,同时训练许多图以提高性能是否有意义?我只是有点担心,因为我知道 JS 并不是真正的线程语言。

我还有什么可以提高训练表现的方法吗?

【问题讨论】:

  • 如果您不需要在客户端设备上进行培训,请不要使用浏览器机器学习库。
  • 是的,这会让事情变得更简单,不是吗:-)
  • 5% 太冷了。您是否尝试过更大的批量?操作之间是否有大量的 CPU 工作?有很多小层吗?

标签: tensorflow.js


【解决方案1】:

理论上,在使用 Tensorflow.js 在 GPU 上进行训练时,您有许多元素都需要平衡:

1:GPU 使用率

当然,GPU 的使用量很重要 - 最终目标是最大限度地利用 GPU 以在时间上尽可能高效地进行训练。

如果您发现 GPU 使用率较低,则您的瓶颈可能在图片中的其他地方 - 请参见下文。

2:Javascript CPU 使用率

正如您所注意到的,Javascript 并不是真正的基于线程的语言。为此,必须观察主 Javascript 线程的 CPU 使用率。如果它正在最大化 CPU,那么这可能是瓶颈。可以做很多事情来改善这种情况:

  • 如果您要训练多个模型,请尝试在不同的过程中训练它们。在浏览器中这意味着 WebWorkers(假设 WebWorkers 与 Tensorflow.js 兼容);对于 Node.js,这意味着多个进程(例如,使用 child_process.fork()(注意在进程之间传输大量数据 - 这),或者可能是 threads(虽然我没有亲自尝试过) .
  • 如果您有很多预处理步骤来将数据转换为正确的格式,请尝试提前执行其中一些以加快处理速度。还要检查模型中的图层是否会采用稍微不同的格式,因为转换的工作量更少。

3:GPU 内存使用情况

可以在给定 GPU 上并行训练的模型数量的一个限制因素是它们使用的内存量。大多数专用 GPU 使用自己的专用 VRAM,这可能非常有限。请咨询您的 GPU 制造商或操作系统提供商,了解如何监控。

4:I/O 带宽

如果您的 CPU 和 GPU 都没有达到极限,那么您的问题可能是带宽。这可以在几个地方:

  • 首先加载原始数据
  • 在训练过程中 CPU 和 GPU 之间的数据传输(@BlessedKey 指出,增加批量大小在这里会有所帮助,但请注意内存使用量的增加)
  • CPU 上进程之间的数据传输(这 - 特别是在 Node.js 中) - 尝试直接在将要使用它的进程中加载​​数据

结论

抱歉,答案很长。这有点像我自己的参考,就像回答你的问题一样。总之,总结一下:

  • 尝试并行训练多个模型
  • 注意 i/o 内存带宽
  • 密切监控性能,看看您是否获得了训练速度的净增长

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2020-06-27
    • 2018-12-02
    • 2020-02-19
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多