在预测时使用CUDA GPU进行高吞吐量流

时间:2017-05-09 23:09:26

标签: cuda gpu keras theano nvidia

我们正在尝试开发一个具有面向用户组件的自然语言处理应用程序。用户可以通过API调用模型,并返回结果。 这些模型是使用Keras和Theano预先训练的。我们使用GPU来加速培训。但是,使用GPU仍然可以显着加快预测速度。目前,我们有一台带有两个GPU的机器。但是,在运行时(例如,当运行面向用户的位时)存在一个问题:通过CUDA共享GPU的多个Python进程似乎不能提供并行性加速。 我们正在使用带有libgpuarray(pygpu),Theano和Keras的nvidia-docker。 GPU仍然大部分处于闲置状态,但添加更多Python工作程序并不能加快这一过程。

解决在API后面运行GPU模型的问题的首选方法是什么?理想情况下,我们会在购买新GPU之前更有效地利用现有GPU。

我可以想象在将它发送到GPU之前我们需要某种缓冲区,而不是为每个HTTP调用请求锁定?

1 个答案:

答案 0 :(得分:1)

这不是您更常见问题的答案,而是基于我如何理解您描述的情景的答案。

如果有人编写了一个使用GPU进行某些计算任务的系统,他们(希望)花时间并行化其执行,以便从GPU可以提供的全部资源中获益,或者接近它。 / p>

这意味着如果你添加第二个类似的任务 - 即使是并行 - 完成它们的总时间应该类似于连续完成它们的时间量,即一个接一个 - 因为很少未充分利用的GPU资源可以为第二项任务带来好处。实际上,甚至可能是两个任务都会变慢的情况(例如,他们都会以某种方式使用L2缓存,并且当它们一起运行时它们会捶打它)。

无论如何,当您想要提高性能时,一件好事就是分析您的应用程序 - 在这种情况下,使用nvprof profiler或其nvvp frontend(第一个链接是官方文档) ,第二个链接是演示文稿)。