Theano 在 GPU 上的结果比 CPU 上差
我正在做这个教程:
http://deeplearning.net/software/theano/tutorial/using_gpu.html#exercise
这个教程的解决方案在这里:
http://deeplearning.net/software/theano/_downloads/using_gpu_solution_1.py
但是我遇到的问题是,当我用GPU运行代码时:
THEANO_FLAGS=mode=FAST_RUN,device=gpu time python using_gpu_solution_1.py
我得到了以下输出:
Using gpu device 0: Tesla C2050 / C2070
Used the gpu
13.37user 3.69system 0:16.49elapsed 103%CPU (0avgtext+0avgdata 617376maxresident)k
0inputs+16outputs (0major+75442minor)pagefaults 0swaps
而当我用CPU运行时:
THEANO_FLAGS=mode=FAST_RUN,device=cpu time python using_gpu_solution_1.py
我得到了以下输出:
Used the cpu
6.85user 14.50system 0:04.43elapsed 481%CPU (0avgtext+0avgdata 241120maxresident)k
0inputs+16outputs (0major+43904minor)pagefaults 0swaps
在这个解决方案中,他们提到用GPU的速度几乎是CPU的两倍。
但我发现用GPU的时间比用CPU还要长。
是不是因为代码在CPU上运行时用了多个核心,所以比GPU更快呢?
有没有人能告诉我我哪里做错了?我只看到用GPU时系统时间有所改善。
这就是他们所说的加速吗?因为整体的耗时在GPU上还是更长。
1 个回答
3
这里有一个问题(1)和一些考虑(2-3):
1) 你的计时不准确。你现在的计时方式把Theano编译的时间也算进去了。Theano编译的时间不应该算在性能分析里。你应该只计算在Theano函数内部花费的时间。为此,你需要修改脚本,使用Theano的性能分析工具,就像在性能分析中那样。
2) 这是一个简单的例子。它只做了纯粹的随机梯度下降(SGD)。要想从GPU中获得更好的速度提升,我们需要使用小批量(minibatch)和SGD。如果不这样做,GPU就没有足够的数据来进行并行计算。
3) 由于这是一个简单的例子,模型也很小,所以速度提升会根据使用的CPU和GPU的不同而有很大差异。你可能是在一个比原来更好的CPU上进行计时,或者是使用了并行的BLAS库。