Project Icon

SwanLab

开源AI实验跟踪工具 支持多框架集成及云端协作

SwanLab是一款开源的AI实验跟踪工具,支持跟踪超参数、记录指标、在线协作和分享实验链接。该工具可与PyTorch、TensorFlow等主流框架集成,同时支持离线模式和自托管。SwanLab提供用户友好的API和直观界面,适用于个人研究和团队项目,能够帮助研究人员高效管理、比较和协作AI实验。

概览

🔥SwanLab云端 · 📃文档 · 微信 · 报告问题 · 反馈 · 更新日志

许可证 最后提交 版本 pypi 下载量 问题
静态徽章 静态徽章

英文文档 中文文档
目录

目录


👋🏻 简介

SwanLab是一个开源、轻量级的AI实验跟踪工具,提供了一个用于跟踪、比较和协作实验的平台。

它提供了用户友好的API和decent的界面,结合了跟踪超参数、记录指标、在线协作和分享实验链接等功能。

以下是AI平台核心功能列表的中文版本:

1. 📊 实验指标和超参数跟踪:使用简洁的代码嵌入您的机器学习流程,并跟踪关键训练指标。

  • 灵活记录超参数和实验配置。
  • 支持的元数据类型:标量指标、图像、音频、文本等。
  • 支持的图表类型:线图、媒体图表(图像、音频、文本)等。
  • 自动记录:控制台日志、GPU硬件信息、Git信息、Python解释器、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指令微调LSTM谷歌股票预测
跟踪Qwen2大语言模型的指令微调训练,完成简单的指令遵循。在谷歌股价数据集上训练简单的LSTM模型,预测未来股价。

更多示例


🏁 快速开始

1.安装

pip install swanlab

2.登录并获取API密钥

  1. 免费注册

  2. 登录您的账户,进入用户设置 > API密钥并复制您的API密钥。

  3. 打开终端并输入

swanlab login

当提示时,输入您的API密钥并按回车完成登录。

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})

一切就绪! 访问SwanLab查看您的第一个SwanLab实验。

MNIST


💻 自托管

社区版支持离线查看SwanLab仪表板。

离线实验追踪

在swanlab.init中设置参数logdirmode以进行离线实验追踪:

...

swanlab.init(
    logdir='./logs',
    mode='local',
)

...
  • 参数mode设置为local,这会禁用将实验同步到云端。

  • 参数logdir的设置是可选的,它指定了保存SwanLab日志文件的位置(默认保存在swanlog文件夹中)。

  • 在追踪实验过程中会创建和更新日志文件,启动离线仪表板也将基于这些日志文件。

其他部分与云端使用完全一致。

打开离线仪表板

打开终端并使用以下命令来打开SwanLab仪表板:

swanlab watch ./logs

操作完成后,SwanLab将为您提供一个本地URL链接(默认为http://127.0.0.1:5092)。

访问此链接即可在浏览器仪表板中离线查看实验。


🚗 集成

将您喜欢的框架与SwanLab结合,更多集成

⚡️ PyTorch Lightning

使用SwanLabLogger创建一个实例,并将其传递给Trainerlogger参数,以使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)
        # 默认记录到TensorBoard(如果已安装)
        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)
        # 默认记录到TensorBoard(如果已安装)
        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创建一个实例,并将其传递给Trainercallbacks参数,以使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()


</details>

<details>
<summary>
  <strong> MMEngine(MMDetection等)</strong>
</summary>
<br>

将`SwanlabVisBackend`集成到MMEngine中,以启用SwanLab自动记录训练指标。

在MM配置文件中添加以下代码片段以开始训练:

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

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不仅支持在线使用,还提供开源、免费和自托管版本。


👥 社区

社区和支持

SwanLab README徽章

如果你喜欢在你的工作中使用SwanLab,请在你的README中添加SwanLab徽章:

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。谢谢!


贡献者

下载图标

SwanLab-Icon-SVG


📃 许可证

本仓库遵循Apache 2.0 许可证开源许可。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号