Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
orchestra-research avatar

Experiment Tracking Swanlab

  • 358 installs
  • 11.2k repo stars
  • Updated June 16, 2026
  • orchestra-research/ai-research-skills

experiment-tracking-swanlab is an agent skill that teaches developers to integrate SwanLab experiment tracking into PyTorch, HuggingFace Transformers, PyTorch Lightning, and Fastai training workflows for config capture,

About

experiment-tracking-swanlab is an Orchestra Research agent skill (version 1.0.0) for open-source ML experiment tracking with SwanLab. The skill documents swanlab.init, swanlab.log, run.finish, local mode with swanlab watch, and cloud or self-hosted deployment via swanlab login. It ships integration patterns for 4 frameworks—PyTorch, HuggingFace Transformers, PyTorch Lightning, and Fastai—plus media logging for images, audio, text, GIFs, point clouds, and molecules through swanlab.Image, Audio, Text, Video, Object3D, and Molecule APIs. Dependencies pin swanlab>=0.7.11 with pillow and soundfile for media examples, and two reference files cover framework callbacks and ECharts visualization. Reach for experiment-tracking-swanlab when instrumenting training scripts, comparing hyperparameter sweeps, or running offline-first experiments without a managed SaaS tracker.

  • Documents SwanLab `init` / `log` / `finish` patterns aligned with public SwanLab docs
  • PyTorch training-loop example with config-driven hyperparameters and batch metrics
  • Minimal `SwanLabTracker` callback-style wrapper pattern for reusable logging
  • Emphasizes structured `config` on run init for reproducible solo ML experiments

Experiment Tracking Swanlab by the numbers

  • 358 all-time installs (skills.sh)
  • +37 installs in the week ending Jul 18, 2026 (Skillselion tracking)
  • Ranked #531 of 2,066 Data Science & ML skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/orchestra-research/ai-research-skills --skill experiment-tracking-swanlab

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs358
repo stars11.2k
Security audit3 / 3 scanners passed
Last updatedJune 16, 2026
Repositoryorchestra-research/ai-research-skills

How do you log PyTorch training metrics with SwanLab?

Wire PyTorch (and similar) training loops to SwanLab for experiment config, metrics logging, and run lifecycle.

Who is it for?

Python ML engineers who need open-source, self-hostable experiment tracking integrated into PyTorch, Transformers, Lightning, or Fastai training code.

Skip if: Teams that only need production model serving, inference monitoring, or a non-Python stack without SwanLab-compatible training frameworks.

When should I use this skill?

A developer is adding experiment tracking, hyperparameter logging, or run comparison to an existing PyTorch, Transformers, Lightning, or Fastai training script.

What you get

Instrumented training scripts, SwanLab run records with hyperparameter configs, scalar and media metric logs, and viewable local or cloud experiment dashboards.

  • SwanLab-instrumented training scripts with config and metric logging
  • Logged experiment runs viewable in local or cloud SwanLab dashboards

By the numbers

  • Documents 4 framework integrations: PyTorch, HuggingFace Transformers, PyTorch Lightning, and Fastai
  • Covers 6 media logging types: images, audio, text, GIFs, point clouds, and molecules
  • Pins swanlab>=0.7.11 with 2 bundled reference files for integrations and visualization

Files

SKILL.mdMarkdownGitHub ↗

SwanLab: Open-Source Experiment Tracking

When to Use This Skill

Use SwanLab when you need to:

  • Track ML experiments with metrics, configs, tags, and descriptions
  • Visualize training with scalar charts and logged media
  • Compare runs across seeds, checkpoints, and hyperparameters
  • Work locally or self-hosted instead of depending on managed SaaS
  • Integrate with PyTorch, Transformers, PyTorch Lightning, or Fastai

Deployment: Cloud, local, or self-hosted | Media: images, audio, text, GIFs, point clouds, molecules | Integrations: PyTorch, Transformers, PyTorch Lightning, Fastai

Installation

# Install SwanLab plus the media dependencies used in this skill
pip install "swanlab>=0.7.11" "pillow>=9.0.0" "soundfile>=0.12.0"

# Add local dashboard support for mode="local" and swanlab watch
pip install "swanlab[dashboard]>=0.7.11"

# Optional framework integrations
pip install transformers pytorch-lightning fastai

# Login for cloud or self-hosted usage
swanlab login

pillow and soundfile are the media dependencies used by the Image and Audio examples in this skill. swanlab[dashboard] adds the local dashboard dependency required by mode="local" and swanlab watch.

Quick Start

Basic Experiment Tracking

import swanlab

run = swanlab.init(
    project="my-project",
    experiment_name="baseline",
    config={
        "learning_rate": 1e-3,
        "epochs": 10,
        "batch_size": 32,
        "model": "resnet18",
    },
)

for epoch in range(run.config.epochs):
    train_loss = train_epoch()
    val_loss = validate()

    swanlab.log(
        {
            "train/loss": train_loss,
            "val/loss": val_loss,
            "epoch": epoch,
        }
    )

run.finish()

With PyTorch

import torch
import torch.nn as nn
import torch.optim as optim
import swanlab

run = swanlab.init(
    project="pytorch-demo",
    experiment_name="mnist-mlp",
    config={
        "learning_rate": 1e-3,
        "batch_size": 64,
        "epochs": 10,
        "hidden_size": 128,
    },
)

model = nn.Sequential(
    nn.Flatten(),
    nn.Linear(28 * 28, run.config.hidden_size),
    nn.ReLU(),
    nn.Linear(run.config.hidden_size, 10),
)
optimizer = optim.Adam(model.parameters(), lr=run.config.learning_rate)
criterion = nn.CrossEntropyLoss()

for epoch in range(run.config.epochs):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        logits = model(data)
        loss = criterion(logits, target)
        loss.backward()
        optimizer.step()

        if batch_idx % 100 == 0:
            swanlab.log(
                {
                    "train/loss": loss.item(),
                    "train/epoch": epoch,
                    "train/batch": batch_idx,
                }
            )

run.finish()

Core Concepts

1. Projects and Experiments

Project: Collection of related experiments Experiment: Single execution of a training or evaluation workflow

import swanlab

run = swanlab.init(
    project="image-classification",
    experiment_name="resnet18-seed42",
    description="Baseline run on ImageNet subset",
    tags=["baseline", "resnet18"],
    config={
        "model": "resnet18",
        "seed": 42,
        "batch_size": 64,
        "learning_rate": 3e-4,
    },
)

print(run.id)
print(run.config.learning_rate)

2. Configuration Tracking

config = {
    "model": "resnet18",
    "seed": 42,
    "batch_size": 64,
    "learning_rate": 3e-4,
    "epochs": 20,
}

run = swanlab.init(project="my-project", config=config)

learning_rate = run.config.learning_rate
batch_size = run.config.batch_size

3. Metric Logging

# Log scalars
swanlab.log({"loss": 0.42, "accuracy": 0.91})

# Log multiple metrics
swanlab.log(
    {
        "train/loss": train_loss,
        "train/accuracy": train_acc,
        "val/loss": val_loss,
        "val/accuracy": val_acc,
        "lr": current_lr,
        "epoch": epoch,
    }
)

# Log with custom step
swanlab.log({"loss": loss}, step=global_step)

4. Media and Chart Logging

import numpy as np
import swanlab

# Image
image = np.random.randint(0, 255, (224, 224, 3), dtype=np.uint8)
swanlab.log({"examples/image": swanlab.Image(image, caption="Augmented sample")})

# Audio
wave = np.sin(np.linspace(0, 8 * np.pi, 16000)).astype("float32")
swanlab.log({"examples/audio": swanlab.Audio(wave, sample_rate=16000)})

# Text
swanlab.log({"examples/text": swanlab.Text("Training notes for this run.")})

# GIF video
swanlab.log({"examples/video": swanlab.Video("predictions.gif", caption="Validation rollout")})

# Point cloud
points = np.random.rand(128, 3).astype("float32")
swanlab.log({"examples/point_cloud": swanlab.Object3D(points, caption="Point cloud sample")})

# Molecule
swanlab.log({"examples/molecule": swanlab.Molecule.from_smiles("CCO", caption="Ethanol")})
# Custom chart with swanlab.echarts
line = swanlab.echarts.Line()
line.add_xaxis(["epoch-1", "epoch-2", "epoch-3"])
line.add_yaxis("train/loss", [0.92, 0.61, 0.44])
line.set_global_opts(
    title_opts=swanlab.echarts.options.TitleOpts(title="Training Loss")
)

swanlab.log({"charts/loss_curve": line})

See references/visualization.md for more chart and media patterns.

5. Local and Self-Hosted Workflows

import os
import swanlab

# Self-hosted or cloud login
swanlab.login(
    api_key=os.environ["SWANLAB_API_KEY"],
    host="http://your-server:5092",
)

# Local-only logging
run = swanlab.init(
    project="offline-demo",
    mode="local",
    logdir="./swanlog",
)

swanlab.log({"loss": 0.35, "epoch": 1})
run.finish()
# View local logs
swanlab watch -l ./swanlog

# Sync local logs later
swanlab sync ./swanlog

Integration Examples

HuggingFace Transformers

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=8,
    evaluation_strategy="epoch",
    logging_steps=50,
    report_to="swanlab",
    run_name="bert-finetune",
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)

trainer.train()

See references/integrations.md for callback-based setups and additional framework patterns.

PyTorch Lightning

import pytorch_lightning as pl
from swanlab.integration.pytorch_lightning import SwanLabLogger

swanlab_logger = SwanLabLogger(
    project="lightning-demo",
    experiment_name="mnist-classifier",
    config={"batch_size": 64, "max_epochs": 10},
)

trainer = pl.Trainer(
    logger=swanlab_logger,
    max_epochs=10,
    accelerator="auto",
)

trainer.fit(model, train_loader, val_loader)

Fastai

from fastai.vision.all import accuracy, resnet34, vision_learner
from swanlab.integration.fastai import SwanLabCallback

learn = vision_learner(dls, resnet34, metrics=accuracy)
learn.fit(
    5,
    cbs=[
        SwanLabCallback(
            project="fastai-demo",
            experiment_name="pets-classification",
            config={"arch": "resnet34", "epochs": 5},
        )
    ],
)

See references/integrations.md for fuller framework examples.

Best Practices

1. Use Stable Metric Names

# Good: grouped metric namespaces
swanlab.log({
    "train/loss": train_loss,
    "train/accuracy": train_acc,
    "val/loss": val_loss,
    "val/accuracy": val_acc,
})

# Avoid mixing flat and grouped names for the same metric family

2. Initialize Early and Capture Config Once

run = swanlab.init(
    project="image-classification",
    experiment_name="resnet18-baseline",
    config={
        "model": "resnet18",
        "learning_rate": 3e-4,
        "batch_size": 64,
        "seed": 42,
    },
)

3. Save Checkpoints Locally

import torch
import swanlab

checkpoint_path = "checkpoints/best.pth"
torch.save(model.state_dict(), checkpoint_path)

swanlab.log(
    {
        "best/val_accuracy": best_val_accuracy,
        "artifacts/checkpoint_path": swanlab.Text(checkpoint_path),
    }
)

4. Use Local Mode for Offline-First Workflows

run = swanlab.init(project="offline-demo", mode="local", logdir="./swanlog")
# ... training code ...
run.finish()

# Inspect later with: swanlab watch -l ./swanlog

5. Keep Advanced Patterns in References

  • Use references/visualization.md for advanced chart and media patterns
  • Use references/integrations.md for callback-based and framework-specific integration details

Resources

See Also

  • references/integrations.md - Framework-specific examples
  • references/visualization.md - Charts and media logging patterns

Related skills

How it compares

Choose experiment-tracking-swanlab when you want open-source, local or self-hosted experiment tracking wired directly into Python training code instead of a proprietary cloud-only SaaS workflow.

FAQ

Which ML frameworks does experiment-tracking-swanlab support?

experiment-tracking-swanlab documents SwanLab integrations for PyTorch training loops, HuggingFace Transformers via report_to="swanlab", PyTorch Lightning through SwanLabLogger, and Fastai via SwanLabCallback, with fuller callback patterns in references/integrations.md.

Can SwanLab run without cloud or SaaS?

experiment-tracking-swanlab shows offline-first workflows using swanlab.init with mode="local" and a logdir, then swanlab watch to inspect runs locally; cloud or self-hosted sync uses swanlab login with an API key and custom host.

What Python packages does experiment-tracking-swanlab require?

experiment-tracking-swanlab pins swanlab>=0.7.11, pillow>=9.0.0, and soundfile>=0.12.0 for media logging; optional swanlab[dashboard] adds local dashboard support, and framework packages like transformers or pytorch-lightning install separately.

Is Experiment Tracking Swanlab safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Data Science & MLllmautomationresearch

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.