假设模型原本是存储在CPU上的,然后我想把它移到GPU0上,那么我可以这样做:
device = torch.device('cuda:0')
model = model.to(device)
# or
model.to(device)
Run Code Online (Sandbox Code Playgroud)
这两行有什么区别?
you*_*hao 28
没有语义差异。nn.Module.to函数将模型移动到设备。
但要谨慎。
对于张量(文档):
# 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
Run Code Online (Sandbox Code Playgroud)
对于模型(文档):
# 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
Run Code Online (Sandbox Code Playgroud)
Man*_*ano 10
引用文档to:
在 GPU 上加载经过训练并保存在 GPU 上的模型时,只需使用 将初始化模型转换为 CUDA 优化模型
model.to(torch.device('cuda'))。此外,请务必.to(torch.device('cuda'))在所有模型输入上使用该 函数来为模型准备数据。请注意,调用会my_tensor.to(device)返回my_tensorGPU 上的新副本。它不会覆盖my_tensor. 因此,请记住手动覆盖张量:my_tensor = my_tensor.to(torch.device('cuda')).
大多数情况下,to在 a 上使用时torch.nn.Module,是否保存返回值都没有关系,作为一种微优化,实际上最好不保存返回值。在 Torch 张量上使用时,您必须保存返回值 - 看到您实际上正在接收张量的副本。
参考:Pytorch to()
| 归档时间: |
|
| 查看次数: |
15584 次 |
| 最近记录: |