我正在尝试在一个NVIDIA Tesla V100 GPU上将Tensorflow作为服务运行。作为服务器,我的程序需要同时接受多个请求。因此,我的问题如下:
当多个请求同时到达时,假设我们没有使用批处理,这些请求是在GPU上顺序运行还是并行运行??我了解独立的进程具有独立的CUDA上下文,在GPU上依次运行。但是这些请求实际上是同一进程中的不同线程,并且应该共享一个CUDA上下文。因此,根据documentation,GPU可以同时运行多个内核。如果这是真的,那是否意味着如果我同时有大量请求到达,GPU利用率可以提高到100%?但这在我的实验中从未发生过。
在不同线程中运行一个会话与在不同线程中运行不同会话有什么区别?哪种是实施Tensorflow服务器的正确方法? Tensorflow Serving使用哪一个?
任何建议将不胜感激。谢谢!
答案 0 :(得分:0)
关于#1:由于TF为每个物理GPU设备(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L284)使用全局单个计算流,因此所有请求将依次在同一GPU上运行
关于#2:就多流而言,这两个选项相似:默认情况下,不启用多流。如果您想尝试多数据流,可以尝试使用virtual_device
选项(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/protobuf/config.proto#L138)
谢谢。
答案 1 :(得分:0)
对于模型推论,您可能需要查看高性能推论引擎,例如nvidia triton。它允许多个模型实例,每个模型实例都有专用的cuda流,GPU可在其中利用更多的并行性。