在开发机中使用Tensorboard
更新时间:2026-10-10
概述
本文介绍如何在百舸开发机中安装并使用 Tensorboard 工具。通过配置自定义端口,可将开发机内容器中的 Tensorboard 服务暴露到公网访问入口,并通过浏览器查看训练日志、标量、直方图、图像、文本、计算图等可视化内容。
前提条件
- 已登录百度智能云控制台。
- 已进入 百度百舸·AI 计算平台->大规模训练与推理->开发机 页面。
- 已准备可用的百舸开发机环境,且开发机中具备 Python 和 pip 环境。
- 如需公网访问 Tensorboard,需具备可绑定的 BLB;若当前无可选 BLB,可先创建 BLB。## 环境准备
端口配置
为了确保能够在公网环境访问Tensorboard服务,需要配置自定义端口,将服务暴露到公网:

Tensorboard 安装
通过 pip install 安装 Tensorboard。
Bash
1pip install tensorboard
Tensorboard 日志准备
首先需要确保 Tensorboard 日志已经存在于开发机目录中。若无可用日志,可通过如下脚本快速生成。该示例脚本通过随机数据生成包括标量、直方图、图像、文本、计算图、PR 曲线和嵌入数据等多种数据类型的 Tensorboard 日志。
Python
1import torch
2import torch.nn as nn
3import numpy as np
4from torch.utils.tensorboard import SummaryWriter
5import datetime
6
7# Set random seeds
8torch.manual_seed(42)
9np.random.seed(42)
10
11# Create TensorBoard writer
12log_dir = "logs/random_demo/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
13writer = SummaryWriter(log_dir)
14
15# 1. Scalar data - Simulating training metrics
16for step in range(100):
17 # Simulate loss decreasing
18 loss = 2.0 * np.exp(-step / 20) + np.random.rand() * 0.2
19 # Simulate accuracy increasing
20 accuracy = 0.3 + 0.7 * (1 - np.exp(-step / 30)) + np.random.rand() * 0.05
21
22 writer.add_scalar('Loss/train', loss, step)
23 writer.add_scalar('Accuracy/train', accuracy, step)
24
25 # Add more scalars
26 writer.add_scalar('Learning_rate', 0.001 * np.exp(-step / 50), step)
27 writer.add_scalar('Batch_time', 0.1 + np.random.rand() * 0.05, step)
28
29# 2. Histogram data - Simulating weight distributions
30for step in range(0, 100, 20):
31 # Simulate neural network weights
32 weights = torch.randn(1000) * (1.0 - step/100)
33 biases = torch.randn(100) * 0.1
34 gradients = torch.randn(500) * 0.01
35
36 writer.add_histogram('weights/layer1', weights, step)
37 writer.add_histogram('biases/layer1', biases, step)
38 writer.add_histogram('gradients', gradients, step)
39
40# 3. Image data - Random images
41for step in range(0, 100, 25):
42 # Generate random RGB images (3, 32, 32)
43 random_images = torch.rand(8, 3, 32, 32) # 8 images, 3 channels, 32x32
44 writer.add_images('Random_images', random_images, step)
45
46 # Generate random grayscale images
47 gray_images = torch.rand(8, 1, 28, 28)
48 writer.add_images('MNIST_like_images', gray_images, step)
49
50# 4. Text data - Example text
51sample_text = """
52This is a TensorBoard demonstration log.
53Generated using PyTorch with random data.
54Includes various data types: scalars, histograms, images, text, etc.
55"""
56writer.add_text('Experiment_Info', sample_text, 0)
57writer.add_text('Hyperparameters',
58 f"Batch size: 64\nLearning rate: 0.001\nOptimizer: Adam", 0)
59
60# 5. Computation graph - Simple model structure
61class SimpleModel(nn.Module):
62 def __init__(self):
63 super(SimpleModel, self).__init__()
64 self.fc1 = nn.Linear(10, 20)
65 self.fc2 = nn.Linear(20, 5)
66
67 def forward(self, x):
68 x = torch.relu(self.fc1(x))
69 x = self.fc2(x)
70 return x
71
72model = SimpleModel()
73dummy_input = torch.rand(1, 10)
74writer.add_graph(model, dummy_input)
75
76# 6. PR curve (Precision-Recall Curve)
77num_samples = 1000
78probabilities = torch.rand(num_samples)
79labels = torch.randint(0, 2, (num_samples,)).float()
80writer.add_pr_curve('Binary_Classification', labels, probabilities, 0)
81
82# 7. Embedding data - High-dimensional data visualization
83num_embeddings = 100
84embedding_dim = 16
85features = torch.randn(num_embeddings, embedding_dim)
86metadata = [f'class_{i%5}' for i in range(num_embeddings)]
87
88writer.add_embedding(features, metadata=metadata,
89 tag='Random_embeddings', global_step=0)
90
91# 8. Audio data - Random audio
92try:
93 sample_rate = 44100
94 audio_data = torch.rand(1, sample_rate) * 2 - 1 # Normalize to [-1, 1]
95 writer.add_audio('Random_audio', audio_data, 0, sample_rate=sample_rate)
96
97 t = torch.linspace(0, 1, sample_rate)
98 sine_wave = 0.3 * torch.sin(2 * np.pi * 440 * t) # 440Hz A tone
99 writer.add_audio('Sine_wave_440Hz', sine_wave.unsqueeze(0), 0, sample_rate=sample_rate)
100except Exception as e:
101 print(f"Audio generation skipped: {e}")
102
103# 9. Scalar groups
104for step in range(50):
105 writer.add_scalars('Losses', {
106 'train_loss': 1.0 / (step + 1),
107 'val_loss': 1.5 / (step + 1),
108 'test_loss': 2.0 / (step + 1)
109 }, step)
110
111 writer.add_scalars('Accuracies', {
112 'train_acc': min(0.95, 0.5 + step * 0.01),
113 'val_acc': min(0.92, 0.5 + step * 0.009),
114 'test_acc': min(0.90, 0.5 + step * 0.008)
115 }, step)
116
117# 10. Custom scalar layout
118layout = {
119 'Training': {
120 'Loss': ['Multiline', ['Loss/train', 'Loss/validation']],
121 'Accuracy': ['Multiline', ['Accuracy/train', 'Accuracy/validation']]
122 },
123 'Distributions': {
124 'Weights': ['Multiline', ['weights/layer1']]
125 }
126}
127writer.add_custom_scalars(layout)
128
129# Close the writer
130writer.close()
131
132print(f"TensorBoard logs generated to: {log_dir}")
启动 Tensorboard
在已准备 Tensorboard 日志的开发机环境中,执行如下命令启动 Tensorboard 服务,并指定日志路径、监听地址和服务内部端口。
Plain Text 复制
Plain Text
11tensorboard --logdir={log_folder} --host=0.0.0.0 --port={tensorboard服务内部端口}

启动成功后,在浏览器访问 http://{开发机公网 IP}:{BLB 监听端口}/ 即可打开 Tensorboard 页面。

评价此篇文章
