🔥Онлайн-версия SwanLab · 📃 Документация · Сообщить о проблеме · Обратная связь · Журнал обновлений
👋 Присоединяйтесь к нашему чату в WeChat
- 👋🏻 Что такое SwanLab
- 📃 Онлайн демонстрация
- 🏁 Быстрый старт
- 💻 Самостоятельное размещение
- 🚗 Интеграция с фреймворками
- 🆚 Сравнение с привычными инструментами
- 👥 Сообщество
- 📃 Лицензия
SwanLab — это инструмент для отслеживания экспериментов с ИИ с открытым исходным кодом и легким весом, предоставляющий платформу для отслеживания, сравнения и совместной работы над экспериментами.
SwanLab предлагает удобный API и привлекательный интерфейс, сочетающий такие возможности, как отслеживание гиперпараметров, запись метрик, онлайн-сотрудничество и совместное использование ссылок на эксперименты. Это позволяет быстро отслеживать эксперименты с ИИ, визуализировать процессы, записывать гиперпараметры и делиться ими с коллегами.
Ниже приведен список его основных особенностей:
1. 📊 Отслеживание метрик экспериментов и гиперпараметров: Минимальная инсталляция кода в ваш pipeleine машинного обучения позволяет отслеживать ключевые метрики
- Свободное ведение записей гиперпараметров и конфигурации экспериментов
- Поддерживаемые типы метаданных: скалярные метрики, изображения, аудио, текст и др.
- Поддерживаемые типы диаграмм: линейные графики, медиа-графики (изображения, аудио, текст) и др.
- Автоматическая запись: регистрирование в консоли, аппаратное обеспечение GPU, информация Git, список библиотек Python, директория кода
2. ⚡️ Весьма интегрировано с фреймворками: PyTorch, Tensorflow, PyTorch Lightning, 🤗HuggingFace, Transformers, MMEngine, Ultralytics, fastai, Tensorboard, OpenAI, ZhipuAI, Hydra и др.
3. 📦 Организация экспериментов: Централизованная приборная панель для быстрой и простой организации нескольких проектов и экспериментов, чтобы взглянуть на общее состояние обучения
4. 🆚 Сравнение результатов: Сравнивайте гиперпараметры и результаты различных экспериментов с помощью онлайн табло и графиков, чтобы вдохновляться на итерации
5. 👥 Онлайн сотрудничество: Вы можете работать над проектом вместе с вашей командой, в реальном времени синхронизируя эксперименты в рамках проекта, просматривать журналы обучения вашей команды и высказывать свои мнения и предложения по результатам
6. ✉️ Совместное использование результатов: Копируйте и отправляйте постоянные URL-адреса, чтобы поделиться каждым экспериментом, легко отправляйте их коллегам или интегрируйте в онлайн-заметки
7. 💻 Поддержка самостоятельного размещения: Поддержка использования в режиме оффлайн, самостоятелный вариант развертывания также позволяет просматривать панель управления и управлять экспериментами
[!ВАЖНО]
Добавьте проект в избранное, чтобы вы могли получать все уведомления о публикации на GitHub без задержек ~ ⭐️
Посмотрите онлайн демонстрацию SwanLab:
ResNet50 Классификация по категориям "Кошки и собаки" | Yolov8-COCO128 Обнаружение объектов |
---|---|
Отслеживание задачи классификации изображений с использованием простой модели ResNet50 на датасете "Кошки и собаки". | Обнаружение объектов с использованием Yolov8 на датасете COCO128, отслеживание гиперпараметров обучения и метрик. |
Тонкая настройка Qwen2 | Прогнозирование акций Google с помощью LSTM |
---|---|
Отслеживание тонкой настройки Qwen2 модели, выполняющей простые инструкции. | Обучение модели LSTM на датасете цен акций Google для прогнозирования будущих значений цен. |
pip install swanlab
-
Бесплатная регистрация
-
Войти, скопировать ваш API ключ из настроек пользователя > API Key
-
Откройте терминал и введите:
swanlab login
Когда система запросит, введите ваш API ключ, нажмите Enter, чтобы завершить вход.
import swanlab
# Инициализация нового эксперимента swanlab
swanlab.init(
project="my-first-ml",
config={'learning-rate': 0.003},
)
# Запись метрик
for i in range(10):
swanlab.log({"loss": i, "acc": i})
Сделано! Перейдите на SwanLab, чтобы увидеть ваш первый эксперимент инга SwanLab.
Вариант самостоятельного размещения позволяет использовать панель инструментов SwanLab в оффлайне.
Установите параметры logir
и mode
в swanlab.init для оффлайн отслеживания:
...
swanlab.init(
logdir='./logs',
mode='local',
)
...
-
Параметр
mode
установить вlocal
, чтобы отключить синхронизацию экспериментов с облаком -
Параметр
logdir
устанавливается по желанию, он определяет, где сохраняются журналы SwanLab (по умолчанию в папкеswanlog
)- Журналы создаются и обновляются в процессе отслеживания экспериментов, запуск оффлайн-доски также будет основан на этих журналах
Остальные части настроек идентичны облачному использованию.
Откройте терминал и выполните следующую команду для запуска панели управления SwanLab:
swanlab watch ./logs
После запуска, SwanLab предоставит вам локальную ссылку (по умолчанию http://127.0.0.1:5092)
Посетите эту ссылку, чтобы просматривать эксперименты через оффлайн доску.
Используйте фреймворки вместе с SwanLab, узнайте больше об интеграции.
⚡️ PyTorch Lightning
Создайте SwanLabLogger
, затем передайте его в параметр logger
у Trainer
, чтобы SwanLab записывал метрики обучения.
from swanlab.integration.pytorch_lightning import SwanLabLogger
import importlib.util
import os
import pytorch_lightning as pl
from torch import nn, optim, utils
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
encoder = nn.Sequential(nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 3))
decoder = nn.Sequential(nn.Linear(3, 128), nn.ReLU(), nn.Linear(128, 28 * 28))
class LitAutoEncoder(pl.LightningModule):
def __init__(self, encoder, decoder):
super().__init__()
self.encoder = encoder
self.decoder = decoder
def training_step(self, batch, batch_idx):
# training_step определяет цикл обучения.
# это не связано с forward
x, y = batch
x = x.view(x.size(0), -1)
z = self.encoder(x)
x_hat = self.decoder(z)
loss = nn.functional.mse_loss(x_hat, x)
# Логирование в SwanLab (если установлен) по умолчанию
self.log("train_loss", loss)
return loss
def test_step(self, batch, batch_idx):
# test_step определяет цикл тестирования.
# это не связано с forward
x, y = batch
x = x.view(x.size(0), -1)
z = self.encoder(x)
x_hat = self.decoder(z)
loss = nn.functional.mse_loss(x_hat, x)
# Логирование в SwanLab (если установлен) по умолчанию
self.log("test_loss", loss)
return loss
def configure_optimizers(self):
optimizer = optim.Adam(self.parameters(), lr=1e-3)
return optimizer
# инициализация автоэнкодера
autoencoder = LitAutoEncoder(encoder, decoder)
# настройка данных
dataset = MNIST(os.getcwd(), train=True, download=True, transform=ToTensor())
train_dataset, val_dataset = utils.data.random_split(dataset, [55000, 5000])
test_dataset = MNIST(os.getcwd(), train=False, download=True, transform=ToTensor())
train_loader = utils.data.DataLoader(train_dataset)
val_loader = utils.data.DataLoader(val_dataset)
test_loader = utils.data.DataLoader(test_dataset)
swanlab_logger = SwanLabLogger(
project="swanlab_example",
experiment_name="example_experiment",
cloud=False,
)
trainer = pl.Trainer(limit_train_batches=100, max_epochs=5, logger=swanlab_logger)
trainer.fit(model=autoencoder, train_dataloaders=train_loader, val_dataloaders=val_loader)
trainer.test(dataloaders=test_loader)
🤗HuggingFace Transformers
Создайте SwanLabCallback
, затем передайте его в параметр callbacks
у Trainer
, чтобы SwanLab записывал метрики обучения.
import evaluate
import numpy as np
import swanlab
from swanlab.integration.huggingface import SwanLabCallback
from datasets import load_dataset
from transformers import AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
dataset = load_dataset("yelp_review_full")
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
tokenized_datasets = dataset.map(tokenize_function, batched=True)
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))
metric = evaluate.load("accuracy")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)
training_args = TrainingArguments(
output_dir="test_trainer",
report_to="none",
num_train_epochs=3,
logging_steps=50,
)
swanlab_callback = SwanLabCallback(experiment_name="TransformersTest", cloud=False)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
callbacks=[swanlab_callback],
)
trainer.train()
MMEngine(MMDetection и др.)
Интегрируйте SwanlabVisBackend
, разработанный специально для MMEngine, чтобы автоматически записывать метрики обучения в SwanLab.
Добавьте следующий фрагмент кода в файл вашей конфигурации MM для начала обучения.
custom_imports = dict(imports=["swanlab.integration.mmengine"], allow_failed_imports=False)
vis_backends = [
dict(
type="SwanlabVisBackend",
save_dir="runs/swanlab",
init_kwargs={
"project": "swanlab-mmengine",
},
),
]
visualizer = dict(
type="Visualizer",
vis_backends=vis_backends,
)
Ultralytics
Интеграция SwanLab с Ultralytics очень проста; просто используйте функцию add_swanlab_callback
:
from ultralytics import YOLO
from swanlab.integration.ultralytics import add_swanlab_callback
model = YOLO("yolov8n.yaml")
model.load()
# Добавление обратного вызова swanlab
add_swanlab_callback(model)
model.train(
data="./coco.yaml",
epochs=50,
imgsz=320,
)
-
☁️ Поддержка онлайн использования: С помощью SwanLab можно легко сохранять и синхронизировать эксперименты в облаке, что позволяет удаленно следить за прогрессом обучения, управлять историческими проектами, делиться ссылками на эксперименты, отправлять уведомления в реальном времени и просматривать эксперименты на разных устройствах. Tensorboard же является оффлайн-инструментом для отслеживания экспериментов.
-
👥 Мульти-пользовательская сотрудничество: Во время многопользовательского, межкомандного сотрудничества в машинном обучении, с помощью SwanLab можно легко управлять проектами нескольких пользователей, делиться ссылками на эксперименты и общаться в разных условиях. Tensorboard в основном рассчитан на одиночное использование и плохо подходит для коллективной работы и совместного использования экспериментов.
-
💻 Постоянная, централизованная панель мониторинга: Где вы ни обучали бы модели, будь то на локальной машине, в лабораторном кластере или в GPU-инстансах публичного облака, ваши результаты будут записаны в единую централизованную панель мониторинга. Используя TensorBoard, вам придется тратить время на копирование и управление TFEvent-файлами с разных машин.
-
💪 Более мощная таблица: В SwanLab можно просматривать, искать и фильтровать результаты разных экспериментов с помощью таблицы. Это позволяет легко просматривать тысячи версий моделей и находить наилучшие для разных задач производительности модели. TensorBoard не подходит для крупных проектов.
-
Weights and Biases — это проприетарная MLOps платформа, которую необходимо использовать только в режиме онлайн
-
SwanLab поддерживает как онлайн использование, так и бесплатное, с открытым кодом, самостоятельное размещение
- GitHub Issues: ошибки и проблемы, возникающие при использовании SwanLab
- Электронная почта поддержки: обратная связь по вопросам использования SwanLab
- WeChat группа: обсуждение вопросов использования SwanLab, обмен новинками в области технологий ИИ
Если вам нравится использовать SwanLab в своей работе, добавьте бейдж SwanLab в ваш README:
[![swanlab](https://img.shields.io/badge/powered%20by-SwanLab-438440)](https://github.com/swanhubx/swanlab)
Если SwanLab оказалась полезной для ваших научных изысканий, пожалуйста, цитируйте ее в следующем формате:
@software{Zeyilin_SwanLab_2023,
author = {Zeyi Lin, Shaohong Chen, Kang Li, Qiushan Jiang, Zirui Cai, Kaifang Ji and {The SwanLab team}},
doi = {10.5281/zenodo.11100550},
license = {Apache-2.0},
title = {{SwanLab}},
url = {https://github.com/swanhubx/swanlab},
year = {2023}
}
Задумываетесь о вкладе в развитие SwanLab? Сначала потратьте немного времени, чтобы ознакомиться с руководством по внесению вклада.
Мы также очень признательны за любую поддержку в виде распространения информации о SwanLab через социальные сети, участие в мероприятиях и конференциях, огромное спасибо!
Участники
Этот репозиторий лицензирован в соответствии с лицензией Apache 2.0