| name | monitoring-dashboard |
| description | Training monitoring dashboard setup with TensorBoard and Weights & Biases (WandB) including real-time metrics tracking, experiment comparison, hyperparameter visualization, and integration patterns. Use when setting up training monitoring, tracking experiments, visualizing metrics, comparing model runs, or when user mentions TensorBoard, WandB, training metrics, experiment tracking, or monitoring dashboard. |
| allowed-tools | Read, Write, Bash, Grep, Glob |
Monitoring Dashboard
Purpose: Provide complete monitoring dashboard templates and setup scripts for ML training with TensorBoard and Weights & Biases (WandB).
Activation Triggers:
- Setting up training monitoring dashboards
- Tracking experiments and metrics in real-time
- Comparing multiple training runs
- Visualizing hyperparameters and results
- Integrating monitoring into existing training pipelines
- Logging custom metrics, images, and model artifacts
Key Resources:
scripts/setup-tensorboard.sh - Install and configure TensorBoard
scripts/setup-wandb.sh - Install and configure Weights & Biases
scripts/launch-monitoring.sh - Launch monitoring dashboards
templates/tensorboard-config.yaml - TensorBoard configuration template
templates/wandb-config.py - WandB integration template
templates/logging-config.json - Unified logging configuration
examples/tensorboard-integration.md - Complete TensorBoard integration guide
examples/wandb-integration.md - Complete WandB integration guide
Quick Start
1. Choose Monitoring Solution
TensorBoard (Local/Open Source):
- Free, runs locally
- Best for: Single-user development, offline work
- Features: Metrics, histograms, graphs, images, embeddings
- Storage: Local filesystem
Weights & Biases (Cloud/Collaboration):
- Free tier available, cloud-hosted
- Best for: Team collaboration, experiment comparison, production
- Features: All TensorBoard features + collaboration, alerts, reports
- Storage: Cloud with unlimited history
Both (Recommended for Production):
- Use TensorBoard for local development
- Use WandB for team collaboration and production tracking
2. Setup TensorBoard
./scripts/setup-tensorboard.sh
./scripts/launch-monitoring.sh tensorboard --logdir ./runs
Access: Open browser to http://localhost:6006
3. Setup Weights & Biases
./scripts/setup-wandb.sh
wandb login
./scripts/launch-monitoring.sh wandb
Access: Dashboard at https://wandb.ai/your-username/your-project
TensorBoard Integration
Basic Setup
Template: templates/tensorboard-config.yaml
from torch.utils.tensorboard import SummaryWriter
import datetime
log_dir = f"runs/experiment_{datetime.datetime.now().strftime('%Y%m%d-%H%M%S')}"
writer = SummaryWriter(log_dir=log_dir)
writer.add_scalar('Loss/train', train_loss, epoch)
writer.add_scalar('Loss/validation', val_loss, epoch)
writer.add_scalar('Accuracy/train', train_acc, epoch)
writer.add_scalar('Accuracy/validation', val_acc, epoch)
writer.add_scalar('Learning_Rate', optimizer.param_groups[0]['lr'], epoch)
writer.close()
Advanced Logging
Histograms (Weight Distributions):
for name, param in model.named_parameters():
writer.add_histogram(f'weights/{name}', param, epoch)
writer.add_histogram(f'gradients/{name}', param.grad, epoch)
Images:
writer.add_image('predictions', image_grid, epoch)
writer.add_images('batch_samples', image_batch, epoch)
Text:
config_text = '\n'.join([f'{k}: {v}' for k, v in config.items()])
writer.add_text('hyperparameters', config_text, 0)
Model Graph:
writer.add_graph(model, input_tensor)
Embeddings (t-SNE, PCA):
writer.add_embedding(embeddings, metadata=labels, label_img=images)
Launch TensorBoard
tensorboard --logdir runs
tensorboard --logdir runs --port 6007
tensorboard --logdir runs --samples_per_plugin scalars=1000
tensorboard --logdir runs --reload_interval 5
Weights & Biases Integration
Basic Setup
Template: templates/wandb-config.py
import wandb
wandb.init(
project="my-ml-project",
name=f"experiment-{datetime.now().strftime('%Y%m%d-%H%M%S')}",
config={
"learning_rate": 0.001,
"epochs": 100,
"batch_size": 32,
"model": "resnet50",
"dataset": "imagenet"
}
)
wandb.log({
"train_loss": train_loss,
"val_loss": val_loss,
"train_acc": train_acc,
"val_acc": val_acc,
"epoch": epoch
})
wandb.finish()
Advanced Features
Log Media:
wandb.log({"predictions": [wandb.Image(img, caption=f"Pred: {pred}")]})
table = wandb.Table(columns=["epoch", "loss", "accuracy"], data=data)
wandb.log({"results_table": table})
wandb.log({"audio": wandb.Audio(audio_array, sample_rate=16000)})
wandb.log({"video": wandb.Video(video_path, fps=30)})
Track Model Artifacts:
artifact = wandb.Artifact('model-checkpoint', type='model')
artifact.add_file('model.pth')
wandb.log_artifact(artifact)
artifact = wandb.use_artifact('model-checkpoint:latest')
model_path = artifact.download()
Hyperparameter Sweeps:
sweep_config = {
'method': 'bayes',
'metric': {'name': 'val_loss', 'goal': 'minimize'},
'parameters': {
'learning_rate': {'min': 0.0001, 'max': 0.1},
'batch_size': {'values': [16, 32, 64]},
'optimizer': {'values': ['adam', 'sgd', 'adamw']}
}
}
sweep_id = wandb.sweep(sweep_config, project="my-project")
wandb.agent(sweep_id, function=train_model, count=10)
Custom Charts:
data = [[x, y] for (x, y) in zip(x_values, y_values)]
table = wandb.Table(data=data, columns=["x", "y"])
wandb.log({
"custom_plot": wandb.plot.line(table, "x", "y", title="Custom Plot")
})
Alerts:
if val_loss < 0.1:
wandb.alert(
title="Low Validation Loss",
text=f"Validation loss dropped to {val_loss:.4f}",
level=wandb.AlertLevel.INFO
)
Unified Logging Configuration
Template: templates/logging-config.json
Use this configuration to log to both TensorBoard and WandB simultaneously:
import wandb
from torch.utils.tensorboard import SummaryWriter
class UnifiedLogger:
def __init__(self, project_name, experiment_name, config):
self.tb_writer = SummaryWriter(
log_dir=f"runs/{experiment_name}"
)
wandb.init(
project=project_name,
name=experiment_name,
config=config
)
def log_metrics(self, metrics_dict, step):
"""Log to both TensorBoard and WandB"""
for key, value in metrics_dict.items():
self.tb_writer.add_scalar(key, value, step)
wandb.log(metrics_dict, step=step)
def log_images(self, images_dict, step):
"""Log images to both platforms"""
for key, image in images_dict.items():
self.tb_writer.add_image(key, image, step)
wandb.log({key: wandb.Image(image)}, step=step)
def log_model(self, model, input_sample):
"""Log model architecture"""
self.tb_writer.add_graph(model, input_sample)
wandb.watch(model, log="all", log_freq=)
():
.tb_writer.close()
wandb.finish()
logger = UnifiedLogger(
project_name=,
experiment_name=,
config={: , : }
)
logger.log_metrics({
: ,
:
}, step=epoch)
logger.close()
Common Monitoring Patterns
1. Training Loop Integration
for epoch in range(num_epochs):
model.train()
train_loss = 0
for batch_idx, (data, target) in enumerate(train_loader):
loss = train_step(model, data, target, optimizer)
train_loss += loss.item()
global_step = epoch * len(train_loader) + batch_idx
logger.log_metrics({
"batch_loss": loss.item(),
"learning_rate": optimizer.param_groups[0]['lr']
}, step=global_step)
model.eval()
val_loss, val_acc = validate(model, val_loader)
logger.log_metrics({
"epoch": epoch,
"train_loss": train_loss / len(train_loader),
"val_loss": val_loss,
"val_acc": val_acc
}, step=epoch)
for name, param in model.named_parameters():
logger.tb_writer.add_histogram(f'weights/{name}', param, epoch)
2. Experiment Comparison
TensorBoard:
tensorboard --logdir_spec \
exp1:runs/experiment_1,\
exp2:runs/experiment_2,\
exp3:runs/experiment_3
WandB:
3. Real-Time Monitoring
TensorBoard:
tensorboard --logdir runs --reload_interval 5
WandB:
wandb.alert(
title="Training Alert",
text=f"Accuracy reached {acc:.2%}",
level=wandb.AlertLevel.INFO
)
Best Practices
1. Metric Naming Conventions
Organize by category:
"Loss/train"
"Loss/validation"
"Accuracy/train"
"Accuracy/validation"
"Metrics/precision"
"Metrics/recall"
"train_loss"
"validation_loss"
"train_accuracy"
2. Logging Frequency
Guidelines:
- Scalars: Every batch or every N batches
- Histograms: Every epoch
- Images: Every epoch or every N epochs
- Model graph: Once at start
- Embeddings: Once per major checkpoint
if batch_idx % 10 == 0:
logger.log_metrics({"batch_loss": loss}, step)
if batch_idx == len(train_loader) - 1:
logger.log_metrics({"epoch_loss": epoch_loss}, epoch)
if epoch % 5 == 0:
logger.log_images({"samples": sample_images}, epoch)
3. Disk Space Management
TensorBoard:
find runs/ -type d -mtime +30 -exec rm -rf {} +
tar -czf archive_$(date +%Y%m%d).tar.gz runs/old_experiments/
rm -rf runs/old_experiments/
WandB:
wandb.restore('model.pth', run_path="user/project/run_id")
4. Security & Privacy
TensorBoard:
tensorboard --logdir runs --host 127.0.0.1
ssh -L 6006:localhost:6006 user@remote-server
WandB:
wandb.init(project="my-project", entity="private-team")
wandb.init(mode="offline")
Troubleshooting
TensorBoard Issues
Problem: Dashboard not updating
tensorboard --logdir runs --reload_interval 1
rm -rf /tmp/.tensorboard-info/
Problem: Port already in use
tensorboard --logdir runs --port 6007
pkill -f tensorboard
WandB Issues
Problem: Login fails
wandb login --relogin
export WANDB_API_KEY=your_api_key
Problem: Slow logging
wandb.init(settings=wandb.Settings(
_disable_stats=True,
_disable_meta=True
))
Scripts Usage
Setup TensorBoard
./scripts/setup-tensorboard.sh
Setup WandB
./scripts/setup-wandb.sh
Launch Monitoring
./scripts/launch-monitoring.sh tensorboard --logdir ./runs --port 6006
./scripts/launch-monitoring.sh wandb --project my-project
./scripts/launch-monitoring.sh both --logdir ./runs --project my-project
Resources
Scripts:
setup-tensorboard.sh - Install and configure TensorBoard
setup-wandb.sh - Install and configure WandB
launch-monitoring.sh - Launch monitoring dashboards
Templates:
tensorboard-config.yaml - TensorBoard setup configuration
wandb-config.py - WandB integration template
logging-config.json - Unified logging configuration
Examples:
tensorboard-integration.md - Complete TensorBoard integration
wandb-integration.md - Complete WandB integration with sweeps
Supported Frameworks: PyTorch, TensorFlow, JAX, Hugging Face Transformers
Python Version: 3.8+
Best Practice: Use both TensorBoard (local dev) and WandB (team collaboration)