在 Debian 上使用 PyTorch 的可视化工具
一 环境准备
- 安装系统依赖(用于 Graphviz 渲染与可选 GPU 监控):
- sudo apt update && sudo apt install -y graphviz nvidia-driver nvidia-utils python3-pip
- 建议创建虚拟环境:
- python3 -m venv venv && source venv/bin/activate
- pip install --upgrade pip
- 验证 GPU 工具:
- nvidia-smi(应能看到 GPU 型号、显存、温度、功耗 等信息)
二 训练过程与指标可视化 TensorBoard
- 安装与启动:
- pip install tensorboard
- 训练脚本中写入日志:
- from torch.utils.tensorboard import SummaryWriter
- writer = SummaryWriter(log_dir=“runs/exp1”)
- writer.add_scalar(“Loss/train”, loss, epoch)
- writer.add_scalar(“Accuracy/val”, acc, epoch)
- writer.add_graph(model, dummy_input) # 可选:模型图
- writer.close()
- 启动服务:
- tensorboard --logdir=runs --host 0.0.0.0 --port 6006
- 远程访问与多实验对比:
- 在浏览器打开 http://<服务器IP>:6006
- 使用分层目录(如 runs/exp1、runs/exp2)便于对比;TensorBoard 支持 Scalars、Graphs、Histograms、Distributions、Images、Text、PR Curves、Embedding 等面板
三 模型结构与计算图可视化
- torchviz(基于 Graphviz,展示计算依赖与梯度流向):
- pip install torchviz
- 代码示例:
- from torchviz import make_dot
- dummy_input = torch.randn(1, 3, 224, 224)
- output = model(dummy_input)
- dot = make_dot(output, params=dict(model.named_parameters()))
- dot.render(“resnet18”, format=“png”) # 生成 PNG/PDF
- HiddenLayer(轻量快速,支持结构折叠):
- pip install hiddenlayer
- 代码示例:
- import hiddenlayer as hl
- hl.build_graph(model, dummy_input).save(“resnet18.png”)
- Netron(无需代码,查看 .pt/.pth 或 .onnx):
- 导出:torch.onnx.export(model, dummy_input, “resnet18.onnx”)
- 使用 Netron Web/桌面端 打开 .onnx 文件,交互式查看层级与形状
四 可解释性与特征可视化 Captum 与 Grad-CAM
- Captum(PyTorch 官方可解释性库,支持 Integrated Gradients、Saliency、LayerGradCam 等):
- pip install captum
- 示例(Integrated Gradients):
- from captum.attr import IntegratedGradients
- ig = IntegratedGradients(model)
- attr = ig.attribute(input_tensor, target=target_class)
- Grad-CAM(CNN 热力图,定位判别区域):
- pip install pytorch-grad-cam
- 参考官方示例为指定层注册钩子,生成热力图并与原图叠加显示
五 远程与系统资源监控
- GPU 监控:
- 实时查看:nvidia-smi -l 1(每秒刷新)
- 系统资源:
- CPU/内存:htop(sudo apt install -y htop)
- 综合资源:dstat -c -m -y -p --top-io --top-bio
- 训练进程内监控(psutil):
- pip install psutil
- 示例:
- import psutil, os
- p = psutil.Process(os.getpid())
- print(“CPU%:”, p.cpu_percent(interval=1.0))
- print(“MEM(MB):”, p.memory_info().rss / 1024 ** 2)
- 远程可视化访问建议:
- 服务器启动 TensorBoard/Visdom 时加 –host 0.0.0.0
- 云服务器需放行 6006/8097 端口(安全组/防火墙)
- 内网穿透或 SSH 端口转发也可用于本地浏览器访问