2017-06-05 56 views
6

Basit bir aşağıdaki ifadeyi 2 GPU: C = A^n + B^n üzerinde, sonuçları toplamaya başlamadan önce GPU 1 ve B^n GPU 1 üzerinde A^n hesaplayarak hesaplamak istiyorum. PyTorch dinamik olduğundanMatris çoğaltmasının temel çoklu GPU paralelleştirmesi

with tf.device('/gpu:0'): 
    An = matpow(A, n) 
with tf.device('/gpu:1'): 
    Bn = matpow(B, n) 
with tf.Session() as sess: 
    C = sess.run(An + Bn) 

Ancak, sorun aynı şeyi yapıyor yaşıyorum: gibi

TensorFlow ben giderdim. Aşağıdakileri denedim ama sadece daha fazla zaman alır.

with torch.cuda.device(0): 
    A = A.cuda()  
with torch.cuda.device(1): 
    B = B.cuda() 
C = matpow(A, n) + matpow(B, n).cuda(0) 

Ben torch.nn.DataParallel kullanarak toplu boyut modelleri parallelize bir modül olduğunu biliyorum ama burada daha temel bir şey yapmaya.

cevap

0

Bunun için cuda streams'u kullanabilirsiniz. Bu, zorunlu olarak iki cihaz üzerinden dağıtılmayacaktır, ancak yürütme paralel olacaktır. Ben sadece bu işlemi parallelize eğer gerçekten hesaplama hızlandırır mı emin değilim rağmen

s1 = torch.cuda.Stream() 
s2 = torch.cuda.Stream() 

with torch.cuda.stream(s1): 
    A = torch.pow(A,n) 
with torch.cuda.stream(s2): 
    B = torch.pow(B,n) 

C = A+B 

. Matrisleriniz çok büyük olmalı.

senin gereksinimi cihazlar arasında bölmek ise, akışları önce bu ekleyebilirsiniz:

A = A.cuda(0) 
B = B.cuda(1) 

Sonra güç işleminden sonra, tekrar aynı cihazda, örneğin onları almak gerekir B = B.cuda(0). Bundan sonra ekleme yapabilirsiniz.