GUQT1582 2024-05-29 21:38 采纳率: 0%
浏览 23

pytorch训练一段时间(1-100个epoch之间)后报错?

pytorch训练一段时间(1-100个epoch之间)后报错

4090+11.8, torch2.1

训练一段时间后出现各种不同的错误,包括但不限于

RuntimeError: DataLoader worker (pid(s) 9773) exited unexpectedly

RuntimeError: CUDA error: CUBLAS_STATUS_NOT_SUPPORTED when calling cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)

RuntimeError: d.is_cuda() INTERNAL ASSERT FAILED at "../c10/cuda/impl/CUDAGuardImpl.h":31, please report a bug to PyTorch.

重装了不同的系统都会出现该问题,直接使用别人docker里面的环境也会出现问题,只有在Windows下的WSL环境不出现问题,在该环境下,两张卡一起训练依旧有一张会过一段时间卡住。不一定是哪一张 谁能帮助我一下。谢谢各位义父!

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-29 21:38
    关注

    引自免费微信小程序:皆我百晓生

    首先,你需要了解这些错误的原因,然后针对具体的问题进行排查和解决。下面我会分步骤为你提供可能的解决方案。

    第一步:检查GPU兼容性

    确保你的PyTorch版本、CUDA版本和cuDNN版本是兼容的。例如,如果你使用的是PyTorch 2.1,那么你需要一个与之兼容的CUDA版本,比如CUDA 10.1。你可以在这里查看官方兼容性表

    第二步:更新依赖库

    确保所有相关的库都是最新版的,特别是PyTorch、CUDA、cuDNN和torchvision。你可以使用pip安装最新版的库,或者从源码编译安装。这里是一个例子,如何使用pip安装:

    pip install --upgrade torch torchvision
    

    第三步:检查数据加载器

    RuntimeError: DataLoader worker (pid(s) 9773) exited unexpectedly这个错误通常是因为数据加载器中的某个工作线程崩溃了。这可能是由于数据预处理过程中出现了错误,或者是内存不足。尝试调整num_workers参数,减少数据加载器的工作线程数量,看是否可以解决问题。

    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=your_batch_size, shuffle=True, num_workers=2)
    

    第四步:检查显卡资源

    RuntimeError: CUDA error: CUBLAS_STATUS_NOT_SUPPORTED表示使用的CUBLAS函数不被当前设备支持。这可能是因为你尝试在一个只支持单精度运算的GPU上执行双精度运算。确保你的模型和计算都是在适当的精度(float32或float64)上运行。

    第五步:内存管理

    在多卡训练时,确保你的模型、数据和优化器都在同一张GPU上分配内存。使用.to(device)将它们移动到正确的设备上。另外,检查是否有显存泄漏,这可能导致内存耗尽。在每次迭代结束后,释放不必要的临时变量。

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model.to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001).to(device)
    
    for epoch in range(num_epochs):
        for inputs, labels in train_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = F.cross_entropy(outputs, labels)
            loss.backward()
            optimizer.step()
            # 清理缓存
            del inputs, labels, outputs, loss
    

    第六步:日志和调试

    开启PyTorch的调试模式,这可能会提供更多的错误信息,帮助你定位问题:

    import os
    os.environ["CUDA_LAUNCH_BLOCKING"] = "1"
    

    第七步:检查代码

    确保你的代码没有潜在的无限循环或其他逻辑错误。如果有多个进程或线程,确保它们之间的同步正确无误。

    第八步:WSL环境

    WSL(Windows Subsystem for Linux)可能会有性能上的限制。尽管它可以在Windows上运行Linux应用程序,但某些特性可能不如原生Linux环境稳定。建议你在纯Linux环境中测试,看看是否还会遇到同样的问题。

    第九步:硬件问题

    最后,考虑检查硬件连接,确保所有的GPU都正常工作,没有物理损坏或者其他硬件故障。

    如果以上步骤都不能解决问题,我建议你创建一个最小可复现问题的代码示例,并附带详细的环境描述,这样其他人可以在GitHub上创建一个issue,或者在Stack Overflow等社区寻求更专业的帮助。同时,也可以尝试在PyTorch的官方论坛上发帖,那里有很多活跃的开发者和用户,他们可能能帮你找到更具体的解决方案。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示