在 pytorch 中,如果我没有写任何关于使用 CPU/GPU 的内容,并且我的机器支持 CUDA ( torch.cuda.is_available() == True):
torch.cuda.is_available() == False吗?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 之间进行切换。
我的方式是这样的(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)
| 归档时间: |
|
| 查看次数: |
10543 次 |
| 最近记录: |