GenStudio 于 2025 年 5 月 推出 GenStudio 高级版/企业版升级服务,大幅提升 API 调用频率GenStudio 于 2025 年 5 月 推出 GenStudio 高级版/企业版升级服务,大幅提升 API 调用频率 ,依然保留免费基础服务了解计费
Skip to content

启用任务功能内置的 TensorBoard 服务

本指南将帮助您了解如何在平台「任务」功能中使用内置的 TensorBoard 功能来监控模型训练过程。

您将了解以下内容:

  1. 如何在训练脚本中指定写入日志路径
  2. 在平台创建训练任务时如何填写 TensorBoard 日志可视化路径
  3. 在训练过程中如何使用内置的 TensorBoard 服务查看训练日志

概述

我们的平台支持用户通过以下步骤使用 TensorBoard 来可视化模型训练的日志:

  1. 创建训练脚本:在脚本中指定 TensorBoard 日志目录(logdir),训练过程中会将日志写入该目录。
  2. 提交训练任务:通过平台控制台网页提交训练任务,并在任务可视化的「日志存储路径」中填写 TensorBoard 日志目录。
  3. 启动 TensorBoard 服务:在任务运行中,平台会自动启动一个 TensorBoard 服务,读取用户指定的日志目录,并提供可视化界面。

以下是详细步骤。

步骤 1:创建训练脚本

请在您自己的训练脚本中指定 TensorBoard 日志目录(logdir)。训练过程中,模型的日志(如损失、准确率等)将写入该目录。

以下是一个使用 PyTorch 的简单 Python 训练脚本示例,展示如何配置 TensorBoard 日志目录:

python
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.tensorboard import SummaryWriter
import datetime

# 定义 TensorBoard 日志目录,这个路径需要提供给平台,作为**任务可视化**的「日志存储路径」
log_dir = "/path/to/your/tensorboard/logs/"

# 定义基础日志目录并追加环境变量 VAR_DIR
# base_log_dir = "/path/to/your/tensorboard/logs/"
# var_dir = os.getenv('VAR_DIR', 'default_run')  # 默认值作为备用
# log_dir = os.path.join(base_log_dir, var_dir)

writer = SummaryWriter(log_dir=log_dir)

# 示例模型
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(10, 16)
        self.fc2 = nn.Linear(16, 1)
        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = self.relu(self.fc1(x))
        x = self.sigmoid(self.fc2(x))
        return x

model = SimpleNet()
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 模拟数据
x_train = torch.rand(1000, 10)
y_train = torch.randint(0, 2, (1000, 1)).float()

# 训练循环
epochs = 5
for epoch in range(epochs):
    model.train()
    optimizer.zero_grad()
    outputs = model(x_train)
    loss = criterion(outputs, y_train)
    loss.backward()
    optimizer.step()

    # 记录日志到 TensorBoard
    writer.add_scalar('Loss/train', loss.item(), epoch)
    writer.add_scalar('Accuracy/train', (outputs.round() == y_train).float().mean().item(), epoch)

# 关闭 writer
writer.close()

以下是关键点:

  • 日志目录(log_dir):确保您在脚本中明确指定日志目录的路径(例如 /path/to/your/tensorboard/logs/)。此路径必须是容器内的有效路径。建议在日志目录中加入环境变量,以避免日志冲突。详见下文「使用环境变量避免日志路径冲突」。
  • SummaryWriter:使用 PyTorch 的 SummaryWriter 来记录日志到 TensorBoard。您可以记录标量(如损失、准确率)、计算图等。
  • 关闭 writer:训练完成后调用 writer.close() 以确保日志正确写入。

步骤 2:提交训练任务

在完成训练脚本后,您需要通过平台的控制台网页提交训练任务,并指定 TensorBoard 日志目录。请在任务可视化的「日志存储路径」中填写 TensorBoard 日志目录(例如 /path/to/your/tensorboard/logs/)。

注意

  • 日志目录一致性:确保提交的日志目录路径与训练脚本中指定的 log_dir 完全一致,否则 TensorBoard 服务将无法找到日志文件。
  • 日志目录冲突/重复:尽量避免在不同的任务中使用相同的日志路径。在克隆/重跑任务时,可视情况修改代码中的日志写入路径。建议在日志目录中加入环境变量(如示例中的 VAR_DIR,平台支持从网页端控制和注入环境变量),以避免日志冲突。详见下文「使用环境变量避免日志路径冲突」。

步骤 3:查看 TensorBoard 可视化

一旦训练任务启动,平台会自动为您的任务启动一个 TensorBoard 服务。该服务会读取您指定的日志目录,并提供一个可视化界面,让您可以实时监控训练进度。

您可在任务列表页的右侧操作栏中找到可视化按钮,直接跳转 TensorBoard 看板。也可以在任务详情页找到可视化按钮。

alt text

注意

  • 任务结束后,任务可视化按钮失效。如果任务日志持久化保存在共享存储上,您可以自行运行 TensorBoard 看板服务查看日志。例如,可以使用开发机运行 TensorBoard 服务,并指定日志路径为当前训练任务的日志。
  • 如果您提交了多个训练任务,每个任务的 TensorBoard 服务是独立的,互不干扰。

使用环境变量避免日志路径冲突

重新运行或克隆训练任务时,可能会遇到日志路径冲突的问题。如果使用固定的 TensorBoard 日志目录(logdir),多次运行的任务会将日志写入同一路径,导致日志混淆,难以区分不同任务的训练数据。为解决这一问题,我们引入了通过环境变量动态设置日志目录的功能,让平台可以更灵活地读取日志路径,避免冲突。

功能介绍

平台支持用户在提交训练任务时,通过控制台网页界面定义和修改环境变量。这些环境变量会被注入到训练任务的容器中。通过在日志目录路径中追加一个可变部分(例如,通过环境变量 VAR_DIR 指定),每次运行任务时都可以生成唯一的日志目录,从而避免日志覆盖和混淆。

此功能的优势包括:

  • 避免日志冲突:通过为每次任务运行设置唯一的日志目录路径,确保不同任务的日志互不干扰。
  • 灵活性:用户可以在平台控制台网页界面中轻松定义或更改环境变量,无需修改训练脚本。
  • 简化任务管理:重新运行或克隆任务时,通过修改环境变量的值可生成新的日志目录,便于跟踪和比较多次运行的结果。平台可以更灵活地读取日志路径。

使用方法

以下是如何使用环境变量 VAR_DIR 来动态设置 TensorBoard 日志目录的步骤:

  1. 在训练脚本中使用环境变量,请参考前文代码示例中的注释部分(环境变量名可自行定义):

    python
    # base_log_dir = "/path/to/your/tensorboard/logs/"
    # var_dir = os.getenv('VAR_DIR', 'default_run')
    # log_dir = os.path.join(base_log_dir, var_dir)
  2. 在控制台设置环境变量。

    1. 在创建页面,找到任务可视化的「日志存储路径」,填写 TensorBoard 日志目录时引用环境变量:/path/to/your/tensorboard/logs/${VAR_DIR}/
    2. 在创建页面,找到环境变量设置,添加 VAR_DIR,输入唯一值(如 experiment_v2)。

通过在每次运行时修改网页上的环境变量(如 VAR_DIR),您可以动态设置日志目录,避免日志冲突和覆盖,且无需修改脚本。

参考资源