在深度學習的領域中,每一位研究員和工程師都面臨著一個共同的挑戰:如何有效管理無數次的模型訓練實驗?我們不斷調整超參數、更換模型架構、擴增資料集,過程中產生的Log紀錄、權重檔案與效能指標如果只依賴試算表或零散的文本文件,很快就會陷入混亂,不僅難以比較不同實驗的優劣,更讓「重現(Reproduce)」實驗結果成為一場噩夢。
雖然TensorBoard等工具為本地端的視覺化提供了基礎,但其功能在協作、雲端同步與大規模實驗管理上仍顯不足。此時,Weights & Biases(其英文縮寫爲Wandb) 作為一個專為機器學習打造的實驗追蹤平臺應運而生。它不僅僅是一個Log紀錄工具,更是一個全方位的實驗管理系統,能無縫整合到您的開發流程中,顯著提升研究與開發的效率、再現性與協作能力。本文將帶您深入瞭解Wandb的核心功能,從安裝設定到進階應用,展示它如何成為您深度學習專案中不可或缺的利器。
Wandb 核心優勢:為何它能超越傳統工具?
相較於TensorBoard或手動紀錄,Wandb這個library提供了多項革命性的功能,使其在現代機器學習工作流程中脫穎而出。
- 自動化的雲端同步與集中式dashboard:無論您是在本地電腦、實驗室的伺服器叢集,還是在GCP、AWS等雲端執行個體上訓練模型,Wandb都會將所有實驗紀錄自動上傳至雲端。您只需要一個網頁瀏覽器,就能在統一的dashboard上查看、比較所有實驗,徹底告別手動複製散落各處的TensorBoard檔案。
- 無可比擬的實驗再現性:一次成功的實驗不僅僅是最終的準確率。Wandb深知這一點,因此它不僅記錄loss、accuracy等指標,還會自動抓取:
- 超參數(hyperparameters):所有您定義的學習率、batch size、Dropout率等。
- 程式碼版本:自動關聯您的Git commit hash,確保您能準確還原每一次實驗的程式碼狀態。
- 系統環境:記錄作業系統、Python版本、CUDA版本以及如requirements.txt的套件依賴,以利追蹤(track)環境。
- 強大直觀的視覺化與分析表格:Wandb能將您記錄的所有指標轉化為互動式圖表。更強大的是它的表格功能,您可以對成千上萬次的實驗運行(Runs)進行搜尋、篩選、排序與分組,輕鬆找出在特定任務上表現最佳的模型版本,這是TensorBoard難以比擬的。
- 快速、靈活的框架整合:Wandb的整合過程極其簡單。只需在您的Python代碼中加入幾行,即可開始享受其強大功能。它原生支援所有主流的機器學習框架,包括PyTorch, TensorFlow, Keras, Scikit-learn, XGBoost等各式models。
安裝與設定入門
將Wandb整合到您的專案中僅需三個簡單步驟。
1. 註冊賬號並獲取 API 金鑰
首先,前往Wandb官方網站註冊一個免費賬號。登入後,點擊右上角的個人頭像,進入「Settings」,您會在頁面中找到一組專屬的「API key」,請將其複製下來。
2. 安裝 Wandb 套件
在您的Python環境中,透過pip安裝Wandblibrary:
pip install wandb
3. 在本地端登入
打開您的終端機,執行登入指令:
wandb login
此時,程式會提示您貼上先前複製的API金鑰。完成貼上並按下Enter後,您的憑證將會被安全地儲存在本地的~/.netrc檔案中,未來執行時無需再次登入。
Wandb 核心 API 與實戰應用
Wandb的核心API設計簡潔而強大,以下介紹幾個最關鍵的函式,這些對於每個負責實驗的人都至關重要。
核心函式 | 主要功能 |
---|---|
wandb.init() | 初始化(init)一個新的實驗運行 (Run),是所有操作的起點。 |
wandb.config | 類字典物件,用於儲存hyperparameters與實驗配置,例如config batch_size。 |
wandb.log() | 記錄train過程中的各項指標,如loss、accuracy等。 |
wandb.watch() | (主要用於PyTorch) 自動監控模型的梯度與model parameters分佈。 |
wandb.save() | 將模型權重(例如一個size為10MB的檔案)或其他重要檔案上傳至雲端儲存。 |
PyTorch 整合範例
在PyTorch中,我們通常手動在訓練迴圈中呼叫wandb.log()。
import wandb
import torch
import torch.nn as nn
import torch.optim as optim
import numpy
# 1. 初始化(init)一個新的 Wandb Run
# project是專案名稱,用於組織相關的實驗;也可在此指定實驗名稱
# config是一個字典,用於存放所有hyperparameters
wandb.init(
project="pytorch-demo",
config={
"learning_rate": 0.01,
"epochs": 10,
"batch_size": 128,
"dropout": 0.2,
}
)
# 將 config 物件賦值給一個變數,方便後續使用
# 這個config config物件非常方便
config = wandb.config
# ... (此處省略模型定義、資料載入等程式碼)
# Your models can take hyperparameters directly from config
model = YourModel(dropout=config.dropout)
optimizer = optim.Adam(model.parameters(), lr=config.learning_rate)
# 推薦使用dataloader來管理您的數據與數據集
your_datasets = YourCustomDataset()
train_loader = YourDataLoader(your_datasets, batch_size=config.batch_size)
# 2. (可選) 使用 wandb.watch() 監控模型
# log="all" 會記錄梯度直方圖與參數直方圖
wandb.watch(model, log="all", log_freq=100) # 每 100 個 batch 記錄一次
# 3. 在訓練迴圈中記錄指標
# 許多人習慣將訓練邏輯包裝在def train函式中
def train(model, train_loader, optimizer, config):
for epoch in range(config.epochs):
for batch_idx, (data, target) in enumerate(train_loader):
# ... (訓練步驟)
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
# 使用 wandb.log() 記錄你關心的指標
# 可以同時記錄多個值,甚至可以記錄圖片(image),例如一張從numpy陣列轉換的圖
wandb.log({
"epoch": epoch,
"loss": loss.item(),
"accuracy": calculate_accuracy(output, target) # 假設有此函式
})
# 4. 儲存模型並同步到 Wandb Cloud
torch.save(model.state_dict(), "model.pth")
wandb.save("model.pth")
wandb.finish() # 結束 Run
# 許多專案習慣將執行點放在 if __name__ == '__main__': 區塊中
# if __name__ == '__main__':
# # 假設有個包含self的類別
# trainer = Trainer()
# trainer.train(model, train_loader, optimizer, config)
Keras / TensorFlow 整合範例
對於Keras,整合過程更加簡潔,主要透過一個回呼函式(Callback)完成。
import wandb
from wandb.keras import WandbCallback
import tensorflow as tf
# 1. 初始化(init)Wandb
wandb.init(
project="keras-demo",
config={
"learning_rate": 0.005,
"epochs": 20,
"batch_size": 64,
}
)
config = wandb.config
# ... (此處省略模型定義、資料載入等程式碼)
model = YourKerasModel()
# 此處設定了優化器、損失函數等重要參數
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 2. 將 WandbCallback() 加入 callbacks 列表
# WandbCallback 會自動記錄 model.compile() 中定義的 loss 和 metrics
model.fit(x_train, y_train,
epochs=config.epochs,
batch_size=config.batch_size,
validation_data=(x_test, y_test),
callbacks=[WandbCallback()])
wandb.finish()
探索 Wandb 雲端儀錶板
當您執行train程式後,Wandb會在終端機提供一個專屬的URL連結,導向其網站。點擊後即可進入功能豐富的dashboard,主要包含以下幾個頁面:
- Overview:顯示該次執行的總覽,包括執行狀態、程式碼連結(Git)、超參數設定(Config)以及最終的效能結果(Summary)。
- Charts:核心視覺化頁面。所有透過wandb.log()記錄的指標都會在這裡以互動式圖表呈現,您可以自訂圖表座標軸、平滑度,並輕鬆比較多個實驗的曲線。其dashboard介面也持續在更新(例如在May 16前後就有過調整)。
- System:自動記錄的系統資源使用情況,包含CPU/GPU使用率、記憶體佔用(size)、GPU溫度、網路傳輸等,對於分析效能瓶頸極有幫助。
- Model:若使用了wandb.watch(),此頁面會顯示模型的網路架構圖,以及每一層的參數數量與輸出形狀。
- Logs:完整複製您程式在終端機中的所有輸出訊息,方便回溯除錯。
- Files:存放與此次執行相關的所有檔案,例如您使用wandb.save()儲存的模型權重、Wandb自動生成的requirements.txt與config.yaml等。
常見問題 (FAQ)
Q1: Wandb 是否需要付費?
A1: Wandb對於個人使用者和學術研究是完全免費的。針對需要進階協作功能、私有部署或更嚴格權限管理的商業團隊,則提供付費的方案。
Q2: Wandb 和 TensorBoard 的主要區別是什麼?
A2: 主要區別在於:1) 雲端 vs. 本地:Wandb是雲端優先的平臺,天生適合協作與遠端存取;TensorBoard主要用於本地端視覺化。2) 追蹤廣度:Wandb自動追蹤程式碼版本、超參數與系統環境,再現性更強。3) 分析能力:Wandb的儀錶板在多實驗的比較、篩選、分組與報告生成上遠比TensorBoard強大。
Q3: 如果訓練環境沒有網路連線,還能使用 Wandb 嗎?
A3: 可以。您可以在無法連網的環境中設定Wandb為「離線模式」(offline mode)。Wandb會將所有紀錄暫存在本地的wandb資料夾中。待您的機器連上網路後,只需在該專案目錄下執行wandb sync <run_directory>指令,即可將本地暫存的數據上傳同步至雲端。
Q4: 如何在像 YOLOv5 這樣的大型現有專案中快速整合 Wandb?
A4: 許多開源專案(包括YOLOv5)都已內建了對Wandb的支援。通常,您只需要安裝Wandb (pip install wandb)並登入,然後在執行訓練的指令稿中加上特定的參數(例如–log-wandb)即可啟用。如果專案未直接支援,最簡單的方式是在其主要的訓練程式碼檔案開頭加入import wandb和wandb.init(…),即可立即開始追蹤。
總結
Wandb遠不止是一個參數視覺化工具,它是一個為提升機器學習開發效率而設計的整合式平臺。透過自動化的雲端同步、詳盡的實驗追蹤、強大的分析功能與簡易的整合方式,Wandb讓實驗管理從一項繁瑣的雜務,轉變為一個能激發洞見的探索過程。它弭平了本地開發與雲端協作之間的鴻溝,並為建立可信、可重現的機器學習模型提供了堅實的基礎。無論您是獨立研究者還是大型團隊的一員,將Wandb納入您的工具鏈,都將是一項回報豐厚的投資。
資料來源
- Weights & Biases 超越TensorBoard的深度學習訓練Log紀載工具
- 7.4 使用wandb可視化訓練過程— 深入淺出PyTorch
- Weights & Biases — ML實驗數據追蹤 – InfuseAI