“进程已结束,退出代码为 -1073741819 (0xC0000005)”的一种可能原因

最近炼丹时候碰到的错误,使用Pycharm运行代码跑一会就会直接中断,并报:


如图所示,没有任何报错信息直接结束。而且还有以下特征:

  1. 运行的训练代码可以跑一两个epoch,并在训练途中中断;
  2. 通过print大法发现报错好像在loss.backward()语句;
  3. 以前可以运行,现在不行了
  4. 在Linux系统的服务器上可以运行
  5. 我使用的cpu运行代码,理论上应该不是gpu和cuda的问题?
  6. 通过一段代码检测每个batch时的内存使用情况,发现在中断前的几个batch会发生一次卡顿,随后占用的内存突然上升,如图所示:
  7. 使用命令行运行代码一样出错,所以不是Pycharm的锅

最后通过注释代码,发现是因为我环境变量设置错误。把os.environ['CUDA_VISIBLE_DEVICES'] = '1'改为os.environ['CUDA_VISIBLE_DEVICES'] = '0'或者删掉就好了。

原因在于我电脑上只有一块显卡,服务器上有好几块,所以服务器上不会报错。

好吧,因为第5条的原因所以我一直注意到这个……

顺便记录一下检测内存使用情况的代码

def print_memory_usage():
    process = psutil.Process(os.getpid())
    mem = process.memory_info().rss / 1024 / 1024  # MB
    print(f"[MEMORY] RAM used: {mem:.2f} MB")
posted @ 2025-04-30 14:50  ArnoYi  阅读(2199)  评论(0)    收藏  举报