温馨提示×

linux pytorch为何掉卡

小樊
47
2026-10-16 04:23:29
栏目: 智能运维

在 Linux 环境下使用 PyTorch 时经常遇到“掉卡”(GPU 丢失 / CUDA device unavailable / 训练中断后找不到 GPU)的问题。下面从常见原因 → 排查方法 → 解决方案系统说明。


一、什么是“掉卡”

通常指:

  • nvidia-smi 还能看到卡,但 PyTorch 里 torch.cuda.is_available() 变 False
  • 训练中突然报错:CUDA error: device-side assert triggered / invalid device function
  • 进程被杀,GPU 显存未释放
  • 多卡训练时某张卡“消失”

二、常见原因与对应解决方案

1️⃣ 驱动 / CUDA 版本不匹配(最常见)

现象

  • 升级系统或内核后掉卡
  • nvidia-smi 正常,但 PyTorch 无法用 GPU

原因

  • 内核升级导致 NVIDIA 驱动失效
  • PyTorch CUDA 版本 ≠ 驱动支持版本

解决

nvidia-smi        # 看驱动支持的最高 CUDA
nvcc --version    # 看当前 CUDA
python -c "import torch; print(torch.version.cuda)"

✅ 建议:

  • 驱动用 持久化模式
sudo nvidia-smi -pm 1
  • 使用 conda / 官方 wheel 避免版本错乱

2️⃣ GPU 被系统或进程“抢走”

现象

  • 刚开始能跑,几小时后掉卡
  • nvidia-smi 显示别人占了你的卡

原因

  • 多用户服务器资源抢占
  • 后台任务(jupyter / 僵尸进程)

解决

nvidia-smi
fuser -v /dev/nvidia*

✅ 指定 GPU:

export CUDA_VISIBLE_DEVICES=0,1

3️⃣ 显存溢出(OOM)导致进程被 kill

现象

  • 训练中途直接退出
  • 无明显报错

原因

  • batch size 过大
  • 显存碎片

解决

torch.cuda.empty_cache()
  • 减小 batch size
  • 使用 梯度累积
  • 用 torch.utils.checkpoint

4️⃣ 内核 / 电源管理问题(服务器常见)

现象

  • 长时间空闲后掉卡
  • 重启后恢复

解决

sudo nvidia-smi -pm 1
sudo nvidia-smi -r   # 软重置 GPU

BIOS / 电源:

  • 关闭 PCIe 节能
  • 关闭 ASPM

5️⃣ Docker / 容器环境掉卡

现象

  • 宿主机正常,容器里掉卡

原因

  • 没加 --gpus all
  • 驱动未挂载

解决

docker run --gpus all --ipc=host ...

✅ 使用 nvidia-container-toolkit


6️⃣ 多卡训练(DDP)掉卡

现象

  • 某 rank 报错退出
  • 其他卡还在

原因

  • 一个进程崩,整体通信失败

解决

  • 设置超时
export NCCL_TIMEOUT=1800
  • 使用 torchrun

7️⃣ PyTorch bug / CUDA assert

现象

  • 特定操作后就掉卡
  • device-side assert triggered

解决

  • 先 CPU 调试
  • 升级 PyTorch
  • 避免越界 index

三、快速自查清单 ✅

nvidia-smi
nvcc --version
python -c "import torch; print(torch.cuda.is_available())"
echo $CUDA_VISIBLE_DEVICES

四、如果你愿意

你可以贴出:

  • 报错信息
  • nvidia-smi 截图
  • PyTorch / CUDA 版本
  • 是否 Docker / 多卡

我可以精确定位你这次掉卡的原因。

0 踩