К основному содержанию
скилл CX Codex

experiment-tracking-swanlab — скилл для Claude Code: трекинг

Скилл учит агента вести эксперименты в SwanLab: логировать метрики, конфиги и медиа, поднимать локальный дашборд.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Orchestra-Research/AI-Research-SKILLs --skill experiment-tracking-swanlab -a claude-code
npx skills add Orchestra-Research/AI-Research-SKILLs --skill swanlab -a claude-code
Открыть на GitHub

Что делает experiment-tracking-swanlab

Скилл даёт агенту готовые шаблоны работы с SwanLab — открытой библиотекой для трекинга ML-прогонов. Внутри примеры инициализации запуска, логирования скаляров, сравнения прогонов по сидам и чекпоинтам, а также записи изображений, аудио, текста, GIF, облаков точек и молекул.

Есть разделы под PyTorch, Transformers, PyTorch Lightning и Fastai: для Transformers показан запуск через report_to="swanlab" в TrainingArguments. Отдельно разобраны локальный режим (mode="local" с logdir) и self-hosted: логин по SWANLAB_API_KEY с указанием host, просмотр логов через swanlab watch -l ./swanlog и отложенная синхронизация командой swanlab sync.

Для медиа-примеров нужны pillow и soundfile, а локальный дашборд и swanlab watch требуют пакета swanlab[dashboard] — без него режим mode="local" не заработает. Установка тянет swanlab>=0.7.11; для облака или своего сервера понадобится swanlab login.

Какие задачи решает

  • логировать метрики обучения по эпохам и батчам
  • сравнить прогоны с разными сидами и гиперпараметрами
  • поднять локальный дашборд без облачного аккаунта
  • записать изображения и аудио рядом с кривыми лосса
  • подключить трекинг к Trainer из Transformers

Примеры запросов агенту

  • настрой SwanLab для обучения ResNet на MNIST
  • добавь логирование train/loss и val/loss через swanlab
  • переведи обучение в локальный режим с логами в ./swanlog

Как установить experiment-tracking-swanlab

1Через Skills CLI (Vercel)

npx skills add Orchestra-Research/AI-Research-SKILLs --skill experiment-tracking-swanlab -a claude-code
npx skills add Orchestra-Research/AI-Research-SKILLs --skill swanlab -a claude-code

2Вручную: положить файлы

~/.claude/skills/swanlab/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/swanlab/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о experiment-tracking-swanlab

Как установить experiment-tracking-swanlab в Claude?

Выполните npx skills add Orchestra-Research/AI-Research-SKILLs --skill experiment-tracking-swanlab -a claude-code, затем npx skills add Orchestra-Research/AI-Research-SKILLs --skill swanlab -a claude-code. Файл скилла окажется по пути ~/.claude/skills/swanlab/SKILL.md.

Что делает experiment-tracking-swanlab?

Подсказывает агенту, как вести ML-эксперименты в SwanLab: инициализировать запуск, писать метрики и конфиги, логировать медиа и работать с локальным или self-hosted дашбордом.

Что нужно для локального дашборда SwanLab?

Пакет swanlab[dashboard]>=0.7.11 — он нужен для mode="local" и команды swanlab watch. Для медиа-примеров дополнительно ставятся pillow и soundfile.

Исходный текст

SKILL.md · MIT
---
name: experiment-tracking-swanlab
description: Provides guidance for experiment tracking with SwanLab. Use when you need open-source run tracking, local or self-hosted dashboards, and lightweight media logging for ML workflows.
version: 1.0.0
author: Orchestra Research
license: MIT
tags: [MLOps, SwanLab, Experiment Tracking, Open Source, Visualization, PyTorch, Transformers, PyTorch Lightning, Fastai, Self-Hosted]
dependencies: [swanlab>=0.7.11, pillow>=9.0.0, soundfile>=0.12.0]
---

# 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

```bash
# 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

```python
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

```python
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

```python
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

```python
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

```python
# 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

```python
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")})
```

```python
# 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](references/visualization.md) for more chart and media patterns.

### 5. Local and Self-Hosted Workflows

```python
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()
```

```bash
# View local logs
swanlab watch -l ./swanlog

# Sync local logs later
swanlab sync ./swanlog
```

## Integration Examples

### HuggingFace Transformers

```python
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](references/integrations.md) for callback-based setups and additional framework patterns.

### PyTorch Lightning

```python
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

```python
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](references/integrations.md) for fuller framework examples.

## Best Practices

### 1. Use Stable Metric Names

```python
# 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

```python
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

```python
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

```python
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](references/visualization.md) for advanced chart and media patterns
- Use [references/integrations.md](references/integrations.md) for callback-based and framework-specific integration details

## Resources

- [Official docs (Chinese)](https://docs.swanlab.cn)
- [Official docs (English)](https://docs.swanlab.cn/en)
- [GitHub repo](https://github.com/SwanHubX/SwanLab)
- [Self-hosted repo](https://github.com/SwanHubX/self-hosted)

## See Also

- [references/integrations.md](references/integrations.md) - Framework-specific examples
- [references/visualization.md](references/visualization.md) - Charts and media logging patterns

© Orchestra Research · MIT · Orchestra-Research/AI-Research-SKILLs

Похожие скиллы

Всё по теме «ИИ и ML» →
ml-pipeline-automation secondsky Скилл для сборки ML-пайплайнов на Airflow, Kubeflow и MLflow: обучение по расписанию, трекинг экспериментов, алерты при падении задач. CX Codex +1 389установок wandb-primary wandb Скилл для задач по Weights & Biases: обзор проекта, runs и artifacts, трейсы Weave, отчёты, свипы. Пригодится, когда вопрос охватывает сразу несколько частей W&B. CX Codex +1 1 700установок experiment-code lingzhi227 Пишет и дорабатывает код ML-экспериментов для научной статьи: обучение, оценка, отладка, графики. Пригодится, когда нужно прогнать серию запусков и сравнить результаты. CX Codex +1 1 600установок mle-workflow affaan-m Скилл для перевода модельной работы в продакшн-систему: контракты данных, воспроизводимое обучение, оценка качества, деплой и откат. CX Codex +1 4 600установок ai-research-explore lllllllama Управляет исследовательскими экспериментами в deep learning на базе зафиксированного бейзлайна. Помогает проверять гипотезы без потери воспроизводимости. CX Codex +1 337 400установок explore-run lllllllama Скилл планирует пробные запуски моделей машинного обучения и формирует отчёты без необоснованных заявлений. CX Codex +1 336 500установок

Из того же набора66

lambda-labs-gpu-cloud Скилл помогает запускать GPU-инстансы Lambda Labs для обучения и инференса ML-моделей. Он пригодится для SSH-доступа, постоянного хранилища и кластеров. CX Codex +1 939установок presenting-conference-talks Скилл преобразует готовую научную статью в слайды презентации Beamer LaTeX и PPTX с заметками докладчика. Подходит для подготовки докладов на конференциях по ML и Computer Systems. CX Codex +1 913установок ml-training-recipes Скилл содержит практические шаблоны обучения моделей на PyTorch: от настройки циклов и оптимизаторов Muon и AdamW до смешанной точности и устранения OOM. CX Codex +1 912установок systems-paper-writing Скилл задаёт структуру академических статей на 10–12 страниц для OSDI, SOSP, ASPLOS, NSDI и EuroSys. Помогает спланировать бюджет страниц и текст каждого абзаца. CX Codex +1 908установок fine-tuning-serving-openpi Пошаговые сценарии для дообучения и запуска инференса робототехнических моделей OpenPI (pi0, pi0-fast, pi0.5). Помогает подготовить окружение, рассчитать нормализацию и поднять WebSocket-сервер. CX Codex +1 861установок fine-tuning-openvla-oft Настраивает дообучение и оценку OpenVLA-OFT для генерации действий робота. Нужен для сценариев LIBERO и ALOHA с непрерывными действиями. CX Codex +1 861установок evaluating-cosmos-policy Скилл для запуска оценки NVIDIA Cosmos Policy на симуляторах LIBERO и RoboCasa и замера скорости инференса. CX Codex +1 858установок evolving-ai-agents Скилл про A-Evolve: прогоняет циклы solve-observe-evolve и правит промпты, скиллы и память агента по метрикам бенчмарка. CX Codex +1 833установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой