python 如果我没有指定使用CPU/GPU,我的脚本使用哪一个?

aelbi1ox  于 2023-06-04  发布在  Python
关注(0)|答案(6)|浏览(424)

在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中会改变吗?

oyjwcjzk

oyjwcjzk1#

我的方法是这样的(pytorch 0.4以下):

dtype = torch.cuda.float if torch.cuda.is_available() else torch.float
torch.zeros(2, 2, dtype=dtype)

***更新***pytorch 0.4:

device = torch.device("cuda" if use_cuda else "cpu")
model = MyRNN().to(device)

PyTorch 0.4.0 Migration Guide

vtwuwzda

vtwuwzda2#

PyTorch默认为CPU,除非您在模型上使用.cuda()方法和PyTorchTensor的torch.cuda.XTensor变体。

vaqhlq81

vaqhlq813#

1.我的脚本使用的是CPU还是GPU?
“脚本”没有任何设备一致性。在哪里进行计算(CPU或GPU)取决于正在操作的特定Tensor。这取决于Tensor是如何创建的。
然而,torch.tensor函数创建Tensor的默认位置 * 设置为'cpu'

torch.FloatTensor()         # CPU tensor
torch.cuda.FloatTensor()    # GPU tensor

torch.tensor(device='cpu')  # CPU tensor
torch.tensor(device='cuda') # GPU tensor

torch.tensor([1,2])         # CPU tensor  <--

2.如果是CPU,我应该怎么做才能让它在GPU上运行?
您可以使用以下命令change the default type每个新创建的torch.tensor

# Approach 1
torch.set_default_tensor_type('torch.cuda.FloatTensor')

或者您可以手动将每个Tensor复制到GPU:

# Approach 2
device = "cuda" if torch.cuda.is_availble() else "cpu"

my_tensor = my_tensor.to(device)
my_model.to(device) # Operates in place for model parameters

3.如果是GPU,如果是torch.cuda.is_available() == False,该脚本会崩溃吗?
是的,在方法1中,脚本将崩溃并出现以下错误:

RuntimeError: No CUDA GPUs are available

在方法2中,它将简单地默认为CPU。
4.*******************
That depends.对于大多数常见的PyTorch神经网络训练场景,是的,速度将通过迁移到GPU来提高。
5.我知道将PyTorch代码从CPU移植到GPU,但这是旧的。这种情况在v0.4或即将到来的v1.0中会改变吗?
有多种方法可以将代码从CPU移植到GPU:

# Syntax 1
my_tensor = my_tensor.cuda()

# Syntax 2
device = 'cuda' if torch.cuda.is_available() else 'cpu'
my_tensor = my_tensor.to(device)

语法2通常用于允许通过改变一个变量在CPU和GPU之间切换。

nzk0hqpo

nzk0hqpo4#

如果torch.cuda.is_available == True存在以下情况,您应该编写代码以使其使用GPU处理:

if torch.cuda.is_available():
    model.cuda()
else:
    # Do Nothing. Run as CPU.
kgqe7b3p

kgqe7b3p5#

它将使用默认值。在制作模型之前,可以使用以下代码将默认GPU更改为1:

import torch as th
th.cuda.set_device(1)
j9per5c4

j9per5c46#

我的脚本使用的是CPU还是GPU?
默认情况下,所有Tensor都在CPU上分配。
如果是CPU,我该怎么做才能让它在GPU上运行?我需要重写一切吗?
您可以使用set_default_device更改默认设备。
对于Nvidia GPU:

torch.set_default_device('cuda')

如果您有多个GPU,您可以选择一个特定的GPU:

torch.set_default_device('cuda:1')

对于CPU使用'cpu'

torch.set_default_device('cpu')

您可以通过创建一个简单的Tensor并获取其设备类型来检查默认设备:如果选择第一个GPU,torch.tensor([1.2, 3.4]).device将返回device(type='cuda', index=0)
你也可以用device Package 你的代码:

with torch.device('cuda:0'):
    t = torch.tensor([1.2, 3.4])

在这种情况下,默认值将仅针对 Package 的代码进行更改。
如果使用GPU,如果torch.cuda.is_available()== False,此脚本是否会崩溃?
torch.set_default_devicetorch.device允许选择不存在的设备,但创建Tensor将失败并出现异常。

相关问题