如何告诉 PyTorch 不使用 GPU?

ane*_*eal 37 pytorch

我想在 CPU 和 GPU 之间进行一些时序比较以及一些分析,并想知道是否有办法告诉不使用 GPU 而只使用 CPU?我意识到我可以安装另一个仅限 CPU 的,但希望有更简单的方法。

blu*_*nox 34

我只想补充一点,在 PyTorch 代码中也可以这样做:

这是取自0.4.0PyTorch 迁移指南的一个小例子:

# at beginning of the script
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

...

# then whenever you get a new Tensor or Module
# this won't copy if they are already on the desired device
input = data.to(device)
model = MyModule(...).to(device)
Run Code Online (Sandbox Code Playgroud)

我认为这个例子是不言自明的。但是如果有任何问题就问吧!
一个很大的优势是,当使用上面示例中的这种语法时,您可以创建在没有 GPU 可用的情况下在 CPU 上运行的代码,但也可以在 GPU 上运行而无需更改任何一行。

除了使用if 语句torch.cuda.is_available()您还可以像这样将设备设置为CPU

device = torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用以下标志在所需设备上创建张量device

mytensor = torch.rand(5, 5, device=device)
Run Code Online (Sandbox Code Playgroud)

这将直接在device您之前指定的上创建一个张量。

我想指出的是,您可以 使用这种语法在CPUGPU之间切换,也可以在不同的GPU之间切换。

我希望这是有帮助的!


Uma*_*pta 32

您可以CUDA_VISIBLE_DEVICES在运行火炬代码之前通过 shell将变量设置为空。

export CUDA_VISIBLE_DEVICES=""

应该告诉 torch 没有 GPU。

export CUDA_VISIBLE_DEVICES="0" 会告诉它只使用一个 GPU(id 为 0 的那个)等等。

  • 您可以将 `.cuda()` 替换为 `.cpu()` 以确保您的代码使用 CPU。这很麻烦,但我认为这是最简单的方法。对于未来,在顶部声明“device”并使用“.to”将模型/张量移动到设备。有关如何做到这一点...请参阅 MBT 的答案或此链接 /sf/answers/3733286161/ (5认同)
  • 这似乎仍然给我一个错误“UserWarning:CUDA初始化:在您的系统上找不到NVIDIA驱动程序”。 (3认同)

uke*_*emi 11

有多种方法可以强制使用 CPU:

  1. 设置默认张量类型:

    torch.set_default_tensor_type(torch.FloatTensor)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建张量时设置设备并一致引用:(
    通过此您可以轻松在 GPU 和 CPU 之间切换)

    device = 'cpu'
    # ...
    x = torch.rand(2, 10, device=device)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从视图中隐藏 GPU:

    import os
    
    os.environ["CUDA_VISIBLE_DEVICES"]=""
    
    Run Code Online (Sandbox Code Playgroud)


Daa*_*ens 8

一般的

正如之前的答案所示,您可以使用以下命令使 pytorch 在 cpu 上运行:

device = torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)

比较经过训练的模型

我想添加如何在 CPU 上加载之前训练过的模型(示例取自pytorch 文档)。

注意:确保输入模型的所有数据也都在CPU上。

推荐装载量

model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location=torch.device("cpu")))
Run Code Online (Sandbox Code Playgroud)

加载整个模型

model = torch.load(PATH, map_location=torch.device("cpu"))
Run Code Online (Sandbox Code Playgroud)


小智 7

使用python最简单的方法是:

  os.environ["CUDA_VISIBLE_DEVICES"]=""
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的。我有一个 GPU 并且仍在使用中。 (2认同)