我在使用 Pytorch 1.9.0+cu102 训练生成网络时遇到以下错误:
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
在使用 Google Colaboratory GPU 会话时,此段代码将在以下两行之一触发:
running_loss += loss.item()
或者
target = target.to(device)
当我第一次运行笔记本时,第一行就会出现错误,每次运行该代码块时,第二行都会出现错误。第一个错误发生在训练3个批次后。第二个错误发生在第一批次中。我可以确认设备为cuda0,该设备可用,并且target
是一个pytorch张量。自然地,我尝试按照错误的建议运行:
!CUDA_LAUNCH_BLOCKING=1
并且
os.system('CUDA_LAUNCH_BLOCKING=1')
然而,这两行代码都没有改变错误信息。根据另一个帖子的说法,这是因为 colab 在子shell中运行这些行。当在CPU上运行时,错误不会发生,而且我除了Colab上的GPU之外,没有访问GPU设备。虽然这个问题以许多不同形式被问过,但对我来说没有一个答案特别有帮助,因为它们要么建议传递上述行,要么涉及到与我的情况根本不同的情况(比如用不恰当的类别数量训练分类器),或者建议我已经尝试过的解决方案,比如重置运行时或切换到CPU。
我希望能够从以下问题中获得一些见解:
- 是否有办法让我获得更具体的错误消息?设置启动阻止变量的尝试都失败了。
- 为什么我在两个看似非常不同的行上都会出现这个错误?我的网络如何在训练3批次后(始终为3)失败第四批次?
- 这种情况是否使任何人想起他们以前遇到过的错误,并且可以从有限的信息中提取出可能的缓解措施?