【问题标题】:Titan XP vs Quadro P400 GPU in PytorchPytorch 中的 Titan XP 与 Quadro P400 GPU
【发布时间】:2018-08-20 11:52:43
【问题描述】:

我尝试了我机器上的两个 GPU,我预计 Titan-XP 会比 Quadro-P400 更快。但是,两者的执行时间几乎相同。

我需要知道 PyTorch 是否会在运行时动态选择一个 GPU,或者我自己必须指定 PyTorch 在运行时使用哪一个。

这里是测试中使用的代码sn-p:

import torch
import time

def do_something(gpu_device):
    torch.cuda.set_device(gpu_device)  # torch.cuda.set_device(device_num)
    print("current GPU device ", torch.cuda.current_device())
    strt = time.time()
    a = torch.randn(100000000).cuda()   
    xx = time.time() - strt
    print("execution time, to create 1E8 random numbers, is ", xx)
    # print(a)
    # print(a + 2)

no_of_GPUs= torch.cuda.device_count()
print("how many GPUs are there:", no_of_GPUs)
for i  in range(0, no_of_GPUs):
    print(i, "th GPU is", torch.cuda.get_device_name(i))
    do_something(i)

样本输出:

how many GPUs are there: 2
0 th GPU is TITAN Xp COLLECTORS EDITION
current GPU device  0
execution time, to create 1E8 random numbers, is  5.527713775634766

1 th GPU is Quadro P400
current GPU device  1
execution time, to create 1E8 random numbers, is  5.511776685714722

【问题讨论】:

  • 您是否确定您的 do_something 函数实际上是在 GPU 上而不是在 CPU 上创建这些随机数,然后将结果传输到 GPU 上?跨度>
  • @talonmies ..这行不应该 ... a = torch.randn(100000000).cuda() ... 在 GPU 上创建随机数吗?
  • 我对torch不太了解,但仅了解Python语法,不。我将其读作“在默认内存空间中创建一个充满非正规随机数的张量并将该张量复制到 GPU”。我猜默认是 CPU 内存

标签: performance time cuda gpu pytorch


【解决方案1】:

尽管您可能会相信,但您所看到的性能差异的缺乏是因为随机数生成是在您的主机 CPU 而不是 GPU 上运行的。如果我像这样修改您的do_something 例程:

def do_something(gpu_device, ongpu=False, N=100000000):
    torch.cuda.set_device(gpu_device)
    print("current GPU device ", torch.cuda.current_device())
    strt = time.time()
    if ongpu:
        a = torch.cuda.FloatTensor(N).normal_()
    else:
        a = torch.randn(N).cuda()
    print("execution time, to create 1E8 random no, is ", time.time() - strt)
    return a

并以两种方式运行,我得到非常不同的执行时间:

In [4]: do_something(0)
current GPU device  0
execution time, to create 1E8 random no, is  7.736972808837891
Out[4]: 

-9.3955e-01
-1.9721e-01
-1.1502e+00
     ......     
-1.2428e+00
 3.1547e-01
-2.1870e+00
[torch.cuda.FloatTensor of size 100000000 (GPU 0)]

In [5]: do_something(0,True)
current GPU device  0
execution time, to create 1E8 random no, is  0.001735687255859375
Out[5]: 

 4.1403e+06
 5.7016e+06
 1.2710e+07
     ......     
 8.9790e+06
 1.3779e+07
 8.0731e+06
[torch.cuda.FloatTensor of size 100000000 (GPU 0)]

即你的版本需要 7 秒,我的需要 1.7 毫秒。我认为很明显哪一个在 GPU 上运行....

【讨论】:

  • 谢谢!这次真的是在 GPU 上。但是,Quadro 仍然比 Titan Xp 快,不知道为什么(顺便说一句,我使用的是 Cuda 8.0 版)!第0个GPU是TITAN Xp COLLECTORS EDITION-执行时间,创建1E8随机编号,是6.318092346191406e-05,,,,,,,,第1个GPU是Quadro P400,执行时间,创建1E8随机编号,是4.482269287109375e- 05
  • CUDA API 是异步的。再一次,你可能没有测量实际的执行时间,我不知道 pytorch 在内部是如何工作的,所以我不知道是不是这样。尝试使用像 nvprof 这样的分析工具来查看执行时间
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 2023-03-09
  • 2016-02-26
  • 2020-04-17
  • 1970-01-01
  • 2016-09-28
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多