pytorch调试时CUDA报错,如何精确定位

由于pytorch的python语句执行和CUDA后端实际上是异步执行的,所以当CUDA runtime报错时,并不一定能正确地反映在python抛出的错误语句中,因此,可以添加一个环境变量来实现:

CUDA_LAUNCH_BLOCKING=1

这里再补充一些关于cuda和pytorch异步执行的知识,当你写了一句torch.mm(X, Y)时,实际上的操作仅仅是将乘法操作加入计算列表中就返回了,CUDA此时可能还在计算上一条,这时python可以进行下一步工作,直到要读取结果时,才会阻塞等待计算结束。所以当CUDA报错时,可能python在执行别的语句,就会抛出错误的堆栈。

posted @ 2024-05-15 20:15  王冰冰  阅读(52)  评论(3编辑  收藏  举报