介紹 Trackio:來自 Hugging Face 的輕量級實驗跟蹤庫
長話短說 (TL;DR):Trackio 是一個全新的、開源免費的實驗跟蹤 Python 庫,它提供了一個本地儀表板,並與 Hugging Face Spaces 無縫整合,方便共享和協作。由於
trackio
是 wandb
的直接替代品,你可以使用你已經熟悉的語法開始!
背景
如果你訓練過自己的機器學習模型,就會知道在訓練期間跟蹤指標、引數和超引數,並在之後將它們視覺化以更好地理解訓練過程是多麼重要。
大多數機器學習研究人員使用特定的實驗跟蹤庫來完成這項工作。然而,這些庫可能需要付費、設定複雜,或者缺乏快速實驗和共享所需的靈活性。
我們為什麼轉向 Trackio
在 Hugging Face,我們的科研團隊已經開始在我們的研究專案中使用 Trackio,並且我們發現它比其他跟蹤解決方案有幾個關鍵優勢:
易於共享和嵌入:Trackio 使得與同事分享訓練進度或使用 iframe 將圖表直接嵌入部落格文章和文件中變得異常簡單。當你想展示特定的訓練曲線或指標,而不需要其他人註冊賬戶或瀏覽複雜的儀表板時,這一點尤其有價值。
標準化和透明度:像 GPU 能耗這樣的指標對於跟蹤並與社群共享非常重要,這樣我們就能更好地瞭解模型訓練的能源需求和環境影響。使用 Trackio,它可以直接從 nvidia-smi
命令獲取資訊,這使得量化和比較能耗以及將其新增到模型卡片中變得容易。
資料可訪問性:與某些將資料鎖定在專有 API 後的跟蹤工具不同,Trackio 使得提取和分析記錄的資料變得非常直接。這對於需要執行自定義分析或將訓練指標整合到其研究工作流程中的研究人員至關重要。
實驗的靈活性:Trackio 的輕量級設計使我們能夠在訓練過程中輕鬆實驗新的跟蹤功能。例如,我們可以在記錄張量時決定何時將張量從 GPU 移動到 CPU,這在需要跟蹤模型/中間狀態而不影響效能時,顯著提高了訓練吞吐量。
使用 Trackio
那麼,Trackio 是什麼,以及如何使用它呢?Trackio 是一個開源 Python 庫,它能讓你跟蹤任何指標,並使用本地的 Gradio 儀表板將其視覺化。你還可以將這個儀表板同步到 Hugging Face Spaces,這意味著你可以透過分享一個 URL 輕鬆地與其他使用者共享儀表板。由於 Spaces 可以是私有的或公共的,這意味著你可以公開共享儀表板,或者僅在你的 Hugging Face 組織成員內部共享。
安裝
你可以使用 pip 安裝 trackio
pip install trackio
或者,如果你更喜歡使用 uv
uv pip install trackio
用法
trackio
被設計為像 wandb
這樣的實驗跟蹤庫的直接替代品。其 API 與 wandb.init
、wandb.log
和 wandb.finish
相容,因此你可以在程式碼中簡單地將 trackio
匯入為 wandb
。
- import wandb
+ import trackio as wandb
這裡是一個例子
import trackio
import random
import time
runs = 3
epochs = 8
def simulate_multiple_runs():
for run in range(runs):
trackio.init(project="fake-training", config={
"epochs": epochs,
"learning_rate": 0.001,
"batch_size": 64
})
for epoch in range(epochs):
train_loss = random.uniform(0.2, 1.0)
train_acc = random.uniform(0.6, 0.95)
val_loss = train_loss - random.uniform(0.01, 0.1)
val_acc = train_acc + random.uniform(0.01, 0.05)
trackio.log({
"epoch": epoch,
"train_loss": train_loss,
"train_accuracy": train_acc,
"val_loss": val_loss,
"val_accuracy": val_acc
})
time.sleep(0.2)
trackio.finish()
simulate_multiple_runs()
視覺化結果
記錄完實驗後,你可以啟動儀表板來視覺化你的結果。在終端中執行以下命令:
trackio show
或者,從 Python 啟動它
import trackio
trackio.show()
你也可以指定一個專案名稱
trackio show --project "my project"
或在 Python 中
trackio.show(project="my project")
透過 🤗 Spaces 共享
要將你的本地儀表板同步到 Hugging Face Spaces,只需向 init
傳遞一個 space_id
trackio.init(project="fake-training", space_id="org_name/space_name")
如果你在 Spaces 上託管你的儀表板,你可以簡單地分享 URL 或使用 iframe 將其嵌入任何地方
<iframe src="https://org_name-space_name.hf.space/?project=fake-training&metrics=train_loss,train_accuracy&sidebar=hidden" width=600 height=600 frameBorder="0"></iframe>
由於 Spaces 可以是私有的或公共的,這意味著你可以公開分享儀表板,或者僅在你的 Hugging Face 組織成員內部共享——這一切都是免費的!
當你將 Trackio 儀表板同步到 Hugging Face Spaces 時,資料會記錄到 Spaces 上的一個臨時 Sqlite 資料庫中。因為如果你的 Space 重啟,這個資料庫會被重置,所以 Trackio 還會每 5 分鐘將 Sqlite 資料庫轉換為 Parquet 資料集,並將其備份到 Hugging Face 資料集。這意味著你可以隨時輕鬆地在 Hugging Face 資料集中視覺化你記錄的指標。
提示:你可以透過向 `trackio.init()` 傳遞 `dataset_id` 來設定這個資料集的名稱。
與 🤗 Transformers 和 🤗 Accelerate 整合
Trackio 與 transformers
和 accelerate
等 Hugging Face 庫原生整合,因此你只需最少的設定即可記錄指標。
使用 transformers.Trainer
import numpy as np
from datasets import Dataset
from transformers import Trainer, AutoModelForCausalLM, TrainingArguments
# Create a fake dataset
data = np.random.randint(0, 1000, (8192, 64)).tolist()
dataset = Dataset.from_dict({"input_ids": data, "labels": data})
# Train a model using the Trainer API
trainer = Trainer(
model=AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B"),
args=TrainingArguments(run_name="fake-training", report_to="trackio"),
train_dataset=dataset,
)
trainer.train()
使用 accelerate
from accelerate import Accelerator
accelerator = Accelerator(log_with="trackio")
accelerator.init_trackers("fake-training")
... # Prepare the model, dataloader, etc.
for step, batch in enumerate(dataloader):
... # Your training logic here
accelerator.log({"training_loss": loss}, step=step)
accelerator.end_training()
無需額外設定——即插即用,開始跟蹤。
設計原則
- API 與流行的實驗跟蹤庫相容,使得遷移到 Trackio 或從 Trackio 遷移都無縫銜接。
- 本地優先:日誌和儀表板預設在本地執行和持久化,並可選擇託管在 Hugging Face Spaces 上。
- 輕量級且可擴充套件:核心程式碼庫不到 1000 行 Python 程式碼,易於理解和修改。
- 免費和開源:所有功能,包括在 Hugging Face 上託管,都是免費的。
- 基於 🤗 Datasets 和 Spaces 構建,以實現穩健的資料處理和視覺化。
下一步
Trackio 目前故意保持輕量級,並處於測試階段。其他跟蹤工具中的一些功能,如工件管理或複雜的視覺化,目前尚不可用。如果你希望擁有這些功能,請在此處建立 issue:https://github.com/gradio-app/trackio/issues
鑑於 Trackio 的輕量級和開源特性,我們很樂意與機器學習社群合作,設計一個適合我們所有人的實驗跟蹤產品!