清空 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 # 启用
|
注意事项
empty_cache() 仅释放未使用缓存,无法释放正在使用的显存kill -9 是强制终止,可能导致数据丢失,优先用 kill PID- 重启驱动前确认无重要任务
Comments