【问题标题】:torch: difference in GPU / CPU responses火炬:GPU / CPU响应的差异
【发布时间】:2017-08-06 17:46:03
【问题描述】:

我有一个简单的问题。我试图了解为什么 gpu (cuda) 和 cpu 给出的网络响应存在很大差异。这是一个最小的例子:

require 'torch'
require 'nn'
require 'cunn'
require 'paths'

-- a small convnet
net = nn.Sequential()
net:add(nn.SpatialConvolution(3,16, 3,3))
net:add(nn.SpatialConvolution(16,8, 3,3))
net:add(nn.SpatialConvolution(8,1, 3,3))

-- randomize weights
local w = net:getParameters()
w:copy(torch.Tensor(w:nElement()):uniform(-1000,1000))

-- random input
x = torch.Tensor(3, 10, 10):uniform(-1,1)

-- network on gpu
net:cuda()
y = net:forward(x:cuda())
print(y)

-- network on cpu
y2 = net:clone():double():forward(x)
print(y2)

-- check difference (typically ~10000)
print("Mean Abs. Diff:")
print(torch.abs(y2-y:double()):sum()/y2:nElement())

我在这里做错了什么,还是 CPU/GPU 计算之间的一些预期差异?

【问题讨论】:

    标签: torch


    【解决方案1】:

    事实证明,即使平均绝对差异可能很大,但百分比差异非常小(大约 1e-5%):

    print("Mean Abs. % Diff:")
    print(torch.abs(y2-y:double()):cdiv(torch.abs(y2)):sum() / y2:nElement())
    

    是平均绝对差异。由于 cuda 处理浮点精度的方式与 cpu 相比存在一些差异,所以很大?

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2017-02-23
      • 2021-06-18
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多