张芷铭的个人博客

清空 GPU 显存优先级:释放缓存 > 终止进程 > 重启驱动。先定位占用进程,再精准处理。

查看显存占用

1
2
3
4
5
# 实时监控
watch -n 1 nvidia-smi

# 查看一次
nvidia-smi

输出中 PID 是进程 ID,Used GPU Memory 是显存占用量。

场景一:释放 PyTorch 缓存(安全)

Python 代码中释放

1
2
3
import torch
del large_tensor        # 删除无用张量
torch.cuda.empty_cache()  # 清空 CUDA 缓存

终止 Python 进程

1
2
kill -9 12345        # 终止指定 PID
pkill -9 python      # 批量终止所有 Python(谨慎)

场景二:终止占用进程

1
2
3
4
5
6
7
8
# 查找占用 GPU 的进程
nvidia-smi --query-compute-apps=pid,gpu_uuid,used_memory --format=csv

# 终止进程
kill -9 67890

# 批量终止所有 GPU 进程
nvidia-smi --query-compute-apps=pid --format=csv,noheader | xargs -r kill -9

场景三:重启 NVIDIA 驱动(终极方案)

⚠️ 会终止所有 GPU 程序

1
2
3
4
5
6
7
8
9
# 停止驱动
sudo systemctl stop nvidia-persistenced
sudo rmmod nvidia_uvm
sudo rmmod nvidia

# 重新加载
sudo modprobe nvidia
sudo modprobe nvidia_uvm
sudo systemctl start nvidia-persistenced

场景四:禁用持久化模式

1
2
sudo nvidia-smi -pm 0   # 禁用
sudo nvidia-smi -pm 1   # 启用

注意事项

  1. empty_cache() 仅释放未使用缓存,无法释放正在使用的显存
  2. kill -9 是强制终止,可能导致数据丢失,优先用 kill PID
  3. 重启驱动前确认无重要任务

Comments