Python 使用PyTorch在多个gpu上并行实现张量逆

Python 使用PyTorch在多个gpu上并行实现张量逆,python,gpu,pytorch,Python,Gpu,Pytorch,我想并行运行多个GPU torch.inverse(),但无法运行 我看到了这篇文章,它介绍了matmul的流程。它表明,如果为每个GPU分配了多个张量,matmul将并行运行。我能够为matmul复制此行为,但当我尝试为torch.inverse()执行相同操作时,当我选中“watch nvidia smi”时,它似乎会按顺序运行。同样,当我用torch fft函数替换torch.inverse()函数时,我得到了并行GPU的使用。有什么想法吗 导入火炬 ngpu=torch.cuda.dev

我想并行运行多个GPU torch.inverse(),但无法运行

我看到了这篇文章,它介绍了matmul的流程。它表明,如果为每个GPU分配了多个张量,matmul将并行运行。我能够为matmul复制此行为,但当我尝试为torch.inverse()执行相同操作时,当我选中“watch nvidia smi”时,它似乎会按顺序运行。同样,当我用torch fft函数替换torch.inverse()函数时,我得到了并行GPU的使用。有什么想法吗

导入火炬
ngpu=torch.cuda.device\u count()
#这是每个GPU的分配。
lis=[]
对于范围内的i(ngpu):
lis.append(torch.rand(50005000,device='cuda:'+str(i)))
#根据多个GPU post上的matmul,这应该已经是并行的
#但似乎不是基于手表nvidia smi
C_U8;=[]
对于范围内的i(ngpu):
附加(火炬逆(lis[i]))
编辑:这可以与上面链接中的FFT代码(如下)和Matmul代码进行比较

导入火炬
ngpu=torch.cuda.device\u count()
#这是每个GPU的分配。
lis=[]
对于范围内的i(ngpu):
lis.append(torch.rand(50005000,2,device='cuda:'+str(i)))
#根据多个GPU post上的matmul,这应该已经是并行的
#但似乎不是基于手表nvidia smi
C_U8;=[]
对于范围内的i(ngpu):
C_.append(torch.fft(lis[i],2))

当我运行您的代码时,我注意到并行GPU的使用。您是否使用
watch-n0.5nvidiasmi
来观察gpu的使用情况?是的,我尝试过这个,但我仍然看到它连续出现。我们可以将其与我上面编辑的fft代码的结果进行比较。我观察到的是,一个GPU先占用内存,然后第二个GPU占用内存,用于fft和逆运算。您是否观察到两个GPU同时占用内存进行fft?否,两个GPU的数据分配是串联进行的。我将GPU分配分离出来,并通过jupyter笔记本单元运行实际功能。我的问题是反函数没有在多个GPU上并行运行(在我的例子中是6个)。但是FFT函数和matmul都在GPU上并行运行。