我正在尝试进行一些常见的计算,例如矩阵乘法,但没有进行梯度计算。我的计算示例就像
import numpy as np
from scipy.special import logsumexp
var = 1e-8
a = np.random.randint(0,10,(128,20))
result = np.logsumexp(a, axis=1) / 2. + np.log(np.pi * var)
我想使用割炬(gpu)来加快计算速度。这是代码
import numpy as np
import torch
var = 1e-8
a = np.random.randint(0,10,(128,20))
a = torch.numpy_from(a).cuda()
result = torch.logsumexp(a, dim=1)/ 2. + np.log(np.pi*var)
但是我有一些问题:
上面的代码可以加快计算速度吗?我不知道它是否有效。
我是否需要将所有值转换为torch.tensor
,例如从var
转换为torch.tensor(var).cuda()
,从np.log(np.pi*var)
转换为torch.tensor?
我是否需要自己将所有张量转换为gpu,尤其是对于某些中间变量?
如果上述代码不起作用,如何使用gpu加快计算速度?
答案 0 :(得分:0)
您只能使用割炬进行计算。
import torch
# optimization by passing device argument, tensor is created on gpu and hence move operation is saved
# convert to float to use with logsumexp
a = torch.randint(0,10, (128,20), device="cuda").float()
result = torch.logsumexp(a, dim=1)/ 2.
回答您的一些问题:
以上代码可以加快计算速度吗?
这取决于。如果矩阵乘法太多,使用gpu可以加快速度。
我是否需要将所有值都转换为torch.tensor,例如从var转换为torch.tensor(var).cuda(),从np.log(np.pi * var)转换为torch.tensor?
是
我是否需要自己将所有张量转换为gpu,尤其是对于某些中间变量?
仅叶子变量需要转换,中间变量将放置在完成操作的设备上。例如:如果a
和b
在gpu上,则由于操作c=a+b
,c也将在gpu上。