一个GPU上能够并行运行多个tensorflow推断吗?

10

我正在尝试在一台NVIDIA Tesla V100 GPU上运行TensorFlow作为服务器。作为服务器,我的程序需要同时接受多个请求。因此,我的问题如下:

  1. 当多个请求同时到达时(假设我们不使用批处理),这些请求是按顺序还是并行在GPU上运行? 我知道独立的进程有单独的CUDA上下文,这些上下文在GPU上按顺序运行。但是,这些请求实际上是同一进程中的不同线程,应该共享一个CUDA上下文。因此,根据文档,GPU可以同时运行多个内核。如果是这样,那么如果我在同一时间有大量请求到达,GPU利用率是否可以达到100%?但是这在我的实验中从未发生过。

  2. 在不同线程中运行一个会话与在不同线程中运行不同会话之间有什么区别?哪种方法是实现TensorFlow服务器的正确方式?TensorFlow Serving使用哪种方法?

非常感谢您的建议!

2个回答

2
关于#1:所有请求将按顺序在同一GPU上运行,因为TF对于每个物理GPU设备使用全局单计算流(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L284)。
关于#2:就多流而言,这两个选项是相似的:默认情况下,不启用多流。如果您想尝试多个流,请尝试virtual_device选项(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/protobuf/config.proto#L138
谢谢。

1
我对“多流传输”在这里的含义有些不清楚。您是指每个逻辑设备都会获得自己的流吗?如果我理解正确,这似乎与您对第一部分的回答相矛盾,其中您说“TF为每个物理GPU设备使用全局单计算流”。 - Neil

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接