如何在 GPU 上并行运行多个模型的 tensorflow 推理?

off*_*555 11 python keras tensorflow

你知道用 1 个 GPU tensorflow 对 2 个 python 进程进行推理的优雅方法吗?

假设我有 2 个进程,第一个是分类猫/狗,第二个是分类鸟/飞机,每个进程运行不同的 tensorflow 模型并在 GPU 上运行。这 2 个模型将连续获得来自不同相机的图像。通常,tensorflow 会占用整个 GPU 的所有内存。所以当你开始另一个进程时,它会崩溃,说内存不足或卷积 CUDA 失败或类似的东西。是否有教程/文章/示例代码显示如何在不同进程中加载​​ 2 个模型并同时运行?如果您在执行一些繁重的图形(例如玩游戏)时运行模型推理,这也非常有用。我也想知道运行模型如何影响游戏。

我试过使用 python 线程,它可以工作,但每个模型的预测速度要慢 2 倍(而且你知道 python 线程没有使用多个 CPU 内核)。我想使用 python Process 但它不起作用。如果您有几行代码示例,我将非常感激。

我还附上了当前的线程代码: 在此处输入图片说明

off*_*555 3

好的。我想我现在已经找到了解决方案。

我使用tensorflow 2,基本上有两种方法来管理GPU的内存使用。

  1. 将内存增长设置为 true
  2. 将内存限制设置为某个数量

您可以使用这两种方法,忽略所有有关内存不足的警告消息。我仍然不知道它到底意味着什么,但模型仍在运行,这就是我关心的。我测量了模型运行的确切时间,它比在 CPU 上运行要好得多。如果我同时运行两个进程,速度会下降一点,但仍然比在 CPU 上运行要好得多。

对于内存增长方法,我的 GPU 是 3GB,因此第一个进程尝试分配所有内容,然后第二个进程表示内存不足。但它仍然有效。

对于内存限制方法,我将限制设置为某个数字,例如 1024 MB。两个过程都有效。

那么您可以设置的正确最小数量是多少?

我尝试减少内存限制,直到发现我的模型可以在 64 MB 限制下正常工作。预测速度仍然与我将内存限制设置为 1024 MB 时相同。当我将内存限制设置为 32MB 时,我注意到速度下降了 50%。当我设置为 16 MB 时,模型拒绝运行,因为它没有足够的内存来存储图像张量。这意味着我的模型至少需要 64 MB,考虑到我有 3 GB 的空闲空间,这个空间很小。这也允许我在玩一些视频游戏时运行模型。

结论:我选择使用内存限制方法,限制为 64 MB。您可以在此处查看如何使用内存限制: https: //www.tensorflow.org/guide/gpu

我建议您尝试更改内存限制,以查看您的模型所需的最小值。当内存不足时,您会看到速度下降或模型拒绝运行。