使用 Kubeflow Tensorboards

TensorFlow 的可视化工具 TensorBoard 是一个强大的监控面板,用于可视化机器学习实验。它允许您跟踪如损失和准确率等指标,展示模型图,查看权重和偏置的直方图,以及更多功能。

Kubeflow 提供了一种原生方式,可以直接在您的 Kubernetes 集群内启动 TensorBoard 实例,并将其指向存储在 Persistent Volume Claims (PVC) 或对象存储(S3、MinIO)上的现有日志。

前提条件

在创建 TensorBoard 实例之前,请确保您的训练作业正在将日志写入集群可访问的位置。

  • PVC:如果您的训练作业将日志写入 Persistent Volume,请记录 PVC 名称及其内部路径。
  • 对象存储:如果您的训练作业将日志写入 S3/MinIO,请确保您拥有必要的凭据(通常通过 PodDefaults 配置)和桶的 URI(例如,s3://my-bucket/logs/experiment-1)。

使用 PyTorch 生成日志

为了可视化训练指标,您的 PyTorch 代码必须将事件写入日志目录。SummaryWriter 类是用于记录数据以供 TensorBoard 使用的主要入口。

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets, transforms

# Writer 默认输出到 ./runs/ 目录
writer = SummaryWriter()

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST('mnist_train', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
model = torchvision.models.resnet50(False)
# 使 ResNet 模型接受灰度图而非 RGB
model.conv1 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
images, labels = next(iter(trainloader))

grid = torchvision.utils.make_grid(images)
writer.add_image('images', grid, 0)
writer.add_graph(model, images)
writer.close()

创建 TensorBoard 实例

  1. 访问 Kubeflow 监控面板
    进入 Kubeflow 中央监控面板的 TensorBoards 部分。

  2. 新建 TensorBoard
    点击 New TensorBoard 按钮。

  3. 配置实例

    • 名称:输入 TensorBoard 实例的唯一名称(例如 experiment-1-viz)。
    • PVC 来源
      • 如果日志存储在 PVC 上,勾选此项。
      • PVC 名称:从下拉菜单选择 PVC。
      • 挂载路径:指定日志在 PVC 内的路径(例如 /logs/run1)。
    • 对象存储来源
      • 如果日志存储在云存储中,勾选此项。
      • 对象存储链接:填写日志目录的完整 URI(例如 s3://my-bucket/my-model/logs/)。
      • 配置:如果桶需要凭据,选择相应的配置(PodDefault)。
  4. 创建
    点击 Create。TensorBoard 实例将作为 Pod 在您的命名空间中创建。

访问监控面板

当您的 TensorBoard 实例状态变为 Running 时:

  1. 点击实例名称旁的 Connect
  2. TensorBoard UI 将在新标签页打开。
  3. 您现在可以浏览训练运行生成的标量、图表、分布等可视化内容。

使用场景

可视化训练指标

使用 Scalars 标签页查看准确率、损失和学习率随时间变化的曲线,有助于诊断模型是否过拟合或学习率是否需要调整。

比较多次运行

如果您将 TensorBoard 指向包含多个运行子目录的父目录(例如 run1run2),TensorBoard 会自动叠加这些运行的指标,方便您比较不同超参数下的性能。

调试模型架构

使用 Graphs 标签页可视化模型的计算图,确保模型按预期构建,并帮助识别结构性问题。

清理

TensorBoard 实例会消耗集群资源(CPU/内存)。分析完实验后:

  1. 返回 TensorBoards 列表。
  2. 点击实例旁的 Delete(垃圾桶图标)按钮。
  3. 确认删除。此操作会移除可视化服务器,但不会删除存储在 PVC 或对象存储上的训练日志或模型。