Trackio documentation
Lược đồ lưu trữ và truy vấn trực tiếp
Lược đồ lưu trữ và truy vấn trực tiếp
Trackio lưu trữ mỗi dự án trong một cơ sở dữ liệu SQLite riêng và có thể xuất dữ liệu đó sang parquet để đồng bộ hóa, Spaces tĩnh và phân tích trực tiếp. Trang này tài liệu hóa lược đồ SQLite trực tiếp, bố cục parquet dẫn xuất và lệnh trackio query mới để chạy SQL chỉ đọc.
Dữ liệu được lưu ở đâu
- Cơ sở dữ liệu dự án cục bộ nằm trong
TRACKIO_DIR, mặc định là~/.cache/huggingface/trackio. - Mỗi dự án được lưu trữ dưới dạng một tệp SQLite riêng biệt:
{project}.db. - Phương tiện và tệp đã tải lên nằm dưới
TRACKIO_DIR/media/. - Mỗi trace còn được ghi dưới dạng tệp phiên agent có thể hiển thị trên Hub tại
TRACKIO_DIR/traces/(trên Space, là tiền tốtraces/của bucket). Đây là sản phẩm hiển thị cho trình xem trace agent của Hub; bảngtracesvẫn là nguồn chính. Xem Traces. - Khi đồng bộ hóa lên Hugging Face, Trackio xuất các tệp parquet từ cơ sở dữ liệu SQLite trước khi tải lên.
Truy vấn Dữ Liệu Trực Tiếp
Sử dụng CLI khi bạn cần một truy vấn tổng quát mà trackio list hoặc trackio get chưa bao phủ:
trackio query project --project "my-project" --sql "SELECT run_name, MAX(step) AS last_step FROM metrics GROUP BY run_name ORDER BY last_step DESC"Thêm --json để có đầu ra có thể đọc được bằng máy:
trackio query project --project "my-project" --sql "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name" --jsonCùng một lệnh này hoạt động với một Space từ xa:
trackio query project --project "my-project" --sql "SELECT COUNT(*) AS num_alerts FROM alerts" --space username/my-space --jsontrackio query chỉ chấp nhận các truy vấn SELECT, WITH và PRAGMA schema an toàn, bao gồm việc đọc PRAGMA user_version.
Sơ đồ SQLite
Sơ đồ trực tiếp được định nghĩa trong trackio/sqlite_storage.py bởi SQLiteStorage.init_db().
metrics
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
timestamp | TEXT | ISO timestamp |
run_name | TEXT | Định danh chạy |
step | INTEGER | Bước huấn luyện |
metrics | TEXT | JSON blob chứa các giá trị metric được ghi log |
log_id | TEXT | Khóa khử trùng lặp tùy chọn được thêm vào bởi quy trình di trú cộng |
space_id | TEXT | Đánh dấu đồng bộ chờ tùy chọn được thêm vào bởi di trú cộng |
Chỉ mục:
idx_metrics_run_steptrên(run_name, step)idx_metrics_run_timestamptrên(run_name, timestamp)idx_metrics_log_idlà chỉ mục một phần duy nhất trênlog_id- Chỉ mục một phần
idx_metrics_pendingtrênspace_id
configs
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
run_name | TEXT | Định danh chạy |
config | TEXT | JSON blob chứa cấu hình chạy |
created_at | TEXT | ISO timestamp |
Chỉ mục và ràng buộc:
UNIQUE(run_name)idx_configs_run_nametrên(run_name)
system_metrics
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
timestamp | TEXT | ISO timestamp |
run_name | TEXT | Định danh chạy |
metrics | TEXT | JSON blob chứa các chỉ số hệ thống |
log_id | TEXT | Khóa khử trùng lặp tùy chọn được thêm vào bởi quy trình di trú cộng |
space_id | TEXT | Đánh dấu đồng bộ chờ tùy chọn được thêm vào bởi di trú cộng |
Chỉ mục:
idx_system_metrics_run_timestamptrên(run_name, timestamp)idx_system_metrics_log_idlà chỉ mục một phần duy nhất trênlog_id- Chỉ mục một phần
idx_system_metrics_pendingtrênspace_id
traces
| Cột | Loại | Ghi chú |
|---|---|---|
id | TEXT | Khóa chính |
run_id | TEXT | Định danh chạy ổn định |
timestamp | TEXT | Dấu thời gian ISO khi trace được ghi log |
run_name | TEXT | Chạy tên hiển thị |
step | INTEGER | Bước huấn luyện hoặc ghi log |
key | TEXT | Khóa được sử dụng trong payload của trackio.log() |
trace_index | INTEGER | Vị trí khi các vết được ghi lại dưới dạng danh sách |
messages | TEXT | Tin nhắn JSON theo phong cách OpenAI |
metadata | TEXT | Metadata trace JSON |
search_text | TEXT | Văn bản phẳng được sử dụng bởi tìm kiếm theo vết |
log_id | TEXT | Khóa khử trùng lặp nhật ký nguồn tùy chọn |
space_id | TEXT | Đánh dấu đồng bộ chờ tùy chọn |
spans | TEXT | Các span thực thi JSON; mặc định là [] |
Chỉ mục:
idx_traces_run_steptrên(run_id, step)idx_traces_run_timestamptrên(run_id, timestamp)idx_traces_searchtrênsearch_text
project_metadata
| Cột | Loại | Ghi chú |
|---|---|---|
key | TEXT | Khóa chính |
value | TEXT | Giá trị metadata |
pending_uploads
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
space_id | TEXT | Không gian đích |
run_name | TEXT | Tên chạy tùy chọn |
step | INTEGER | Bước tùy chọn |
file_path | TEXT | Đường dẫn cục bộ tuyệt đối |
relative_path | TEXT | Đường dẫn phương tiện tương đối |
created_at | TEXT | ISO timestamp |
cảnh báo
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
timestamp | TEXT | ISO timestamp |
run_name | TEXT | Định danh chạy |
title | TEXT | Tiêu đề cảnh báo |
text | TEXT | Nội dung cảnh báo tùy chọn |
level | TEXT | info, warn hoặc error |
step | INTEGER | Bước huấn luyện tùy chọn |
alert_id | TEXT | Khóa khử trùng lặp tùy chọn |
Chỉ mục:
idx_alerts_runtrên(run_name)idx_alerts_timestamptrên(timestamp)idx_alerts_alert_idlà chỉ mục một phần duy nhất trênalert_id
artifacts
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
name | TEXT | Tên artifact |
type | TEXT | Danh mục tự do như model hoặc dataset |
description | TEXT | Mô tả tùy chọn |
created_at | TEXT | ISO timestamp |
Chỉ mục và ràng buộc:
UNIQUE(name)
artifact_versions
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
artifact_id | INTEGER | Tham chiếu artifacts.id |
version | INTEGER | Số thứ tự tuần tự bắt đầu từ 0 |
manifest_digest | TEXT | Bản tóm tắt hex SHA-256 của JSON manifest chính |
manifest | TEXT | JSON blob liệt kê các mục manifest với path, digest, size và tùy chọn ref |
metadata | TEXT | Metadata JSON tùy chọn |
size_bytes | INTEGER | Tổng kích thước của các mục manifest của phiên bản (tổng của size) tính bằng byte |
producer_run_id | TEXT | Định danh tùy chọn của lần chạy tạo ra |
producer_run_name | TEXT | Tên tùy chọn của lần chạy tạo ra |
created_at | TEXT | ISO timestamp |
Chỉ mục và ràng buộc:
UNIQUE(artifact_id, version)UNIQUE(artifact_id, manifest_digest)
artifact_aliases
| Cột | Loại | Ghi chú |
|---|---|---|
artifact_id | INTEGER | Tham chiếu artifacts.id |
alias | TEXT | Tên alias như latest |
artifact_version_id | INTEGER | Tham chiếu artifact_versions.id |
Chỉ mục và ràng buộc:
PRIMARY KEY (artifact_id, alias)
run_artifact_links
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
run_id | TEXT | Định danh chạy tùy chọn |
run_name | TEXT | Tên chạy tùy chọn |
artifact_version_id | INTEGER | Tham chiếu artifact_versions.id |
direction | TEXT | input hoặc output |
created_at | TEXT | ISO timestamp |
Chỉ mục và ràng buộc:
CHECK(direction IN ('input', 'output'))idx_run_artifact_links_runtrên(run_id, run_name)idx_run_artifact_links_versiontrên(artifact_version_id)idx_run_artifact_links_uniquechỉ mục duy nhất trên(run_id, artifact_version_id, direction)
Bảng đăng ký
Registry databases — các dự án có tên registry-<name>, được tạo bởi Api.create_registry — chứa các bảng chuẩn ở trên cùng với bốn bảng bên dưới, được định nghĩa trong trackio/registry_storage.py bởi RegistryStorage.init_registry_db(). Số phiên bản của collection đến từ collections.next_version, chỉ tăng lên: một phiên bản collection không bao giờ được sử dụng lại, kể cả sau khi unlink. Mọi thao tác thay đổi registry cũng thêm một dòng vào registry_events trong cùng một giao dịch.
collections
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
name | TEXT | Tên bộ sưu tập, UNIQUE |
type | TEXT | Loại artifact duy nhất mà bộ sưu tập chấp nhận |
description | TEXT | Mô tả tùy chọn |
next_version | INTEGER | Bộ đếm đơn điệu cho các số phiên bản của bộ sưu tập |
created_at | TEXT | ISO timestamp |
collection_links
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
collection_id | INTEGER | Tham khảo collections(id) |
collection_version | INTEGER | Số phiên bản trong bộ sưu tập (v0, v1, …) |
source_project | TEXT | Dự án mà phiên bản artifact liên kết được ghi log |
source_artifact | TEXT | Tên của artifact được liên kết |
source_version | INTEGER | Phiên bản của artifact được liên kết |
source_space_id | TEXT | Không gian chứa phiên bản nguồn, NULL khi nó là cục bộ |
source_bucket_id | TEXT | Bucket chứa phiên bản nguồn, NULL khi nó là cục bộ |
created_at | TEXT | ISO timestamp |
Ràng buộc:
UNIQUE(collection_id, source_project, source_artifact, source_version)— một phiên bản nguồn chỉ được liên kết tối đa một lần cho mỗi bộ sưu tậpUNIQUE(collection_id, collection_version)
collection_aliases
| Cột | Loại | Ghi chú |
|---|---|---|
collection_id | INTEGER | Tham khảo collections(id) |
alias | TEXT | Tên gọi khác |
link_id | INTEGER | Tham khảo collection_links(id) |
Ràng buộc:
PRIMARY KEY (collection_id, alias)— một phiên bản cho mỗi alias trong mỗi collection
registry_events
| Cột | Loại | Ghi chú |
|---|---|---|
id | INTEGER | Khóa chính |
event_uid | TEXT | <compact-utc>-<writer>-<seq>, duy nhất; sắp xếp toàn bộ các sự kiện giữa các writer và đảm bảo replay có tính idempotent |
ts | TEXT | ISO timestamp |
kind | TEXT | create, link, promote, update hoặc unlink |
payload | TEXT | JSON blob mô tả sự đột biến |
Log là dạng thức chính thức của một registry: các bảng ở trên là một phép gập (fold) của nó. Một registry dựa trên bucket lưu trữ các sự kiện giống nhau dưới dạng mỗi sự kiện là một đối tượng (xem hướng dẫn về Registry) và vật chất hóa các bảng này cục bộ.
Cách các khối dữ liệu chỉ số được lưu trữ
- Các chỉ số người dùng được lưu trữ dưới dạng văn bản JSON trong
metrics.metrics. - Các chỉ số hệ thống được lưu trữ dưới dạng văn bản JSON trong
system_metrics.metrics. - Cấu hình chạy được lưu dưới dạng văn bản JSON trong
configs.config. - Các API cấp cao hơn của Trackio sẽ khử chuỗi hóa các khối JSON này trước khi trả về chúng.
Mẫu truy vấn trực tiếp phổ biến:
trackio query project --project "my-project" --sql "SELECT timestamp, step, metrics FROM metrics WHERE run_name = 'run-1' ORDER BY step DESC LIMIT 5"Ví dụ kiểm tra schema:
trackio query project --project "my-project" --sql "PRAGMA table_info(metrics)"Bố cục Parquet
Trackio tạo ra các tệp parquet từ SQLite bằng cách làm phẳng các cột JSON thành các cột thông thường.
Xuất parquet cục bộ
SQLiteStorage.export_to_parquet() ghi:
{project}.parquettừmetrics{project}_system.parquettừsystem_metrics{project}_configs.parquettừconfigs{project}_traces.parquettừtraces{project}_{table}.parquetcho mỗi bảng artifact (artifacts,artifact_versions,artifact_aliases,run_artifact_links)
Các tệp parquet đã được làm phẳng giữ lại các cột cấu trúc như timestamp, run_name và step, sau đó thêm một cột cho mỗi khóa được tìm thấy trong payload JSON.
Static Space và xuất dataset
SQLiteStorage.export_for_static_space() ghi:
metrics.parquetaux/system_metrics.parquetaux/configs.parquetaux/traces.parquetaux/artifacts.parquet,aux/artifact_versions.parquet,aux/artifact_aliases.parquet, vàaux/run_artifact_links.parquetruns.jsonsettings.json
Triển khai tĩnh sao chép các tệp phương tiện vào media/ và các blob sản phẩm vào artifacts/blobs/sha256/{prefix}/{digest} cùng với các bản xuất này, nhờ đó bảng điều khiển chỉ chạy trên trình duyệt có thể phục vụ các lượt tải sản phẩm trực tiếp từ bộ dữ liệu hoặc bucket.
Đây là bố cục được sử dụng cho các Spaces tĩnh và các bộ dữ liệu đã xuất.
Các ví dụ truy vấn hữu ích
Danh sách bảng:
trackio query project --project "my-project" --sql "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name"Tìm bước mới nhất cho mỗi lần chạy:
trackio query project --project "my-project" --sql "SELECT run_name, MAX(step) AS last_step FROM metrics GROUP BY run_name ORDER BY last_step DESC"Kiểm tra các cảnh báo gần đây:
trackio query project --project "my-project" --sql "SELECT timestamp, run_name, level, title, step FROM alerts ORDER BY timestamp DESC LIMIT 20"Kiểm tra các cấu hình đã lưu:
trackio query project --project "my-project" --sql "SELECT run_name, created_at, config FROM configs ORDER BY created_at DESC"Phiên bản Schema và Di trú
Mỗi cơ sở dữ liệu dự án ghi lại phiên bản schema của nó trong PRAGMA user_version:
trackio query project --project "my-project" --sql "PRAGMA user_version"SQLiteStorage.init_db() nâng cấp cơ sở dữ liệu lên SCHEMA_VERSION (được định nghĩa trong trackio/sqlite_storage.py) mỗi khi nó được mở để ghi, và một máy chủ Trackio sẽ di chuyển (migrate) mọi cơ sở dữ liệu dự án khi nó khởi động. Các cơ sở dữ liệu được ghi trước khi có cơ chế phân phiên bản sẽ báo phiên bản 0 và được nâng lên phiên bản 1 bằng các câu lệnh CREATE TABLE IF NOT EXISTS và ALTER TABLE ... ADD COLUMN mang tính bổ sung trong init_db(). Phiên bản 2 cấp cho các cơ sở dữ liệu được ghi trước Trackio 0.24 một run_id trên mọi bảng có phạm vi theo run: các phiên bản đó chỉ xác định một run bằng tên của nó, do đó mỗi tên run sẽ trở thành một run với một id mới.
Để thay đổi schema hoặc viết lại dữ liệu hiện có theo cách mà các câu lệnh đó không thể diễn đạt, hãy thêm một bước vào _SCHEMA_MIGRATIONS và tăng SCHEMA_VERSION:
def _split_loss_column(cursor):
cursor.execute("ALTER TABLE metrics ADD COLUMN loss REAL")
cursor.execute("UPDATE metrics SET loss = json_extract(metrics, '$.loss')")
SCHEMA_VERSION = 3
_SCHEMA_MIGRATIONS = {2: _migrate_add_run_ids, 3: _split_loss_column}_SCHEMA_MIGRATIONS[n] nâng cấp cơ sở dữ liệu từ phiên bản n - 1 lên n. Mỗi bước được thực thi trong một savepoint riêng cùng với việc tăng phiên bản, do đó nếu một bước thất bại, cơ sở dữ liệu sẽ được giữ ở phiên bản cuối cùng đã hoàn tất. Cơ sở dữ liệu có phiên bản mới hơn so với phiên bản mà Trackio đang chạy sẽ không bị thay đổi.
trackio bump dựa vào điều này: sau khi khởi động lại một Space trên phiên bản Trackio cục bộ, nó kiểm tra rằng mọi cơ sở dữ liệu dự án đều báo cáo SCHEMA_VERSION cục bộ. Bài kiểm tra e2e trong tests/e2e-spaces/test_space_bump.py chạy mọi migration trên dữ liệu được ghi bởi Trackio 0.21.0 và 0.37.1.
Ghi chú về tính ổn định
Trackio vẫn đang ở giai đoạn beta. Schema được tài liệu hóa tại đây để con người và các agent có thể truy vấn trực tiếp, nhưng các bản phát hành trong tương lai có thể thay đổi schema và yêu cầu chạy migration hoặc tạo lại cơ sở dữ liệu cục bộ.
Update on GitHub