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

xxb*_*iao 10 python pytorch

在 pytorch 中,如果我没有写任何关于使用 CPU/GPU 的内容,并且我的机器支持 CUDA ( torch.cuda.is_available() == True):

  1. 我的脚本使用的是 CPU 还是 GPU?
  2. 如果是 CPU,我应该怎么做才能让它在 GPU 上运行?我需要重写所有内容吗?
  3. 如果是 GPU,这个脚本会崩溃torch.cuda.is_available() == False吗?
  4. 这对加快训练速度有帮助吗?
  5. 我知道将PyTorch 代码从 CPU 移植到 GPU,但这是旧的。这种情况会在 v0.4 或即将到来的 v1.0 中改变吗?

Ome*_*ick 7

PyTorch 默认使用 CPU,除非您使用.cuda()模型上的方法和torch.cuda.XTensorPyTorch 张量的变体。


uke*_*emi 6

1.我的脚本使用什么,CPU 还是 GPU?

“脚本”没有任何设备忠诚度。计算在哪里完成(CPU 或 GPU)取决于所操作的特定张量。因此,这取决于张量是如何创建的。

torch.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  <--
Run Code Online (Sandbox Code Playgroud)

2.如果是CPU,我该怎么做才能让它在GPU上运行?

您可以使用以下命令更改每个新创建的默认类型torch.tensor

# Approach 1
torch.set_default_tensor_type('torch.cuda.FloatTensor')
Run Code Online (Sandbox Code Playgroud)

或者您可以手动将每个张量复制到 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
Run Code Online (Sandbox Code Playgroud)

3.如果是GPU,这个脚本会崩溃吗torch.cuda.is_available() == False

是的,在方法 1 中,脚本会崩溃并出现以下错误:

# 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
Run Code Online (Sandbox Code Playgroud)

在方法 2 中,它将简单地默认为 CPU。


4.这对加快训练速度有什么作用吗?

那要看。对于最常见的 PyTorch 神经网络训练场景,通过迁移到 GPU 可以提高速度。


5.我知道将 PyTorch 代码从 CPU 移植到 GPU,但这已经很旧了。这种情况在 v0.4 或即将推出的 v1.0 中是否会有所改变?

有多种方法可以将代码从 CPU 移植到 GPU:

RuntimeError: No CUDA GPUs are available
Run Code Online (Sandbox Code Playgroud)

通常首选语法 2,它允许通过更改一个变量来在 CPU 和 GPU 之间进行切换。


Ria*_*Ria 5

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

dtype = torch.cuda.float if torch.cuda.is_available() else torch.float
torch.zeros(2, 2, dtype=dtype)
Run Code Online (Sandbox Code Playgroud)

更新pytorch 0.4:

device = torch.device("cuda" if use_cuda else "cpu")
model = MyRNN().to(device)
Run Code Online (Sandbox Code Playgroud)

来自PyTorch 0.4.0 迁移指南