You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

禁用CUDA后PyTorch仍调用GPU 如何强制其仅使用CPU运行

强制PyTorch仅使用CPU运行的方法

首先澄清一个认知偏差:你测试代码里a.add_(1)后变量b同步更新的现象和CUDA无关,这是PyTorch张量浅拷贝+原地操作的正常表现,纯CPU环境下运行也会出现完全相同的结果。
你之前执行set CUDA_VISIBLE_DEVICES ''后仍检测到CUDA可用,核心原因是Windows Cmd下将环境变量设为空字符串不会屏蔽CUDA设备,且环境变量配置必须在导入torch前完成才会生效。

以下是经过验证的可行方案:

1. 代码层面全局禁用(最稳定,不受运行环境影响)

在文件最开头导入torch后,立刻执行以下配置,强制屏蔽CUDA检测:

import torch
torch.cuda.is_available = lambda: False
cpu_device = torch.device("cpu")

后续所有创建张量、加载模型的操作,都显式指定device=cpu_device即可完全在CPU上运行。

2. 正确配置环境变量(启动Python前设置)

注意不同终端的配置语法存在差异,必须在启动Python进程、导入torch之前执行对应命令:

  • Windows Cmd终端:
    set CUDA_VISIBLE_DEVICES=-1
    
  • Windows PowerShell终端:
    $env:CUDA_VISIBLE_DEVICES="-1"
    
  • Linux/macOS终端:
    export CUDA_VISIBLE_DEVICES=-1
    

配置完成后启动Python,执行torch.cuda.is_available()会返回False,此时PyTorch不会调用GPU资源。

3. 设置全局默认张量类型

如果不想在每处代码都手动指定设备,可以在导入torch后设置全局默认浮点张量为CPU类型:

import torch
torch.set_default_tensor_type(torch.FloatTensor)

*注意:该配置仅对浮点类型张量生效,其他数据类型的张量建议配合显式指定device的方式使用。


关于你测试代码里的同步更新问题补充说明:

写b = a时并没有复制张量,只是给同一个内存中的张量对象加了一个新的变量引用。所有带_后缀的PyTorch方法都是原地操作,会直接修改张量本身的内存值,因此所有指向该张量的变量都会同步变化。如果需要得到独立不联动的新张量,要写成b = a.clone()。

内容的提问来源于stack exchange,提问作者Salih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:12:29