【问题标题】:Titan X Pascal on VGG16 much slower on my machine than in benchmark我的机器上 VGG16 上的 Titan X Pascal 比基准测试慢得多
【发布时间】:2017-05-03 18:45:47
【问题描述】:

我有一个 Titan X Pascal、Intel i5-6600、16GB Ram 并在 Ubuntu 14.04 中运行 torch7。 Nvidia 驱动版本为 375.20,CUDA Toolkit 8.0 和 cuDNN v5.1。

我对来自 Caffe 的相同 VGG16 网络(通过 loadcaffe 导入)进行了与 in this Benchmark 相同的测试。但是,对于前向传递,我的设置需要 80 毫秒,这显然是基准测试所需时间的两倍。

我还生成了一批 16 张图像,具有 3 个通道,尺寸为 224x224。相关代码为:

 local model = loadcaffe.load("/home/.../Models/VGG16/VGG_ILSVRC_16_layers_deploy.prototxt",
                          "/home/.../Models/VGG16/VGG_ILSVRC_16_layers.caffemodel",
                          "cudnn")

 for i=1, 50 do
   local input = torch.randn(16, 3, 224, 224):type("torch.CudaTensor")

   cutorch.synchronize()
   local timer = torch.Timer()

   model:forward(input)
   cutorch.synchronize()

   local deltaT = timer:time().real
   print("Forward time: " .. deltaT)
 end

输出是: Forward time: 0.96536016464233 Forward time: 0.10063600540161 Forward time: 0.096444129943848 Forward time: 0.089151859283447 Forward time: 0.082037925720215 Forward time: 0.082045078277588 Forward time: 0.079913139343262 Forward time: 0.080273866653442 Forward time: 0.080694913864136 Forward time: 0.082727193832397 Forward time: 0.082070827484131 Forward time: 0.079407930374146 Forward time: 0.080456018447876 Forward time: 0.083559989929199 Forward time: 0.082060098648071 Forward time: 0.081624984741211 Forward time: 0.080413103103638 Forward time: 0.083755016326904 Forward time: 0.083209037780762 ...

我是否需要做任何额外的事情才能达到这个速度?还是我在这里做错了什么? 还是因为我使用的是 Ubuntu 14.04,而不是 Ubuntu 16.04(尽管在基准测试中,在 Ubuntu 14.04 上运行的 GTX 1080 也只需要 60 毫秒)?

【问题讨论】:

  • 为什么两次(如果有)调用 cutorch.synchronize?据我所知,这仅与为什么要并行 gpus 有关。
  • 此外,每次生成数据时,都会将副本复制到 gpu(通过 cuda 张量)。更有效的解决方案是全部生成,然后将所有内容复制到 gpu,然后执行 SGD 或 mini-batch。你有 12GB,尽情享受吧
  • Cuda 在 GPU 上进行队列作业。因此,为了能够获得有效的计时结果,我第一次调用 synchronize() 以等待张量完成在 gpu 上的复制。然后我启动计时器,将转发作业排队,然后使用第二个 synchronize() 等待 forward() 步骤完成。
  • 我知道在每个步骤中总是在 gpu 上重新分配新内存效率不高。这只是一个小代码 sn-p 来测试转发时间,而不是我的实际代码。我也只使用批量大小 16 来与基准进行正确比较。

标签: ubuntu lua gpu torch cudnn


【解决方案1】:

我终于找到了解决办法。

我必须启用 cudnn.benchmark 标志:

cudnn.benchmark = true

默认情况下,它设置为 false,因此 cudnn 不会选择最快的算法。我的前进时间现在大约是 39 毫秒。

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 2021-10-09
    • 2011-08-06
    • 2017-05-25
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多