multithreading - 可以在一个GPU上并行运行多个 tensorflow 推论吗?

标签 multithreading tensorflow gpu tensorflow-serving

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

  • 当多个请求同时到达时,假设我们没有使用批处理,这些请求是在GPU上顺序运行还是并行运行? 我知道独立的进程具有单独的CUDA上下文,这些上下文在GPU上顺序运行。但是这些请求实际上是同一进程中的不同线程,并且应该共享一个CUDA上下文。因此,根据documentation,GPU可以同时运行多个内核。如果是这样,这是否意味着如果我同时有大量请求到达,GPU利用率可以提高到100%?但这在我的实验中从未发生过。
  • 在不同线程中运行一个 session 与在不同线程中运行不同 session 有什么区别? 哪种是实现Tensorflow服务器的正确方法? Tensorflow Serving使用哪一个?

  • 任何建议将被认真考虑。谢谢!

    最佳答案

    关于#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)

    谢谢。

    关于multithreading - 可以在一个GPU上并行运行多个 tensorflow 推论吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907275/

    相关文章:

    Tensorflow:从具有可变序列长度的双向 rnn 获取输出

    audio - 是否有可能从 tensorflow mfcc 和 librosa mfcc 获得完全相同的结果?

    ubuntu - 在 ubuntu 16.04 中为 AMD 安装 OpenCL

    java - 静态方法是隐式线程安全的吗?

    multithreading - 使用2个线程在串口上同时读写

    java.lang.IllegalMonitorStateException : (m=null) Failed to get monitor for

    machine-learning - Tensorflow conv2d_transpose 大小错误 "Number of rows of out_backprop doesn' t 匹配计算”

    c++ - nsight eclipse 中的 CUFFT_ALLOC_FAILED 错误

    python - tf.test.is_built_with_cuda() 应该输出什么?

    java - 多线程程序输出不符合预期