如何将所有Tensor设置到CUDA设备?手动转换繁琐且代码未生效
PyTorch设置默认Tensor类型仍在CPU的问题解决
项目需在GPU上执行计算,但手动为每个Tensor调用to(device)操作过于繁琐。尝试以下代码后,发现Tensor仍停留在CPU中:
if torch.cuda.is_available(): torch.set_default_tensor_type(torch.cuda.FloatTensor)
问题原因
torch.set_default_tensor_type(torch.cuda.FloatTensor)仅对浮点型Tensor生效:
- 若创建的是整数、布尔等非浮点类型的Tensor,不会自动转到GPU;
- 部分PyTorch内置函数或第三方库生成Tensor时,可能强制指定CPU设备,不受该全局设置影响。
可行解决方法
统一设备管理(推荐)
定义全局设备变量,统一迁移模型和数据,避免逐个处理Tensor:device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 模型迁移至目标设备 model.to(device) # 数据批量迁移(以DataLoader迭代为例) for inputs, labels in dataloader: inputs, labels = inputs.to(device), labels.to(device)全局默认设备设置(PyTorch 1.10+)
直接设置全局默认设备,所有新创建的Tensor(无论类型)都会默认在GPU上:import torch if torch.cuda.is_available(): torch.set_default_device("cuda")上下文管理器临时指定
用上下文管理器限定GPU设备的生效范围,适合局部代码块:with torch.cuda.device(0): # 此代码块内创建的Tensor默认在GPU 0上 x = torch.tensor([1, 2, 3]) y = torch.randn(3, 3)
内容的提问来源于stack exchange,提问作者nikiniki
相关产品推荐
相关产品推荐

