首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一个类的所有参数和对象发送到PyTorch中的同一设备

将一个类的所有参数和对象发送到PyTorch中的同一设备
EN

Stack Overflow用户
提问于 2021-09-16 04:14:33
回答 1查看 22关注 0票数 0

我在PyTorch中有以下虚拟代码

代码语言:javascript
运行
复制
class inside(nn.Module):
    def __init__(self):
        super(inside, self).__init__()        
        self.weight_h = nn.Parameter(SOMETHING GOES HERE) # send to CPU or GPU
        self.weight_v = nn.Conv2d(SOMETHING GOES HERE) # send to CPU or GPU

    def forward(self, x):
        ...
        return x

class main_class(nn.Module):
    def __init__(self):
        super(main_class, self).__init__()        
        self.paramA = nn.Conv2d(...)
        self.paramB = nn.Conv2d(...)
        self.in_class = inside()

    def forward(self, x):
        ...
        return x

device = #Define what GPU device to use or CPU

object = main_class()
object = object.to(device)

假设在这段代码中,device是GPU2。然后我知道参数self.paramAself.paramB肯定已经加载到GPU2上,而不是加载到CPU或任何其他GPU上。但是对self.weight_hself.weight_v又能说些什么呢?它们是否保证在GPU2上,或者我需要为inside类的参数显式声明这一点吗?

我使用的是PyTorch 1.8.1,但可能建议使用一种非常通用的方法,该方法适用于任何PyTorch version>=1.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 04:26:00

我猜当你说这段代码的时候--这个术语可以更清晰一些。有两个东西可以放在GPU中。其中一件事是关于数据。你可以把你的数据保存在GPU之类的地方。

它还有一个部分,模型可以转移到GPU上。在这种情况下,当你做final_model.to(...)时,它内部的所有模块作为最终模型的一部分将被转移到图形处理器。

我之所以区分这两个,是因为有时很容易把这两个事情搞混。

所以最后的答案是,是的,他们保证在GPU上。(属于大型模型一部分的模型权重)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69202259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档