使用multi-gpus没有加速

时间:2016-03-25 10:14:08

标签: python performance theano

我尝试使用以下代码测试multi-gpus的性能:

test__multi.py

import time
import numpy as np
from numpy.random import random
import theano
import theano.tensor as T
from theano import shared
from theano import function

a = time.time()

v_00 = shared(
        value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
        ,target='dev0'
)
v_01 = shared(
        value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
        ,target='dev0'
)
v_10 = shared(
        value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
        ,target='dev1'
)
v_11 = shared(
        value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
        ,target='dev1'
)
b = time.time()
print b - a

f = function(inputs=[], outputs=[
        theano.tensor.dot(v_00, v_01),
        theano.tensor.dot(v_10, v_11)
        ]
)
c = time.time()
print c - b

res0, res1 = f()
d = time.time()
print d - c

我得到的结果如附图所示,当我使用两个不同的gpu设备时没有改进。(THEANO_FLAGS ='contexts = dev0-> cuda0; dev1-> cuda1')

终端中的日志如下:

lanlin@UbuntuGpu:~$ cd python
lanlin@UbuntuGpu:~/python$ THEANO_FLAGS='contexts=dev0->cuda0;dev1->cuda0' python test__multi.py
Mapped name dev0 to device cuda0: Tesla K80 (CuDNN not available)
Mapped name dev1 to device cuda0: Tesla K80 (CuDNN not available)
6.47632694244
0.34957909584
2.27110910416
lanlin@UbuntuGpu:~/python$ THEANO_FLAGS='contexts=dev0->cuda0;dev1->cuda1' python test__multi.py
Mapped name dev0 to device cuda0: Tesla K80 (CuDNN not available)
Mapped name dev1 to device cuda1: Tesla K80 (CuDNN not available)
6.49380016327
0.36678981781
2.40865397453

1 个答案:

答案 0 :(得分:0)

一些变化将揭示改进:

  1. 告诉功能输出保持在GPU上使用例如theano.tensor.dot(v_00, v_01).transfer('dev0')
  2. 在计时(它将编译)之前调用该函数一次,然后在计时循环中多次调用该函数,并将大小从10,240减少到1,024。
  3. 只从GPU上取下最终答案,例如循环完成后np.asarray(res0)或甚至print(res_0),以及完成此操作的时间。这确保了所有计算都已完成。
  4. 每次执行数学运算时,必须避免观察加速是将输出传送到CPU。从循环开始到np.assarray调用结束所经过的时间将是计算和传输最后一个答案的总时间。循环期间经过的时间只是在GPU中排队操作的时间,而不是完成它们的时间。我不确定如何单独计算GPU执行时间;你必须推断它。