VGG16 上的 Titan X Pascal 在我的机器上比在基准测试中慢得多
Titan X Pascal on VGG16 much slower on my machine than in benchmark
我在 Ubuntu 14.04 中有 Titan X Pascal、Intel i5-6600、16GB Ram 和 运行 torch7。 Nvidia驱动版本为375.20,CUDA Toolkit 8.0和cuDNN v5.1.
我使用来自 Caffe(通过 loadcaffe 导入)的相同 VGG16 网络进行了与 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 毫秒)?
我终于找到了解决办法。
我必须启用 cudnn.benchmark 标志:
cudnn.benchmark = true
默认情况下它设置为 false,因此 cudnn 不会选择最快的算法。我的前进时间现在大约是 39 毫秒。
我在 Ubuntu 14.04 中有 Titan X Pascal、Intel i5-6600、16GB Ram 和 运行 torch7。 Nvidia驱动版本为375.20,CUDA Toolkit 8.0和cuDNN v5.1.
我使用来自 Caffe(通过 loadcaffe 导入)的相同 VGG16 网络进行了与 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 毫秒)?
我终于找到了解决办法。
我必须启用 cudnn.benchmark 标志:
cudnn.benchmark = true
默认情况下它设置为 false,因此 cudnn 不会选择最快的算法。我的前进时间现在大约是 39 毫秒。