GPU资源监控工具:通过nvidia-smi和torch.cuda查看实时性能
在PyTorch深度学习模型优化过程中,GPU资源监控是不可或缺的一环。本文将分享一个踩坑实录:如何有效利用nvidia-smi和torch.cuda来监控GPU使用情况,并结合实际代码验证其效果。
1. 基础命令行监控
首先,最常用的工具是nvidia-smi,可以实时查看显存、温度、利用率等信息。在终端中运行:
watch -n 1 nvidia-smi
此命令每秒刷新一次GPU状态,非常适合在训练过程中观察资源变化。
2. Python代码集成监控
为了自动化监控,我们编写了一个简单的脚本,结合torch.cuda和psutil来获取实时GPU信息:
import torch
import psutil
import time
# 获取GPU信息
print(f'GPU数量: {torch.cuda.device_count()}')
print(f'当前设备: {torch.cuda.current_device()}')
print(f'GPU名称: {torch.cuda.get_device_name(0)}')
# 显存使用情况
if torch.cuda.is_available():
gpu_memory = torch.cuda.memory_allocated(0) / (1024**3)
print(f'已分配显存: {gpu_memory:.2f} GB')
# 获取系统内存
mem = psutil.virtual_memory()
print(f'系统内存使用率: {mem.percent}%')
3. 实际测试数据
在训练一个ResNet50模型时,我们观察到:
- 初始显存占用:约2.1GB
- 训练过程中峰值:约5.8GB
- 每次batch处理耗时:约0.08s
通过nvidia-smi和代码监控结合,我们成功识别了内存瓶颈,并及时调整了batch size。
4. 踩坑总结
⚠️ 注意:使用torch.cuda.memory_allocated()可能不会立即释放显存,需要配合torch.cuda.empty_cache()来清理缓存。
📌 建议:将监控脚本集成到训练循环中,实现自动化的性能追踪和预警机制。

讨论