TensorflowJS:同时训练多个模型(以提高性能)

时间:2018-06-28 13:09:28

标签: tensorflow.js

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

我还有什么可以寻找的其他东西来提高训练水平吗?

1 个答案:

答案 0 :(得分:0)

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

1:GPU使用情况

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

如果看到GPU使用率较低,则瓶颈可能在图片的其他位置-见下文。

2:Javascript CPU使用率

您注意到,JavaScript并不是真正的基于线程的语言。为此,必须注意主Javascript线程的CPU使用率。如果要用尽CPU,则可能是瓶颈。可以做一些事情来改善这种情况:

  • 如果您要训练多个模型,请尝试在不同的过程中训练它们。在浏览器中,这表示WebWorkers(假设WebWorkers与Tensorflow.js兼容);对于Node.js,这意味着多个进程(例如,使用child_process.fork()(小心在进程之间传输大量数据-这是 slow ),或者也许是threads(尽管我没有亲自尝试过。)
  • 如果您有很多预处理步骤可将数据转换为正确的格式,请尝试提前执行其中一些步骤以加快处理速度。另外,请检查模型中的图层是否采用略有不同的格式,以免转换为这些格式。

3:GPU内存使用情况

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

4:I / O带宽

如果您的CPU和GPU都没有耗尽,则可能是带宽问题。这可以在几个地方:

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

结论

很抱歉,答案很长。这是我自己的参考,也可以回答您的问题。总之,总结一下:

  • 尝试并行训练多个模型
  • 请注意I / o内存带宽
  • 密切监视性能,以查看培训速度是否净增加