Hugging Face Trackio 实验指标记录实战:从本地 SQLite 到 HF Space 实时看板
【免费下载链接】skillsGive your agents the power of the Hugging Face ecosystem项目地址: https://gitcode.com/GitHub_Trending/skills7/skills
本文以 Hugging Face 轻量级实验追踪库 Trackio 为核心,系统讲解如何在模型训练中通过trackio.init()/trackio.log()/trackio.finish()记录指标,如何用space_id把指标同步到 Hugging Face Space 实现持久化看板,以及与 TRL Trainer 的report_to="trackio"深度集成方案。读完本文,你将掌握一套本地优先、可随时同步云端、且与 wandb 兼容的训练指标记录体系,并能在 Hugging Face Jobs 等远程训练场景中正确配置,避免指标因实例销毁而丢失。
Trackio 是什么
Trackio 是 Hugging Face 提供的轻量、免费的实验追踪库,采用本地优先(local-first)设计:默认情况下,指标写入本地 SQLite 数据库,并可在本机启动实时看板;当传入space_id时,指标会同步到 Hugging Face Space,从而获得可分享、可持久化的远程看板。其 API 与 wandb 兼容,可作为 wandb 的 drop-in 替换,无需修改既有调用习惯。
在本仓库中,Trackio 相关能力被沉淀在 huggingface-trackio 这一技能中,整体分为三个接口面:
| 任务 | 接口 | 参考文档 |
|---|---|---|
| 训练中记录指标 | Python API | references/logging_metrics.md |
| 训练中触发告警 | Python API | references/alerts.md |
| 训练中/后查询指标与告警 | CLI | references/retrieving_metrics.md |
本文聚焦第一个接口面:指标记录(logging metrics)。
安装
Trackio 可以通过 pip 或 uv 安装:
pip install trackio # 或 uv pip install trackio在仓库的训练示例脚本中,Trackio 被列为显式依赖。例如 train_sft_example.py 顶部使用 PEP 723 内联依赖声明:
# /// script # requires-python = ">=3.10" # dependencies = [ # "trl>=0.12.0", # "peft>=0.7.0", # "transformers>=4.36.0", # "accelerate>=0.24.0", # "trackio", # ] # ///这意味着通过uv run或hf_jobs提交脚本时,Trackio 会被自动安装;在视觉训练等场景的依赖清单中也同样声明了"trackio"(见 reliability_principles.md)。
核心 API:init / log / finish
基本用法
Trackio 的核心调用模型与 wandb 一致,分为三步:初始化、反复记录、收尾。
import trackio # Initialize a run trackio.init( project="my-project", config={"learning_rate": 0.001, "epochs": 10} ) # Log metrics during training for epoch in range(10): loss = train_epoch() trackio.log({"loss": loss, "epoch": epoch}) # Finalize the run trackio.finish()关键函数
| 函数 | 作用 |
|---|---|
trackio.init(...) | 开启一次新的追踪 run |
trackio.log(dict) | 记录指标(训练过程中反复调用) |
trackio.finish() | 结束 run,确保所有指标被保存(远程场景下会 drain 掉待同步指标) |
trackio.show() | 启动本地看板 |
trackio.sync(...) | 将本地项目同步到 HF Space |
从仓库的技能定义(SKILL.md)可以看到,官方推荐的指标记录流程即:用trackio.init()初始化 → 用trackio.log()或 TRL 的report_to="trackio"记录 → 用trackio.finish()收尾。
trackio.init() 参数详解
trackio.init()是配置一次实验 run 的核心入口,参数如下:
trackio.init( project="my-project", # 项目名(将多个 run 归组) name="run-name", # 可选:本次 run 的名称 config={...}, # 要记录的超参数与配置 space_id="username/trackio", # 可选:同步到 HF Space,获得远程看板 private=True, # 可选:自动创建的 Space 是否私有。 # 默认 PUBLIC(除非你的组织默认私有) bucket_id="username/my-bucket", # 可选:固定指标存储所用的 HF Bucket。 # 默认:由 space_id 自动推导 group="experiment-group", # 可选:将相关 run 归组 )参数语义补充说明:
- project:必填,用于把多个 run 聚合到同一个项目下,是后续 CLI 查询(
trackio list projects、trackio get project --project <name>)的组织单元; - name:可选,给当前 run 一个便于识别的名称,例如
baseline-lr2e5;不传时 Trackio 会生成默认名称; - config:记录的超参数与元信息(模型名、数据集、学习率、epochs 等),这些信息会随 run 一起保存在数据库中,并可在看板中用于对比;
- space_id:
用户名/space名形式。传了才会启用远程同步;如果对应 Space 不存在,Trackio 会自动创建; - private:仅影响自动创建的 Space 的可见性;若 Space 已存在,则该参数被忽略;
- bucket_id:用于固定指标存储所用的 HF Bucket;不传时由
space_id自动推导; - group:把相关 run 在侧边栏中归组展示,便于按实验类型或超参数对比(详见下文"对 run 归组")。
本地看板与远程看板
本地模式(默认)
默认情况下,Trackio 把指标存储在本地 SQLite 数据库中,并在本机启动看板:
trackio.init(project="my-project") # ... training ... trackio.finish() # 启动本地看板 trackio.show()也可以在终端中启动:
trackio show --project my-projectshow命令还支持--theme自定义主题、--color-palette自定义颜色、--mcp-server启用 MCP server 模式等选项(详见 retrieving_metrics.md)。
远程模式(HF Space)
传入space_id后,指标会同步到 Hugging Face Space,获得持久化、可分享的看板:
trackio.init( project="my-project", space_id="username/trackio", # 若 Space 不存在会自动创建 private=True, # Space 默认 PUBLIC;需要可分享看板时可不传 )⚠️远程训练(云端 GPU、HF Jobs 等)必须使用
space_id:远程实例是临时的,本地存储会在实例终止时丢失。如果不希望指标公开,同时传入private=True——因为自动创建的 Space 默认是公开的(除非你的组织默认私有);若 Space 已存在,该参数会被忽略。
这一警告在仓库的 trackio_guide.md 中有更详细的展开:Jobs 训练发生在临时的云端 runner 上(而非本地机器),Trackio 通过 Space 实时同步指标;没有 Space,指标会在任务结束时丢失;而 Space 看板可以永久保存训练指标。
本地同步到远程
如果已经在本地积累了项目数据,可以用sync将本地项目同步到某个 Space:
trackio.sync(project="my-project", space_id="username/my-experiments")对应 CLI 形式为trackio sync --project <name> --space-id <space_id>,还支持--private创建私有 Space、--force覆盖已有数据库(见 retrieving_metrics.md)。
wandb 兼容性:一行代码替换
Trackio 与 wandb 的 API 兼容,可以直接作为 drop-in 替换:
import trackio as wandb wandb.init(project="my-project") wandb.log({"loss": 0.5}) wandb.finish()只需把import wandb改为import trackio as wandb,原有调用即可无缝迁移,且数据默认留在本地,无需注册账号。
与 TRL Trainer 集成
在 TRL 训练器中使用report_to="trackio"即可自动记录指标,无需手动在训练循环里打点:
from trl import SFTConfig, SFTTrainer import trackio trackio.init( project="sft-training", space_id="username/trackio", private=True, # Space 默认公开;需要可分享看板时不传 config={"model": "Qwen/Qwen2.5-0.5B", "dataset": "trl-lib/Capybara"} ) config = SFTConfig( output_dir="./output", report_to="trackio", # 自动指标记录 # ... 其他配置 ) trainer = SFTTrainer(model=model, args=config, ...) trainer.train() trackio.finish()仓库中的真实集成范例
仓库的完整 SFT 训练脚本 train_sft_example.py 展示了生产级用法——除了report_to="trackio"外,还同时设置了project与run_name,直接映射到 Trackio 的项目与 run 名称:
# Monitoring report_to="trackio", # Integrate with Trackio project="meaningful_project_name", # project name for the training name (trackio) run_name="baseline-run", #Descriptive name for this training run训练结束后调用trackio.finish()确保指标被完整同步,然后打印看板地址:
# Finish Trackio tracking trackio.finish() print("✅ Complete! Model at: https://huggingface.co/username/qwen-capybara-sft") print("📊 View metrics at: https://huggingface.co/spaces/username/trackio")同样的集成模式也出现在 train_dpo_example.py(DPOTrainer)和 train_grpo_example.py(GRPOTrainer)中,说明report_to="trackio"对 TRL 的 SFT / DPO / GRPO 三大训练器均适用。此外 unsloth_sft_example.py 展示了将 Trackio 与 TensorBoard 同时启用(report_to=["tensorboard", "trackio"])的组合用法,并通过--trackio-space命令行参数设置TRACKIO_SPACE_ID环境变量。
在 Hugging Face Jobs 上的推荐配置
当通过hf_jobs在远程 GPU 上运行时,trackio_guide.md 给出了完整流程:
- 添加依赖:在
dependencies中加入"trackio"; - 准备 Space(一次性):推荐直接传
space_id让 Trackio 自动创建;也可手动通过 Hub UI 或hf repos create my-trackio-dashboard --type space --space-sdk gradio创建; - 初始化:
trackio.init(project="my-training", space_id="username/trackio", private=True, config={...})——对 Jobs 而言space_id是关键参数; - 配置 TRL:
SFTConfig(report_to="trackio", ...); - 收尾:
trainer.train()之后调用trackio.finish()确保最终指标被同步。
同时注意,通过secrets传递HF_TOKEN是 Space 自动创建与 Bucket 写入的前提:
hf_jobs("uv", { "script": "...", "secrets": { "HF_TOKEN": "$HF_TOKEN" # 支持 Space 创建与 Hub 推送 } })自动记录与手动记录的内容
TRL / Transformers 集成时自动记录
使用 TRL/Transformers 集成时,Trackio 自动捕获:
- 训练损失(training loss)
- 学习率(learning rate)
- 评估指标(eval metrics)
- 训练吞吐量(training throughput)
在检测到 NVIDIA GPU 且安装了nvidia-ml-py的环境下(标准的 Jobs GPU 规格即是如此),还会自动记录 GPU 利用率与显存占用(见 trackio_guide.md)。
手动记录任意数值指标
手动打点时,可以记录任何数值型指标:
trackio.log({ "train_loss": 0.5, "train_accuracy": 0.85, "val_loss": 0.4, "val_accuracy": 0.88, "epoch": 1 })数据落盘机制
对于远程场景,Trackio 的数据流是分层的(见 trackio_guide.md):
- 训练运行 → 指标以亚秒级小批量流式写入正在运行的 Space;
- Space 不可达或仍在构建 → 指标回落到 HF Bucket(默认由
space_id自动推导,也可用bucket_id=固定),约每 30 秒一次; - Space 看板 → 将 SQLite 数据库存放在 Bucket 中,并约每 15 秒摄取回落的指标;
- 任务完成 →
trackio.finish()排空所有待同步指标,确保全部持久化。
这一机制解释了为什么space_id在远程训练中如此重要:它是 Space 看板、Buckets 存储以及bucket_id推导三者之间的纽带。
对 run 归组(Grouping)
用group参数可以在看板侧边栏中把相关实验组织到一起,适合超参数扫描或对照实验:
# 按实验类型归组 trackio.init(project="my-project", name="baseline-v1", group="baseline") trackio.init(project="my-project", name="augmented-v1", group="augmented") # 按超参数归组 trackio.init(project="hyperparam-sweep", name="lr-0.001", group="lr_0.001") trackio.init(project="hyperparam-sweep", name="lr-0.01", group="lr_0.01")归组的典型用途是:同一项目下运行多个配置不同的实验时,通过group把它们在侧边栏中归类,便于横向对比(见 trackio_guide.md)。
配置最佳实践
配置项应保持精简——只记录对 run 间对比有用的信息:
trackio.init( project="qwen-sft-capybara", name="baseline-lr2e5", config={ "model": "Qwen/Qwen2.5-0.5B", "dataset": "trl-lib/Capybara", "learning_rate": 2e-5, "num_epochs": 3, "batch_size": 8, } )仓库推荐的默认模式总结如下(见 trackio_guide.md):
- Space ID:使用
{username}/trackio,默认 Space 名为trackio; - Run 命名:除非用户另有要求,用用户能识别的描述性名称命名 run;
- Config:保持最小化,除非用户要求,不自动捕获任务元数据;
- Grouping:仅当用户要求组织相关实验时才使用;
- 私有性:注意自动创建的 Space 默认公开,需要私密指标时传入
private=True。
在看板中嵌入指标
Space 看板支持通过查询参数嵌入网站:
<iframe src="https://username-trackio.hf.space/?project=my-project&metrics=train_loss,val_loss&sidebar=hidden" style="width:1600px; height:500px; border:0;"> </iframe>查询参数说明:
project:过滤到指定项目metrics:逗号分隔的指标名,控制展示哪些曲线sidebar:hidden或collapsedsmoothing:0-20,平滑滑块值xmin、xmax:X 轴范围
记录之后的闭环:CLI 查询与告警
记录只是实验追踪的第一步。仓库把"查询"和"告警"作为另外两个接口面,与本文的 logging 形成完整闭环:
- 查询指标:
trackio get metric --project <name> --run <name> --metric loss --json,支持--step、--around、--at-time、--window等按步/按时间窗过滤(详见 retrieving_metrics.md); - 告警:在训练代码中插入
trackio.alert(title=..., level=trackio.AlertLevel.WARN),告警会打印到终端、存入数据库、展示在看板,并可经 webhook 转发到 Slack/Discord(详见 alerts.md)。
对于 LLM Agent 自主跑实验的场景,SKILL.md 给出了推荐闭环:插入告警 → 后台启动训练 → 用trackio list alerts --project <name> --json --since <ts>轮询告警 → 用trackio get metric ...读取指标 → 根据结果调整超参并重新启动 run。
总结
Trackio 为 Hugging Face 生态提供了一条"零账号、本地优先、可远程"的训练指标记录路径:日常开发用trackio.init()+trackio.log()+trackio.finish()三步记录,配合trackio.show()本地看板即可满足需求;一旦进入 HF Jobs 等远程训练,务必传入space_id(必要时配合private=True)让指标落到 Space/Bucket,配合report_to="trackio"自动捕获损失、学习率、评估指标与吞吐量。本文对应的完整可运行示例位于 train_sft_example.py,TRL 集成要点可进一步查阅 trackio_guide.md。
【免费下载链接】skillsGive your agents the power of the Hugging Face ecosystem项目地址: https://gitcode.com/GitHub_Trending/skills7/skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考