如何将推理与在多个GPU上使用的张量流并行化?

时间:2019-01-28 15:19:51

标签: python tensorflow tensorflow-serving

我正在使用Tensorflow-serving部署我的tensorflow模型。我在可用的服务器上有多个GPU,但是到目前为止,在推理过程中,只使用了一个GPU。

我目前的想法是,并行处理大量图像的分类,是为每个可用的GPU生成张量流服务图像,并让并行的“工人”从生成器中获取图像,提出请求并等待答案。然后从生成器获取新图像,依此类推。这意味着我必须实现自己的数据处理程序,但这似乎是可以实现的。

我在TensorFlow Serving Batching中阅读了有关SharedBatchScheduler的内容,但是我不知道这对进一步检查是否有用。

总体上来说,我对张量流服务还很陌生,我想知道这是否是实现我想要的最直接的方法。

在此先感谢您的帮助/建议!


编辑: 感谢您的澄清性问题:我知道311问题github.com/tensorflow/serving/issues/311。 有人有解决此问题的方法吗?

1 个答案:

答案 0 :(得分:0)

这对docker和function! Mymatch(sel) "reselect and copy selection in unnamed reg normal gv""y if a:sel == 1 :call matchadd("MatchYellow",@") elseif a:sel == 2 :call matchadd("MatchGreen",@") elseif a:sel == 3 :call matchadd("MatchRed",@") elseif a:sel == 4 :call matchadd("MatchBlue",@") elseif a:sel == 5 :call matchadd("MatchPurple",@") elseif a:sel == 6 :call matchadd("MatchWhite",@") elseif a:sel == 7 :call matchadd("MatchOrange",@") elseif a:sel == 8 :call matchadd("MatchPink",@") elseif a:sel == 9 :call matchadd("MatchCyan",@") else :call matchadd("MatchYellow",@") endif endfunction map mm :call Mymatch(v:count)<CR> 完全可行(从issuenvidia-docker 2.0来看,他们正在使用第一个版本)。我确实使用多个GPU和Serving进行了尝试;但是,最终并没有在多个GPU上运行它。

尽管如此,我有一台带有4个GPU的主机,并且当前为每个运行Tensorflow进行训练的自定义映像调度1个GPU,以便每个用户都可以在隔离的环境中使用GPU。以前,我使用Kubernetes进行设备供应和容器管理,但这对我需要做的事情来说太过分了。目前,我正在使用docker run --runtime=nvidia ...做所有的魔术。这是一个示例:

docker-compose

此处的关键部分是NVIDIA_VISIBLE_DEVICES变量,其中GPU的索引对应于version: '3' services: lab: build: ./tensorlab image: centroida/tensorlab:v1.1 ports: - "30166:8888" - "30167:6006" environment: NVIDIA_VISIBLE_DEVICES: 0,1,2 ... 的输出