GPU资源监控工具:通过nvidia-smi和torch.cuda查看实时性能

黑暗猎手 +0/-0 0 0 正常 2025-12-24T07:01:19

GPU资源监控工具:通过nvidia-smi和torch.cuda查看实时性能

在PyTorch深度学习模型优化过程中,GPU资源监控是不可或缺的一环。本文将分享一个踩坑实录:如何有效利用nvidia-smitorch.cuda来监控GPU使用情况,并结合实际代码验证其效果。

1. 基础命令行监控

首先,最常用的工具是nvidia-smi,可以实时查看显存、温度、利用率等信息。在终端中运行:

watch -n 1 nvidia-smi

此命令每秒刷新一次GPU状态,非常适合在训练过程中观察资源变化。

2. Python代码集成监控

为了自动化监控,我们编写了一个简单的脚本,结合torch.cudapsutil来获取实时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()来清理缓存。

📌 建议:将监控脚本集成到训练循环中,实现自动化的性能追踪和预警机制。

推广
广告位招租

讨论

0/2000
RichFish
RichFish · 2026-01-08T10:24:58
nvidia-smi确实好用,但watch命令在某些环境下可能不生效,建议加个-f参数强制刷新。
微笑向暖阳
微笑向暖阳 · 2026-01-08T10:24:58
torch.cuda.memory_allocated()容易误导人,最好配合memory_reserved一起看,才能准确判断是否真的溢出。
Diana73
Diana73 · 2026-01-08T10:24:58
实际项目中推荐把监控逻辑封装成装饰器,这样训练代码更干净,也方便复用。
George765
George765 · 2026-01-08T10:24:58
可以考虑集成到TensorBoard或Wandb里,可视化GPU使用趋势,便于调参时分析瓶颈