可视化工具Tensorboard

更新时间:2025-04-22 02:17

如果您想通过可视化的界面,更直观地查看和分析模型训练过程及结果,可以在训练代码中使用Tensorboard存储训练过程中的日志,然后使用分布式训练(DLC)的Tensorboard功能进行可视化的查看。本文为您介绍如何创建和管理Tensorboard实例。

前提条件

  • DLC任务必须配置数据集才可以使用Tensorboard查看分析报告。您可以在DLC任务列表页单击任务名称,进入概览页面查看任务是否配置了数据集。

  • 在训练代码中使用Tensorboard存储了Summary日志。您可以参考下文案例中的示例代码,存储Summary日志文件。

使用Tensorboard的DLC任务案例

本文提供如下DLC任务案例,数据集和Tensorboard具体配置如下:

  • 配置OSS类型数据集:

    • OSS地址:oss://w*********.oss-cn-hangzhou-internal.aliyuncs.com/dlc_dataset_1/

    • 挂载地址:/mnt/data/

  • 通过Tensorboard的SummaryWriter设置Summary日志文件存储地址:SummaryWriter('/mnt/data/output/runs/mnist_experiment')。完整训练代码示例如下:

    完整训练代码示例

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torch.utils.data import DataLoader
    from torchvision import datasets, transforms
    from torch.utils.tensorboard import SummaryWriter
    
    # 超参数
    batch_size = 64
    learning_rate = 0.01
    num_epochs = 30
    
    # 检查是否有可用的 GPU
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
    # 数据预处理
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.5,), (0.5,))
    ])
    
    # 下载 MNIST 数据集,分为训练集和验证集
    train_dataset = datasets.MNIST(root='/mnt/data/dataSet', train=True, download=True, transform=transform)
    val_dataset = datasets.MNIST(root='/mnt/data/dataSet', train=False, download=True, transform=transform)
    
    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
    
    # 定义简单的神经网络
    class SimpleNN(nn.Module):
        def __init__(self):
            super(SimpleNN, self).__init__()
            self.fc1 = nn.Linear(28 * 28, 128)
            self.fc2 = nn.Linear(128, 10)
    
        def forward(self, x):
            x = x.view(-1, 28 * 28)  # 展平
            x = torch.relu(self.fc1(x))
            x = self.fc2(x)
            return x
    
    # 实例化模型,并将其移动到 GPU 上(如果可用)
    model = SimpleNN().to(device)
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=learning_rate)
    
    # 创建 TensorBoard 的 SummaryWriter
    writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')
    
    # 用于保存最高准确率的模型的变量
    best_val_accuracy = 0.0
    
    # 训练模型并记录损失和准确率
    for epoch in range(num_epochs):
        model.train()
        for batch_idx, (data, target) in enumerate(train_loader):
            data, target = data.to(device), target.to(device)  # 将数据和目标移动到 GPU
    
            # 清零梯度
            optimizer.zero_grad()
            # 前向传播
            output = model(data)
            # 计算损失
            loss = criterion(output, target)
            # 反向传播
            loss.backward()
            # 更新参数
            optimizer.step()
    
            # 记录训练损失到 TensorBoard
            if batch_idx % 100 == 0:  # 每 100 个批次记录一次
                writer.add_scalar('Loss/train', loss.item(), epoch * len(train_loader) + batch_idx)
                print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} ({100. * batch_idx / len(train_loader):.0f}%)]\tLoss: {loss.item():.6f}')
    
        # 验证模型并记录验证损失和准确率
        model.eval()
        val_loss = 0
        correct = 0
        with torch.no_grad():  # 不计算梯度
            for data, target in val_loader:
                data, target = data.to(device), target.to(device)  # 将数据和目标移动到 GPU
                output = model(data)
                val_loss += criterion(output, target).item()  # 累加验证损失
                pred = output.argmax(dim=1, keepdim=True)  # 获取预测标签
                correct += pred.eq(target.view_as(pred)).sum().item()  # 累加正确预测的数量
    
        val_loss /= len(val_loader)  # 计算平均验证损失
        val_accuracy = 100. * correct / len(val_loader.dataset)  # 计算验证准确率
        print(f'Validation Loss: {val_loss:.4f}, Accuracy: {correct}/{len(val_loader.dataset)} ({val_accuracy:.0f}%)')
    
        # 记录验证损失和准确率到 TensorBoard
        writer.add_scalar('Loss/validation', val_loss, epoch)
        writer.add_scalar('Accuracy/validation', val_accuracy, epoch)
    
        # 保存验证准确率最高的模型
        if val_accuracy > best_val_accuracy:
            best_val_accuracy = val_accuracy
            torch.save(model.state_dict(), '/mnt/data/output/best_model.pth')
            print(f'Model saved with accuracy: {best_val_accuracy:.2f}%')
    
    # 关闭 SummaryWriter
    writer.close()
    print('Training complete. writer.close()')

创建Tensorboard实例

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC

  2. 在目标任务操作列下,单击Tensorboard,在弹出的Tensorboard面板中,单击新建Tensorboardimage

  3. 新建Tensorboard页面中,配置以下参数,然后单击确定

    • 基本信息

      参数

      描述

      参数

      描述

      名称

      自定义Tensorboard实例名称。

      挂载配置

      • 挂载类型:支持的类型包括:按数据集 (推荐)按对象存储(OSS)按任务

      • Summary目录:即训练代码中您指定的Tensorboard Summary日志文件存储位置,您可以查找代码中的SummaryWriter获取Summary的完整路径。

      上文任务案例的三种填写示例如下:

      • 按数据集:选择任务配置的数据集,Summary目录只需填写日志文件在数据集中的相对路径image

      • 按对象存储(OSS):填写相应OSS路径,Summary目录只需填写日志文件在OSS中的相对路径

        image

      • 按任务:选择目标DLC任务,Summary目录需填写日志文件在容器中的完整路径

        image

    • 资源配置

      支持配置以下几种资源类型:

      资源类型

      描述

      资源类型

      描述

      免费资源

      系统为您提供一定额度的免费资源,每个实例支持使用的资源上限为2vCPU,4 GiB内存。当免费额度不能满足您的需求时,您可以关闭运行中的其他免费实例,释放额度,以继续创建新的Tensorboard实例。

      灵骏智算

      • 公共资源:计费方式为按量付费,仅通用计算支持使用公共资源,您可以按需选择资源规格。

      • 资源配额:计费方式为包年包月,您需要提前购买计算资源创建资源配额,然后选择资源配额,同时需要配置以下参数:

        说明

        该功能暂时仅供白名单用户使用。如有需要,请联系您的商务经理添加白名单。

        • 优先级:表示同时运行的Tensorboard实例执行的优先级,取值范围为[1,9],其中1表示优先级最低。

        • 任务资源:配置运行Tensorboard实例时使用的资源:CPU(核数)内存(GiB)

      通用计算

    • 专有网络配置

      当使用公共资源创建Tensorboard实例时,支持配置该参数。

      • 不配置专有网络,将使用公网连接。由于公网连接的带宽有限,在Tensorboard实例启动过程或查看报告时,可能会出现卡顿或无法正常进行的情况。

      • 配置专有网络,以确保充足的网络带宽和更稳定的性能。

        选择当前地域可用的专有网络,并选择对应的交换机与安全组。配置完成后,Tensorboard实例运行的集群将能够直接访问此专有网络内的服务,并使用此处选择的安全组进行安全访问限制。

        重要

        如果Tensorboard实例使用了需要配置专有网络的数据集(例如CPFS类型的数据集,或挂载点在专有网络内的NAS类型数据集等),则必须设置专有网络。

  4. 前往Tensorboard页面查看分析报告。

    1. 在工作空间页面的左侧导航栏选择AI资产管理 > 任务

    2. 切换到Tensorboard页签,当目标Tensorboard实例的状态运行中时,单击操作列下的查看Tensorboard。页面自动跳转到TensorBoard页面。image

管理Tensorboard实例

您可以按照以下操作步骤,对已创建的Tensorboard实例进行管理操作。

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入任务

  2. 在Tensorboard页签,管理Tensorboard实例。image

    • 启动Tensorboard实例

      单击启动,可启动已停止的Tensorboard实例。

    • 查看Tensorboard实例详情

      单击目标实例名称,查看基本信息配置信息

    • 查看关联任务

      关联任务列下,将鼠标悬浮在图标image上,查看已关联的DLC任务ID,并支持单击跳转到相关任务详情页面。

    • 查看关联数据集

      关联数据集列下,将鼠标悬浮在图标image上,查看已关联的数据集ID,并支持单击跳转到相关数据集详情页面。

    • 查看执行时长

      执行时长列下,查看目标实例的运行时长。停止实例后,该时间将重置。

    • 停止Tensorboard实例:

      • 单击目标实例操作列下的停止,直接停止实例。

      • 单击目标实例操作列下的自动停止设置,设置自动停止时间。

相关文档

您也可以在AI资产管理 > 任务页面,为分布式训练(DLC)任务创建Tensorboard实例。具体操作,请参见创建及管理Tensorboard实例

  • 本页导读 (1)
  • 前提条件
  • 使用Tensorboard的DLC任务案例
  • 创建Tensorboard实例
  • 基本信息
  • 资源配置
  • 专有网络配置
  • 管理Tensorboard实例
  • 相关文档
文档反馈
phone 联系我们