![]()
AI 에이전트가 연구 실험을 대신 돌린다고 할 때, 생각보다 먼저 막히는 지점이 있다. 모델 호출이 아니다. GPU도 아니다. 실험 기록이다.
실험을 여러 개 돌리고, 어떤 config가 어떤 loss를 냈고, 실패한 run이 어디서 꺾였는지 다시 물어봐야 한다. 사람이 직접 대시보드를 열어보는 구조라면 그럭저럭 버틴다. 그런데 에이전트가 수십 개 실험을 돌리고, 다음 행동을 스스로 고르려면 이야기가 달라진다. 기록은 사람이 보기 좋은 화면이면서 동시에, 에이전트가 다시 질의할 수 있는 데이터베이스여야 한다.
Hugging Face의 Gradio 조직에서 공개한 Trackio는 이 지점을 꽤 정확히 찌릅니다. GitHub 설명은 “A lightweight, local-first, and free experiment tracking library from Hugging Face”다. 2026년 7월 26일 확인 기준으로 GitHub star는 1,597개, fork는 126개, PyPI 최신 버전은 0.33.0이다. Python 3.10 이상을 요구하고, 라이선스는 MIT다.
질문은 W&B를 이길 수 있느냐가 아니다
Trackio를 처음 보면 자연스럽게 Weights & Biases 대체재로 읽게 됩니다. README도 wandb.init, wandb.log, wandb.finish와 API 호환을 강조합니다. 기존 코드에서 이렇게 바꾸면 됩니다.
import trackio as wandb이 문장은 강합니다. 이미 W&B 방식으로 로깅하는 코드라면 전환 비용을 낮춰주기 때문이다. 하지만 Trackio의 더 중요한 질문은 “W&B보다 기능이 많은가?”가 아닙니다. 오히려 반대에 가깝습니다. Hugging Face 문서는 Trackio를 가볍고, 완전한 기능셋을 목표로 하지 않으며, core codebase가 3,000줄 미만인 Python 코드라고 설명합니다.
그러니까 포지션은 이쪽입니다. 모든 실험 관리 기능을 다 넣은 SaaS가 아니라, 에이전트와 사람이 같이 읽을 수 있는 최소 실험 로그 레이어. 이 관점으로 보면 Trackio의 설계 선택이 훨씬 잘 보입니다.
로컬 먼저, 클라우드는 나중에
Trackio의 첫 번째 원칙은 local-first입니다. 계정을 만들지 않아도 로그를 남길 수 있고, 기본 대시보드는 로컬에서 뜹니다. 로그는 SQLite 데이터베이스에 저장되고, 필요하면 Parquet으로 freeze할 수 있습니다.
여기서 SQLite가 중요합니다. SQLite는 단순히 “가벼운 저장소”가 아닙니다. 에이전트 입장에서는 바로 질의 가능한 상태 공간입니다. README는 trackio query project --project <name> --sql "SELECT ..." 같은 read-only SQL 질의를 안내합니다. trackio list, trackio get으로 부족하면 SQL로 내려가라는 이야기입니다.
사람에게는 대시보드가 편합니다. 에이전트에게는 CLI와 SQL이 편합니다. Trackio는 둘을 동시에 줍니다. 그래서 README 첫머리에 “humans and AI agents”라는 표현이 들어갑니다. 마케팅 문구처럼 보이지만, 설계가 실제로 그 방향을 향합니다.
대시보드는 사람이 보는 창, SQL은 에이전트가 보는 창
Trackio에는 Gradio 스타일 대시보드가 있습니다. metrics, media, tables, alerts를 볼 수 있고, 로컬뿐 아니라 Hugging Face Spaces나 self-hosted server에서도 띄울 수 있습니다.
![]()
재미있는 건 embed 기능입니다. Hugging Face Space에 Trackio dashboard를 올려두면 iframe으로 블로그나 문서에 붙일 수 있습니다. project, metrics, sidebar, theme, x_axis, smoothing 같은 query parameter로 보여줄 범위도 조절할 수 있습니다.
이건 연구 공유에 꽤 실용적입니다. 논문 부록이나 실험 노트에 “결과표 이미지”를 박아두는 대신, 특정 project와 metric만 보이는 live dashboard를 넣을 수 있습니다. 물론 공개 범위와 데이터 민감도는 따져야 합니다. Trackio 문서도 static Space snapshot은 public 데이터여야 한다고 분명히 말합니다.
에이전트 실험 루프에서 왜 유용한가
에이전트가 실험을 돌리는 장면을 하나 떠올려보면 됩니다. 예를 들어 LLM이 prompt, retrieval chunk size, reranker 여부를 바꿔가며 30개 실험을 돌립니다. 각 run마다 latency, accuracy, cost, error case를 남깁니다. 다음 실험을 고르려면 이런 질문을 해야 합니다.
- cost가 20% 이상 줄었는데 accuracy 손실이 1%p 이하인 run은 무엇인가?
- 특정 데이터셋 slice에서만 실패한 config는 무엇인가?
- 10 epoch 이후 loss spike가 난 run은 어디인가?
- 같은 prompt 계열 중 가장 안정적인 조합은 무엇인가?
사람은 대시보드에서 훑어볼 수 있습니다. 하지만 에이전트는 SQL로 바로 묻는 편이 낫습니다. Trackio가 “LLM-friendly”라고 말하는 이유가 여기 있습니다. 로그를 쌓는 도구이면서, 그 로그를 다시 에이전트가 읽고 다음 행동을 고를 수 있게 합니다.
이건 루프 엔지니어링 관점에서도 중요합니다. 에이전트 루프는 관찰(observe) 없이는 개선되지 않습니다. 실험 결과가 SaaS 화면 안에만 갇혀 있으면 모델이 직접 다루기 어렵습니다. 반대로 SQLite, CLI, Python API로 열려 있으면 “실험 → 기록 → 질의 → 다음 실험” 루프가 훨씬 짧아집니다.
비동기 로깅과 실패 내성이 실무 포인트다
README에서 눈에 띄는 부분은 throughput 설명입니다. trackio.log()는 non-blocking으로 in-memory queue에 append하고 바로 반환합니다. background thread가 0.5초마다 queue를 비워 로컬 SQLite에 씁니다. 그래서 학습 루프가 로그 때문에 멈추지 않는다는 설명입니다.
Hugging Face Space로 보낼 때도 batch로 밀어 넣습니다. README는 무료 tier Space 기준으로 단일 run에서 2,000개 로그를 8초 미만에 전달했고, 32개 thread에서 32,000개 로그를 약 14초 wall time에 전달했다고 적습니다. 제품 측 측정값이므로 독립 벤치마크처럼 받아들이면 안 됩니다. 그래도 설계 의도는 분명합니다. 로깅은 실험을 방해하지 않아야 하고, 네트워크가 잠깐 끊겨도 로컬 SQLite에 남았다가 재시도되어야 합니다.
이런 디테일은 에이전트 실험에서 더 중요합니다. 사람이 돌리는 실험은 중간에 보고 멈출 수 있습니다. 에이전트가 밤새 돌리는 실험은 실패를 늦게 발견합니다. 로깅 계층이 예외를 던져 본 실험을 죽이면 손해가 큽니다. Trackio는 Trackio 쪽 실패가 main experiment code를 죽이지 않도록 warning과 local buffering으로 degrade한다고 설명합니다.
무료와 self-hosted 사이의 현실적인 선택지
Trackio는 로컬, Hugging Face Spaces, self-hosted server를 모두 제공합니다. 기본은 로컬입니다. 협업이 필요하면 space_id를 넘겨 Hugging Face Space로 보낼 수 있고, 조직 내부 인프라가 필요하면 server_url로 self-hosted Trackio server를 가리킬 수 있습니다.
이 조합이 좋은 이유는 단순합니다. 처음부터 조직 SaaS를 도입하지 않아도 됩니다. 개인 실험은 로컬 SQLite로 시작하고, 공유할 가치가 생기면 Space로 sync하고, 보안 요구가 있으면 self-hosting을 검토하면 됩니다.
다만 한계도 분명합니다. README의 비교표 기준으로 Trackio는 core experiment tracking, dashboard, media, tables, system metrics, alerts, hosted sharing, reports 쪽은 지원하지만, hyperparameter sweeps와 artifact registry는 제공하지 않는다고 표시합니다. W&B의 전체 플랫폼을 대체한다고 보기보다는, 가볍게 시작해서 에이전트가 읽을 수 있게 열어둔 실험 추적 레이어로 보는 편이 맞습니다.
제가 보는 핵심은 “관찰 가능한 실험 루프”다
Trackio가 흥미로운 이유는 “무료 W&B”라서가 아닙니다. 그 프레임으로만 보면 기능 비교표에서 끝납니다.
저는 이 프로젝트를 에이전트 시대의 실험 로그 포맷으로 보는 쪽이 더 맞다고 봅니다. 앞으로 에이전트는 코드를 고치고, benchmark를 돌리고, prompt를 바꾸고, 실패 케이스를 모아 다시 실험합니다. 그러려면 실험 결과가 사람이 보는 화면과 모델이 읽는 데이터 사이를 오가야 합니다. Trackio의 local-first SQLite, CLI query, Python API, Gradio dashboard 조합은 이 요구에 꽤 잘 맞습니다.
물론 아직 beta입니다. README는 DB schema가 바뀔 수 있다고 말합니다. production 연구 파이프라인에 바로 박기 전에는 schema 안정성, 권한 모델, Space 공개 범위, self-hosted 운영 방식을 확인해야 합니다. 하지만 개인 연구, 에이전트 실험, 작은 팀의 반복 실험 로그에는 바로 써볼 만한 형태입니다.
특히 에이전트에게 실험을 맡기는 분들은 이 질문을 해볼 필요가 있습니다. “내 에이전트는 실패한 실험을 다시 읽을 수 있는가?” 못 읽는다면, 그건 아직 루프가 아닙니다. 그냥 자동 실행입니다.
더 실습해보고 싶은 분들께
Trackio 같은 도구는 결국 에이전트가 관찰하고, 기록하고, 다시 시도하는 루프를 짧게 만드는 문제와 맞닿아 있습니다. 이런 흐름을 직접 손으로 다뤄보고 싶다면 코난쌤의 책 『이게 되네? 오픈클로 미친 활용법 50제』와 강의 「모두를 위한 루프 엔지니어링」를 같이 참고하시면 좋습니다. 도구 이름보다 중요한 건, 실패를 다음 행동으로 바꾸는 구조를 만드는 일이기 때문입니다.
링크
- GitHub: gradio-app/trackio
- 문서: Hugging Face Trackio docs
- PyPI: trackio
- Trackio Laboratory: trackio-laboratory.hf.space