Skip to content

Latest commit

 

History

History
485 lines (333 loc) · 25.3 KB

README_RU.md

File metadata and controls

485 lines (333 loc) · 25.3 KB

Обзор

Содержание


👋🏻 Что такое 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 без задержек ~ ⭐️

star-us


📃 Онлайн демонстрация

Посмотрите онлайн демонстрацию SwanLab:

ResNet50 Классификация по категориям "Кошки и собаки" Yolov8-COCO128 Обнаружение объектов
Отслеживание задачи классификации изображений с использованием простой модели ResNet50 на датасете "Кошки и собаки". Обнаружение объектов с использованием Yolov8 на датасете COCO128, отслеживание гиперпараметров обучения и метрик.
Тонкая настройка Qwen2 Прогнозирование акций Google с помощью LSTM
Отслеживание тонкой настройки Qwen2 модели, выполняющей простые инструкции. Обучение модели LSTM на датасете цен акций Google для прогнозирования будущих значений цен.

Больше примеров


🏁 Быстрый старт

1. Установка

pip install swanlab

2. Вход и получение API ключа

  1. Бесплатная регистрация

  2. Войти, скопировать ваш API ключ из настроек пользователя > API Key

  3. Откройте терминал и введите:

swanlab login

Когда система запросит, введите ваш API ключ, нажмите Enter, чтобы завершить вход.

3. Интеграция SwanLab с вашим кодом

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.

MNIST


💻 Самостоятельное размещение

Вариант самостоятельного размещения позволяет использовать панель инструментов 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,
)

🆚 Сравнение с привычными инструментами

Tensorboard vs SwanLab

  • ☁️ Поддержка онлайн использования: С помощью SwanLab можно легко сохранять и синхронизировать эксперименты в облаке, что позволяет удаленно следить за прогрессом обучения, управлять историческими проектами, делиться ссылками на эксперименты, отправлять уведомления в реальном времени и просматривать эксперименты на разных устройствах. Tensorboard же является оффлайн-инструментом для отслеживания экспериментов.

  • 👥 Мульти-пользовательская сотрудничество: Во время многопользовательского, межкомандного сотрудничества в машинном обучении, с помощью SwanLab можно легко управлять проектами нескольких пользователей, делиться ссылками на эксперименты и общаться в разных условиях. Tensorboard в основном рассчитан на одиночное использование и плохо подходит для коллективной работы и совместного использования экспериментов.

  • 💻 Постоянная, централизованная панель мониторинга: Где вы ни обучали бы модели, будь то на локальной машине, в лабораторном кластере или в GPU-инстансах публичного облака, ваши результаты будут записаны в единую централизованную панель мониторинга. Используя TensorBoard, вам придется тратить время на копирование и управление TFEvent-файлами с разных машин.

  • 💪 Более мощная таблица: В SwanLab можно просматривать, искать и фильтровать результаты разных экспериментов с помощью таблицы. Это позволяет легко просматривать тысячи версий моделей и находить наилучшие для разных задач производительности модели. TensorBoard не подходит для крупных проектов.

Weights and Biases vs SwanLab

  • Weights and Biases — это проприетарная MLOps платформа, которую необходимо использовать только в режиме онлайн

  • SwanLab поддерживает как онлайн использование, так и бесплатное, с открытым кодом, самостоятельное размещение


👥 Сообщество

Сообщество и поддержка

  • GitHub Issues: ошибки и проблемы, возникающие при использовании SwanLab
  • Электронная почта поддержки: обратная связь по вопросам использования SwanLab
  • WeChat группа: обсуждение вопросов использования SwanLab, обмен новинками в области технологий ИИ

Бейдж для README SwanLab

Если вам нравится использовать SwanLab в своей работе, добавьте бейдж SwanLab в ваш README:

swanlab

[![swanlab](https://img.shields.io/badge/powered%20by-SwanLab-438440)](https://github.com/swanhubx/swanlab)

Цитирование 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? Сначала потратьте немного времени, чтобы ознакомиться с руководством по внесению вклада.

Мы также очень признательны за любую поддержку в виде распространения информации о SwanLab через социальные сети, участие в мероприятиях и конференциях, огромное спасибо!

Загрузить Icon

SwanLab-Icon-SVG


Участники


📃 Лицензия

Этот репозиторий лицензирован в соответствии с лицензией Apache 2.0