首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Model.to(设备)和model=model.to(设备)有什么区别?

Model.to(设备)和model=model.to(设备)有什么区别?
EN

Stack Overflow用户
提问于 2020-01-02 15:57:52
回答 2查看 19.3K关注 1票数 13

假设模型最初存储在CPU上,然后我想将其移动到GPU0,那么我可以这样做:

代码语言:javascript
运行
复制
device = torch.device('cuda:0')
model = model.to(device)
# or
model.to(device)

这两行之间的区别是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-01-02 16:04:03

没有语义上的区别。nn.Module.to函数将模型移动到设备。

但要小心。

对于张量(documentation):

代码语言:javascript
运行
复制
# tensor a is in CPU
device = torch.device('cuda:0')
b = a.to(device)
# a is still in CPU!
# b is in GPU!
# a and b are different 

对于型号(documentation):

代码语言:javascript
运行
复制
# model a is in CPU
device = torch.device('cuda:0')
b = a.to(device)
# a and b are in GPU
# a and b point to the same model 
票数 35
EN

Stack Overflow用户

发布于 2020-01-02 16:12:02

引用to上的文档:

当在图形处理器上加载经过训练和保存的模型时,只需使用model.to(torch.device('cuda'))将初始化的模型转换为

优化模型。此外,请确保对所有模型输入使用.to(torch.device('cuda'))函数,以便为模型准备数据。注意,调用my_tensor.to(device)会在GPU上返回一个新的my_tensor副本。它不会覆盖my_tensor。因此,请记住手动重写张量:my_tensor = my_tensor.to(torch.device('cuda'))

大多数情况下,在torch.nn.Module上使用to时,是否保存返回值并不重要,作为一种微优化,实际上最好不要保存返回值。当在torch张量上使用时,您必须保存返回值-因为您实际上正在接收张量的副本。

参考:Pytorch to()

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

https://stackoverflow.com/questions/59560043

复制
相关文章

相似问题

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