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

调用torch.cuda.synchronize()时出现isinstance()类型错误的求助

解决PyTorch中torch.cuda.synchronize()抛出TypeError的问题

你的错误根源出在device变量的赋值方式上,代码里这两行把PyTorch的torch.device类直接覆盖成字符串了:

device=torch.device=("cuda")
# 以及
device=torch.device=("cpu")

这种写法会把原本的torch.device类替换成字符串"cuda"或"cpu",当后续调用torch.cuda.synchronize()时,PyTorch内部代码尝试用isinstance(device, torch.device)做类型检查,但此时torch.device已经是字符串而非类,直接触发TypeError。

修正后的代码

把device的赋值改成正确创建torch.device实例的方式,同时修正GPU计时逻辑(GPU计算是异步的,需要在计时前后同步才能得到准确耗时):

import torch
import time

torch.cuda.empty_cache()
if torch.cuda.is_available():
    device = torch.device("cuda")  # 正确创建device实例,不覆盖torch.device类
else:
    device = torch.device("cpu")

print("using", device)

matrix_size = 32 * 256
x = torch.randn(matrix_size, matrix_size)
y = torch.randn(matrix_size, matrix_size)

print("*******************CPU SPEED*********************")
start = time.time()
result = torch.matmul(x, y)
print(f"耗时: {time.time() - start:.4f}秒")
print("verify device", result.device)

x_gpu = x.to(device)
y_gpu = y.to(device)

for i in range(3):
    print("*******************GPU SPEED*********************")
    torch.cuda.synchronize()  # 计时前同步,确保之前的GPU任务完成
    start = time.time()
    result_gpu = torch.matmul(x_gpu, y_gpu)
    torch.cuda.synchronize()  # 计时后同步,等待当前GPU计算完成
    print(f"耗时: {time.time() - start:.4f}秒")
    print("verify device", result_gpu.device)

关键说明

  1. 正确创建device实例:用torch.device("cuda")而不是覆盖torch.device类,保证PyTorch内部的类型检查能正常工作。
  2. GPU计时的同步逻辑:GPU操作是异步执行的,计时开始前调用torch.cuda.synchronize()清空GPU任务队列,计时结束后再次调用等待计算完成,这样得到的耗时才准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:13