模型训练监控:TensorBoard与Weights Biases (WB) 使用详解
文章目录
- 一、核心工具对比
- 二、TensorBoard 全流程实战
- 2.1 安装与基础配置
- 2.2 在PyTorch中的集成
- 2.3 启动可视化服务
- 2.4 高级功能
- 三、Weights & Biases 深度集成
- 3.1 安装与初始化
- 3.2 基础监控实现
- 3.3 控制台与云端看板
- 四、高级功能
- 五、机器翻译完整监控
在机器翻译等复杂模型训练过程中,实时监控训练动态、分析指标变化、记录超参数和实验配置至关重要。TensorBoard和Weights & Biases (W&B) 是当前最主流的训练监控工具。
一、核心工具对比
功能 | TensorBoard | Weights & Biases |
---|---|---|
开发方 | OpenAI生态支持 | |
部署方式 | 本地/服务器 | 云端+本地 |
实时性 | 需手动刷新 | 实时同步 |
超参数记录 | 支持 | 强支持(自动对比) |
协作功能 | 弱 | 多用户项目管理 |
可视化定制 | 中等 | 高度灵活 |
资源监控 | 需插件 | 内置CPU/GPU监控 |
模型版本管理 | 无 | 集成Artifacts |
二、TensorBoard 全流程实战
2.1 安装与基础配置
pip install tensorboard
2.2 在PyTorch中的集成
from torch.utils.tensorboard import SummaryWriter
import torch# 初始化写入器(日志目录为./runs)
writer = SummaryWriter()# 训练循环示例
for epoch in range(100):loss = torch.randn(1).item() * 0.1 + 1/(epoch+1) # 模拟损失acc = 1 - loss # 模拟准确率# 记录标量数据writer.add_scalar('Loss/train', loss, epoch)writer.add_scalar('Accuracy/train', acc, epoch)# 记录直方图writer.add_histogram('param/grad', torch.randn(100), epoch)writer.close() # 关闭写入器
2.3 启动可视化服务
tensorboard --logdir=./runs --port=6006
访问 http://localhost:6006
可查看:
- Scalars:损失/准确率曲线
- Graphs:模型计算图
- Distributions:参数分布变化
2.4 高级功能
1、超参数记录
from torch.utils.tensorboard.plugins.hparams import api as hp# 定义超参数空间
HP_LR = hp.HParam('learning_rate', hp.Discrete([0.001, 0.0005]))
HP_BS = hp.HParam('batch_size', hp.Discrete([32, 64]))# 记录实验配置
with tf.summary.create_file_writer('logs/hparam_tuning').as_default():hp.hparams_config(hparams=[HP_LR, HP_BS], metrics=[hp.Metric('val_accuracy')])
2、嵌入可视化
# 记录词向量(适用于NLP模型)
writer.add_embedding(torch.randn(100, 256), metadata=vocab)
三、Weights & Biases 深度集成
3.1 安装与初始化
pip install wandb
wandb login # 登录账户(需API Key)
3.2 基础监控实现
import wandb# 初始化项目
wandb.init(project="machine-translation", config={"learning_rate": 0.001,"architecture": "Transformer","dataset": "WMT2020"})# 模拟训练循环
for epoch in range(100):loss = 1/(epoch+1) + 0.1 * torch.randn(1).item()acc = 0.9 - loss/10# 记录指标wandb.log({"epoch": epoch,"loss": loss,"accuracy": acc,"lr": 0.001 * (0.99 ** epoch)})# 记录模型参数if epoch % 10 == 0:torch.save(model.state_dict(), f"model_{epoch}.pt")wandb.save(f"model_{epoch}.pt")wandb.finish() # 结束记录
3.3 控制台与云端看板
执行脚本后自动生成云端看板:
- 系统资源:实时GPU显存、CPU利用率
- 自定义图表:拖拽式构建对比视图
- 超参数对比:平行坐标轴可视化
!https://wandb.ai/_images/reference/parallel.gif
四、高级功能
1、超参数扫描
sweep_config = {'method': 'bayes','parameters': {'lr': {'min': 1e-5, 'max': 1e-3},'batch_size': {'values': [32, 64, 128]}}
}sweep_id = wandb.sweep(sweep_config, project="mt-sweeps")
wandb.agent(sweep_id, train_function) # 自动运行超参数搜索
2、数据集与模型版本管理
# 记录数据集
artifact = wandb.Artifact('wmt2020', type='dataset')
artifact.add_dir('data/processed/')
wandb.log_artifact(artifact)# 记录模型
model_artifact = wandb.Artifact('transformer-en-zh', type='model')
model_artifact.add_file('model_final.pt')
wandb.log_artifact(model_artifact)
3、报告生成
# 在Notebook中直接插入可视化
wandb.log({"examples": [wandb.Image("sample.png")]})
五、机器翻译完整监控
# 结合TensorBoard和W&B的混合方案
def train():# 初始化wandb.init()tb_writer = SummaryWriter()for epoch in range(epochs):# 训练步骤...loss = model.train_step()# 双平台记录wandb.log({"loss": loss})tb_writer.add_scalar('Loss/train', loss, epoch)# 验证集评估if epoch % 5 == 0:bleu = evaluate()wandb.log({"bleu": bleu})tb_writer.add_scalar('Metrics/bleu', bleu, epoch)# 保存最终模型wandb.save("model_final.pt")tb_writer.add_graph(model)
总结
- TensorBoard:轻量级本地解决方案,适合基础监控和模型调试
- Weights & Biases:全功能云端平台,支持从实验跟踪到团队协作的全生命周期管理
- 混合使用:在关键实验中可同时集成两者,利用TensorBoard的细粒度分析和W&B的协作优势
对于长期项目,建议将W&B作为主平台,配合TensorBoard进行深度调试,最终实现高效可复现的模型训练流程。