🔥SwanLab オンライン版 · 📃 ドキュメント · 問題を報告 · 提案フィードバック · 更新ログ
👋 私たちのWeChatグループに参加しよう
SwanLabは、オープンソースで軽量なAI実験トラッキングツールであり、実験をトラッキング、比較、協力するためのプラットフォームを提供します。
SwanLabは、ユーザーフレンドリーなAPIと美しいインターフェースを提供し、超パラメータのトラッキング、指標の記録、オンラインコラボレーション、実験リンクの共有などの機能を組み合わせ、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. 💻 自己ホスティングのサポート: オフラインでの使用をサポートし、自己ホスト版でもダッシュボードを確認し、実験を管理できます。
Important
プロジェクトをスターしてください。GitHubからすべてのリリース通知を遅延なく受け取れます~ ⭐️
SwanLabのオンラインデモを見てみましょう:
ResNet50 猫犬分類 | Yolov8-COCO128 物体検出 |
---|---|
簡単なResNet50モデルを使用して、猫と犬のデータセットでの画像分類タスクをトラッキングします。 | Yolov8を使ってCOCO128データセットで物体検出タスクを行い、トレーニングの超パラメータと指標をトラッキングします。 |
Qwen2 指示微調整 | LSTM Google 株価予測 |
---|---|
Qwen2大規模言語モデルの指示微調整トレーニングをトラッキングし、簡単な指示に従います。 | 簡単なLSTMモデルを使用してGoogle株価データセットでトレーニングし、将来の株価を予測します。 |
pip install swanlab
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ダッシュボードをオフラインで表示することをサポートします。
swanlab.init
でlogdir
とmode
の2つのパラメータを設定することで、オフラインで実験をトラッキングできます:
...
swanlab.init(
logdir='./logs',
mode='local',
)
...
-
パラメータ
mode
をlocal
に設定し、実験をクラウドに同期しないようにします。 -
パラメータ
logdir
の設定はオプションで、SwanLabログファイルの保存場所を指定します(デフォルトではswanlog
フォルダに保存されます)。- ログファイルは実験をトラッキングする過程で作成され、更新されます。オフラインダッシュボードの起動もこれらのログファイルに基づきます。
その他の部分はクラウドでの使用と完全に一致します。
ターミナルを開き、次のコマンドを使用してSwanLabダッシュボードを起動します:
swanlab watch ./logs
実行が完了すると、SwanLabは1つのローカルURLリンクを提供します(デフォルトはhttp://127.0.0.1:5092)。
そのリンクにアクセスすると、ブラウザでオフラインダッシュボードを使用して実験を確認できます。
お気に入りのフレームワークをSwanLabと組み合わせて使用します。さらに多くの統合。
⚡️ PyTorch Lightning
SwanLabLogger
を使用してサンプルを作成し、Trainer
のlogger
パラメータに渡すことで、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
を使用してサンプルを作成し、Trainer
のcallbacks
パラメータに渡すことで、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など)
SwanLabをMMEngineに特化したSwanlabVisBackend
として統合することで、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の使用に関する問題を共有し、最新のAI技術を共有します。
SwanLabを仕事で使用している場合は、READMEにSwanLabバッジを追加してください:
[![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 Licenseオープンソースライセンスに従います。