Cha*_*ker 5 machine-learning neural-network conv-neural-network pytorch
我想要一种代码量最少的方法,以便我的脚本中的所有内容都在 GPU 中自动运行(或者 pytorch 的标准方式)。就像是:
torch.everything_to_gpu()
Run Code Online (Sandbox Code Playgroud)
然后它就“正常工作”了。我不关心手动将东西放入 GPU 等。我只是希望它自动完成它的事情(有点像张量流那样?)。我确实在 pytorch 论坛中看到了相关问题,但似乎他们没有直接解决我的问题。
现在在我看来(从我经历过的例子来看),可以通过为每个火炬变量/张量指定一个简单类型来完成我想要的事情,如下所示:
dtype = torch.FloatTensor
# dtype = torch.cuda.FloatTensor # Uncomment this to run on GPU
Run Code Online (Sandbox Code Playgroud)
所以只要每个变量/张量都以dtype
某种方式进行,例如
Variable(torch.FloatTensor(x).type(dtype), requires_grad=False)
Run Code Online (Sandbox Code Playgroud)
那么我们可以使用该单个变量来控制 GPU 中的内容和不包含的内容。如果存在这样一个命令,我遇到的问题是在使用torch.nn.Module
package.json 时遇到的问题。例如当使用
l = torch.nn.Linear(D_in,D_out)
Run Code Online (Sandbox Code Playgroud)
或服装 NN 类(继承自它)。这种情况似乎处理它的最好方法是使用:
torch.nn.Module.cuda(device_id=device_id) # device_id = None is the default
Run Code Online (Sandbox Code Playgroud)
函数/方法。然而,这似乎向我表明,可能还有其他我可能不知道的隐藏功能,以确保一切确实在 GPU 中运行。
因此:是否有一种集中方式来确保所有内容都在某个(最好是自动)分配的 GPU 中运行?
经过反思,我认为让我困惑的一件事是我不明白pytorch如何在GPU上进行计算的模型。例如,我相当确定 MATLAB 的工作方式是,如果至少一件事是在 GPU 上进行的,那么所有进一步的计算都将在 GPU 上进行。所以我想,我想知道,这就是 pytorch 的工作原理吗?如果可能的话,它与 TensorFlow 相比如何?
我认为不存在这样的事情。
据我所知,人们通常创建的类:
i) 继承自nn.Module
.
ii) 具有描述模型参数的属性(例如self.opt
);
iii) 将每个变量/参数设置为属性(例如self.my_var
)
iv)如果设置了.cuda()
某种参数,则调用它。-use_gpu
我还在maybe_cuda(variable)
我的类中使用了一个函数,以便更轻松地创建变量(传递一个变量,variable.cuda()
如果opt.cuda
为 True,则返回。
事实上,我做了这样的事情(可能并不完美,但发现它很实用):
class MyModule(nn.Module):
def __init__(self, opt):
super(MyModule, self).__init__()
self.opt = opt
def maybe_cuda(self, variable):
if self.opt.cuda:
return variable.cuda()
return variable
class Model(MyModule):
def __init__(self, opt, other_arg):
super(Model, self).__init__(opt)
self.linear = nn.Linear(opt.size1, opt.size2)
self.W_out = nn.Parameter(_____)
def forward(self, ____):
# create a variable, put it on GPU if possible
my_var = self.maybe_cuda(Variable(torch.zeros(___)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3382 次 |
最近记录: |