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

如何将所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:10:28