在pytorch中,如果我没有写任何关于使用CPU/GPU的内容,并且我的机器支持CUDA(torch.cuda.is_available() == True
):
1.我的脚本使用的是CPU还是GPU?
1.如果是CPU,我该怎么做才能让它在GPU上运行?我需要重写一切吗?
1.如果使用GPU,如果torch.cuda.is_available() == False
,此脚本是否会崩溃?
1.这能让训练更快吗?
1.我知道Porting PyTorch code from CPU to GPU,但这是旧的。这种情况在v0.4或即将到来的v1.0中会改变吗?
6条答案
按热度按时间oyjwcjzk1#
我的方法是这样的(pytorch 0.4以下):
***更新***pytorch 0.4:
从PyTorch 0.4.0 Migration Guide。
vtwuwzda2#
PyTorch默认为CPU,除非您在模型上使用
.cuda()
方法和PyTorchTensor的torch.cuda.XTensor
变体。vaqhlq813#
1.我的脚本使用的是CPU还是GPU?
“脚本”没有任何设备一致性。在哪里进行计算(CPU或GPU)取决于正在操作的特定Tensor。这取决于Tensor是如何创建的。
然而,
torch.tensor
函数创建Tensor的默认位置 * 设置为'cpu'
:2.如果是CPU,我应该怎么做才能让它在GPU上运行?
您可以使用以下命令change the default type每个新创建的
torch.tensor
:或者您可以手动将每个Tensor复制到GPU:
3.如果是GPU,如果是
torch.cuda.is_available() == False
,该脚本会崩溃吗?是的,在方法1中,脚本将崩溃并出现以下错误:
在方法2中,它将简单地默认为CPU。
4.*******************
That depends.对于大多数常见的PyTorch神经网络训练场景,是的,速度将通过迁移到GPU来提高。
5.我知道将PyTorch代码从CPU移植到GPU,但这是旧的。这种情况在v0.4或即将到来的v1.0中会改变吗?
有多种方法可以将代码从CPU移植到GPU:
语法2通常用于允许通过改变一个变量在CPU和GPU之间切换。
nzk0hqpo4#
如果
torch.cuda.is_available == True
存在以下情况,您应该编写代码以使其使用GPU处理:kgqe7b3p5#
它将使用默认值。在制作模型之前,可以使用以下代码将默认GPU更改为1:
j9per5c46#
我的脚本使用的是CPU还是GPU?
默认情况下,所有Tensor都在CPU上分配。
如果是CPU,我该怎么做才能让它在GPU上运行?我需要重写一切吗?
您可以使用set_default_device更改默认设备。
对于Nvidia GPU:
如果您有多个GPU,您可以选择一个特定的GPU:
对于CPU使用
'cpu'
您可以通过创建一个简单的Tensor并获取其设备类型来检查默认设备:如果选择第一个GPU,
torch.tensor([1.2, 3.4]).device
将返回device(type='cuda', index=0)
。你也可以用device Package 你的代码:
在这种情况下,默认值将仅针对 Package 的代码进行更改。
如果使用GPU,如果torch.cuda.is_available()== False,此脚本是否会崩溃?
torch.set_default_device
和torch.device
允许选择不存在的设备,但创建Tensor将失败并出现异常。