调用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)
关键说明
- 正确创建device实例:用
torch.device("cuda")而不是覆盖torch.device类,保证PyTorch内部的类型检查能正常工作。 - GPU计时的同步逻辑:GPU操作是异步执行的,计时开始前调用
torch.cuda.synchronize()清空GPU任务队列,计时结束后再次调用等待计算完成,这样得到的耗时才准确。
内容的提问来源于stack exchange,提问作者Said
相关产品推荐
相关产品推荐

