CUDA 错误:在 Colab 上触发了设备端断言
Posted
技术标签:
【中文标题】CUDA 错误:在 Colab 上触发了设备端断言【英文标题】:CUDA error: device-side assert triggered on Colab 【发布时间】:2021-09-10 22:58:05 【问题描述】:我正在尝试在启用 GPU 的 Google Colab 上初始化一个张量。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
t = torch.tensor([1,2], device=device)
但是我收到了这个奇怪的错误。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
即使将该环境变量设置为 1,似乎也没有显示任何进一步的细节。 有人遇到过这个问题吗?
【问题讨论】:
你应该把你的笔记本恢复出厂设置然后试试。 【参考方案1】:虽然我尝试了您的代码,但它没有给我错误,但我可以说通常调试 CUDA 运行时错误的最佳做法:像您这样的设备端断言是将协作转换为 CPU 并重新创建错误。它会给你一个更有用的回溯错误。
大多数情况下,CUDA 运行时错误可能是某些索引不匹配的原因,因此就像您尝试在具有 15 个标签的数据集上训练具有 10 个输出节点的网络一样。而这个 CUDA 错误的问题是,一旦你得到这个错误,你会在每次使用 torch.tensors 的操作中收到它。这会强制您重新启动笔记本。
我建议你重新启动你的笔记本,通过转移到 CPU 来获得更准确的回溯,并检查你的其余代码,特别是如果你在某处训练一个模型集上的目标。
【讨论】:
形状不匹配。很遗憾,torch 没有告诉你错误 我收到这个错误,是什么问题?文件“/home/tf/.virtualenvs/torch/lib/python3.6/site-packages/torch/nn/functional.py”,第 2824 行,在 cross_entropy 中返回 torch._C._nn.cross_entropy_loss(input, target, weight , _Reduction.get_enum(reduction), ignore_index) RuntimeError: CUDA 错误:设备端断言触发的 CUDA 内核错误可能会在其他一些 API 调用中异步报告,因此下面的堆栈跟踪可能不正确。对于调试,请考虑传递 CUDA_LAUNCH_BLOCKING=1。【参考方案2】:正如其他受访者所说:在 CPU 上运行它会发现错误。我将 1,2 的目标标签更改为 0,1。这个过程为我解决了。
【讨论】:
【参考方案3】:第一次:
在使用 simpletransformers 库微调基于 Transformer 的模型以解决多类分类问题时遇到了同样的错误。 simpletransformers 是一个写在转换器库之上的库。
我将我的标签从字符串表示更改为数字,它起作用了。
第二次:
在使用 transformers
库训练另一个基于转换器的模型进行文本分类时再次遇到相同的错误。
我在数据集中有 4 个标签,分别命名为 0、1、2 和 3。但在模型类的最后一层(线性层)中,我有两个神经元。 nn.Linear(*, 2)*
必须用 nn.Linear(*, 4)
替换,因为我总共有四个标签。
【讨论】:
什么是“字符串表示”?你是说 one-hot 向量吗? 例如,我有一个带有“正面”和“负面”两个标签的情绪分析问题。在我的数据中,我将标签从“正”更改为 1,从“负”更改为 0。这就是我所说的“将标签从字符串表示形式更改为数字”的意思。以上是关于CUDA 错误:在 Colab 上触发了设备端断言的主要内容,如果未能解决你的问题,请参考以下文章
RuntimeError:CUDA 错误:触发了设备端断言 - BART 模型
RuntimeError:cuda 运行时错误(710):设备端断言触发于
不使用多处理但在使用 PyTorch DataLoader 时在 google colab 上出现 CUDA 错误