温馨提示×

PyTorch在Ubuntu上如何进行模型监控

小樊
34
2025-12-10 20:37:07
栏目: 智能运维

Ubuntu下的PyTorch模型监控实用方案

一 系统资源监控

  • GPU监控
    • 实时查看:使用nvidia-smi观察显存、利用率、温度等,例如每秒刷新:
      • 命令:watch -n 1 nvidia-smi
    • 持久化记录:将关键指标导出为CSV,便于事后分析:
      • 命令:nvidia-smi -l 2 --format=csv,noheader,nounits
        –query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.total,temperature.gpu \

        gpu_monitor_$(date +%Y%m%d_%H%M%S).log

  • CPU与内存
    • 交互式查看:安装并使用htop(sudo apt install htop),或直接使用top
    • 在训练脚本内监控进程:使用psutil获取当前进程的CPU与内存占用,便于与训练指标对齐记录。

二 训练指标可视化 TensorBoard

  • 安装与启动
    • 安装:pip install tensorboard torch.utils.tensorboard
    • 启动:tensorboard --logdir=runs(默认端口6006;如冲突可用 --port 指定端口)
  • 记录标量与图像
    • 示例:
      • from torch.utils.tensorboard import SummaryWriter
      • writer = SummaryWriter(‘runs/exp1’)
      • for step, (x, y) in enumerate(train_loader): loss = train_step(x, y) writer.add_scalar(‘Loss/train’, loss.item(), step) if step % 100 == 0: grid = make_grid(sample_images, nrow=4, normalize=True) writer.add_image(‘Samples’, grid, step)
      • writer.close()
  • 常用面板
    • Scalars(损失、准确率、学习率等趋势)
    • Images(样本、特征可视化)
    • Histograms(权重/梯度分布随时间变化)

三 训练框架与云端监控

  • 使用PyTorch Lightning简化训练与日志
    • 在LightningModule中记录:self.log(‘train_loss’, loss, on_step=True, on_epoch=True)
    • Trainer自动汇总并支持多实验对比与可视化。
  • 云端实验管理
    • Weights & Biases:云端存储、团队协作、超参搜索与自动报告。
    • MLflow:实验追踪、模型版本与部署管理,适合工程化落地。

四 进阶监控与排障

  • 在代码中嵌入GPU/显存与梯度监控
    • 显存与利用率:
      • 已分配显存:torch.cuda.memory_allocated()(单位字节,可换算为MB)
      • 缓存/保留显存:torch.cuda.memory_reserved()
      • GPU利用率:torch.cuda.utilization()(需较新版本)
    • 梯度异常检测:计算梯度范数,定位爆炸/消失
      • total_norm = sum(p.grad.data.norm(2).item()**2 for p in model.parameters())**0.5
  • 内存与性能分析
    • 内存快照:torch.cuda.memory_summary(device=None, abbreviated=False)
    • 性能瓶颈定位:使用torch.autograd.profiler定位算子/数据加载瓶颈。

五 快速上手与最佳实践

  • 一条命令实时看GPU:watch -n 1 nvidia-smi
  • 一条命令启动可视化:tensorboard --logdir=runs --port 6006
  • 建议的监控组合
    • 资源面:nvidia-smi/htop/psutil(GPU/CPU/内存)
    • 指标面:TensorBoard(标量/图像/Histogram)
    • 实验面:Lightning + W&B/MLflow(对比、复现、协作)
  • 实践要点
    • 统一step口径(如 global_step = epoch * len(dataloader) + batch)
    • 规范日志目录(如 runs/exp_name/),便于对比
    • 固化环境(requirements.txt/conda env)、代码版本(Git)与超参配置,保证可复现
    • 设置告警与定期报告(异常显存增长、训练停滞、精度退化等)

0