使用 Kubeflow TensorBoard

TensorFlow 的可视化工具 TensorBoard 是一个功能强大的监控面板,用于可视化机器学习实验。它可以让你跟踪 loss 和 accuracy 等指标,查看 model graph,观察 weights 和 biases 的直方图,以及更多内容。

Kubeflow 提供了一种原生方式,可以直接在你的 Kubernetes 集群中创建 TensorBoard 实例,并将其指向存储在 Persistent Volume Claims (PVCs) 或 Object Storage 中的现有日志。

前提条件

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

  • PVC:如果你的训练任务将日志写入 Persistent Volume,请记下 PVC 名称以及其中的路径。
  • Object Storage:如果你的训练任务将日志写入 Object Storage,请确保你拥有必要的凭据(通常通过 PodDefaults 配置)以及 bucket 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. 配置实例

    • Name:为你的 TensorBoard 实例输入一个唯一名称(例如,experiment-1-viz)。
    • PVC Source
      • 如果日志位于 PVC 中,请勾选此项。
      • PVC Name:从下拉列表中选择 PVC。
      • Mount Path:指定日志存储在 PVC 内的路径(例如,/logs/run1)。
    • Object Storage Source
      • 如果日志位于云存储中,请勾选此项。
      • Object Store Link:提供日志目录的完整 URI(例如,s3://my-bucket/my-model/logs/)。
      • Configuration:如果你的 bucket 需要凭据,请选择一个配置(PodDefault)。
  4. 创建: 单击 Create。TensorBoard 实例将作为你命名空间中的一个 Pod 创建。

访问监控面板

当 TensorBoard 实例的状态变为 Running 后:

  1. 单击实例名称旁边的 Connect
  2. TensorBoard UI 将在新标签页中打开。
  3. 现在你可以浏览训练运行生成的 scalars、graphs、distributions 和其他可视化内容。

使用场景

可视化训练指标

使用 Scalars 选项卡查看 accuracy、loss 和 learning rate 随时间变化的曲线。这有助于诊断模型是否发生 overfitting,或者 learning rate 是否需要调整。

比较运行结果

如果你将 TensorBoard 指向一个包含多个运行子目录的父目录(例如,run1run2),TensorBoard 会自动叠加这些运行的指标,使你能够比较不同 hyperparameters 下的性能。

调试模型架构

使用 Graphs 选项卡可视化模型的 computational graph。这可以确保模型按预期构建,并有助于识别结构问题。

清理

TensorBoard 实例会消耗集群资源(CPU/Memory)。当你完成实验分析后:

  1. 返回 TensorBoards 列表。
  2. 单击实例旁边的 Delete(垃圾桶图标)按钮。
  3. 确认删除。这将移除可视化服务器,但不会删除存储在 PVC 或 Object Storage 中的训练日志或模型。