多个GPU,但PCI总线ID

时间:2017-02-06 10:15:11

标签: tensorflow

这是我编写的一个使用多个GPU的简单脚本:

from subprocess import Popen,PIPE
import os
files = ['data_S3_total_0.csv', 'data_S3_total_1.csv', 'data_S3_total_2.csv', 'data_S3_total_3.csv']
i = 0 
pids=set()
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
process0 = Popen(['python', 'rnn_5_dse_gpu.py', files[i]] )

os.environ['CUDA_VISIBLE_DEVICES'] = '1'
process1 = Popen(['python', 'rnn_5_dse_gpu.py', files[i+1]] )

os.environ['CUDA_VISIBLE_DEVICES'] = '2'
process2 = Popen(['python', 'rnn_5_dse_gpu.py', files[i+2]] )

os.environ['CUDA_VISIBLE_DEVICES'] = '3'
process3 = Popen(['python', 'rnn_5_dse_gpu.py', files[i+3]] )

pids.add(process0.pid)
pids.add(process1.pid)
pids.add(process2.pid)
pids.add(process3.pid)

pid,retval=os.wait()

基本上,为每个graph-gpu组合创建一个单独的进程。我这样做,因为我的模型是完全独立的。当我使用单个GPU时,我的流程在23 seconds完成,但是对于所有四个流程,完成时间为42 seconds。在我的TF图中,我使用的是with tf.device("/gpu:0")。有人可以告诉我为什么会出现这种开销或者如何找出开销的原因?

一个观察结果:

对于所有4个GPU,Tensorflow显示pciBusID 0000:0e:00.0。但是,当我lspci | grep K80时,我得到了

0e:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
0f:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
86:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
87:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

根据系统,它们都具有不同的PCI总线ID。那么,为什么Tensorflow为所有GPU显示相同的PCI总线ID?这可能是瓶颈吗?

0 个答案:

没有答案