Trackio documentation
Quét siêu tham số
Quét siêu tham số
Trackio cố ý không cung cấp API sweep cấp một. Một sweep đơn giản là một vòng lặp Python: mỗi cấu hình tương ứng với một run, được nhóm lại để bảng điều khiển và các truy vấn có thể xử lý sweep như một đơn vị. Cách này giúp bạn kiểm soát hoàn toàn các sweep — bất kỳ chiến lược tìm kiếm nào bạn có thể viết (hoặc yêu cầu một coding agent viết) đều hoạt động, mà không cần học thêm gì mới.
Trang này tổng hợp các công thức cho các trường hợp phổ biến.
Mẫu
Mỗi công thức dưới đây là một biến thể của cùng ba thành phần:
- Một lần chạy cho mỗi cấu hình — gọi init() một lần cho mỗi thử nghiệm.
group— đặt thành định danh của một lượt quét để tất cả các thử nghiệm của lượt quét đó được giữ cùng nhau (xem Grouping runs).config— ghi lại các siêu tham số để kết quả có thể so sánh được sau này.
import trackio
def train(config: dict, group: str, name: str) -> float:
trackio.init(project="my_project", name=name, group=group, config=config)
final_loss = None
for epoch in range(10):
final_loss = ... # your actual training step
trackio.log({"loss": final_loss, "epoch": epoch})
trackio.finish()
return final_lossTìm kiếm lưới
Liệt kê toàn bộ tích Descartes của không gian tìm kiếm bằng itertools.product:
import itertools
search_space = {
"lr": [1e-2, 1e-3, 1e-4],
"batch_size": [32, 128],
}
best = None
for values in itertools.product(*search_space.values()):
config = dict(zip(search_space.keys(), values))
name = "grid-" + "-".join(f"{k}={v}" for k, v in config.items())
loss = train(config, group="grid-search", name=name)
if best is None or loss < best[1]:
best = (config, loss)
print(f"best config: {best[0]} (loss {best[1]:.3f})")Tìm kiếm ngẫu nhiên
Lấy mẫu cấu hình thay vì liệt kê chúng — thường là cách sử dụng ngân sách như nhau hiệu quả hơn khi một số siêu tham số quan trọng hơn nhiều so với các siêu tham số khác. Khởi tạo bộ tạo số ngẫu nhiên để quá trình quét có thể tái lập được:
import random
N_TRIALS = 20
rng = random.Random(42)
best = None
for trial in range(N_TRIALS):
config = {
"lr": 10 ** rng.uniform(-5, -1),
"batch_size": rng.choice([16, 32, 64, 128, 256]),
}
loss = train(config, group="random-search", name=f"random-{trial}")
if best is None or loss < best[1]:
best = (config, loss)Tối ưu hóa Bayes với Optuna
Để có các chiến lược tìm kiếm thông minh hơn, hãy sử dụng một thư viện chuyên dụng và để Trackio thực hiện việc theo dõi. Với Optuna (pip install optuna), mỗi trial sẽ trở thành một run của Trackio:
import optuna
def objective(trial):
config = {
"lr": trial.suggest_float("lr", 1e-5, 1e-1, log=True),
"batch_size": trial.suggest_categorical("batch_size", [16, 32, 64, 128]),
}
return train(config, group="optuna-sweep", name=f"optuna-{trial.number}")
study = optuna.create_study(direction="minimize")
study.optimize(objective, n_trials=20)
print("best:", study.best_params, study.best_value)Xem kết quả Sweep
Trong bảng điều khiển (trackio show), các run cùng chia sẻ một group sẽ được nhóm lại với nhau trong thanh bên, cho phép bật hoặc tắt toàn bộ một sweep như một đơn vị và so sánh các run của nó trên cùng một biểu đồ. Vì mỗi trial đều ghi lại các siêu tham số của nó trong config, nên sweep cũng là lựa chọn tự nhiên để so sánh các cấu hình run cạnh nhau.
Truy vấn Cấu hình Tối ưu
Vì mọi thứ đều nằm trong SQLite, câu hỏi “cấu hình nào đã thắng?” chỉ là một truy vấn. Nhóm của lần chạy được lưu bên trong JSON cấu hình dưới khóa _Group:
trackio query project --project "my_project" --sql "
SELECT m.run_name,
json_extract(m.metrics, '$.loss') AS final_loss
FROM metrics m
JOIN configs c ON c.run_name = m.run_name
WHERE json_extract(c.config, '$._Group') = 'grid-search'
AND m.id = (SELECT MAX(id) FROM metrics WHERE run_name = m.run_name)
ORDER BY final_loss ASC
LIMIT 5"Thêm --json để có đầu ra có thể đọc được bằng máy. Xem Lưu trữ Schema và Truy vấn Trực tiếp để biết schema đầy đủ.
Chạy các lượt quét với một tác nhân lập trình
Sweeps là một tác vụ tự nhiên để ủy quyền: vòng lặp mang tính cơ học, và Trackio cung cấp cho các agent quyền truy cập kết quả theo chương trình (CLI với --json, API Python, và SQL trực tiếp). Một prompt đơn giản như:
Chạy tìm kiếm ngẫu nhiên trên lr (log-uniform, 1e-5 đến 1e-1) và batch_size (16–256) cho script huấn luyện của tôi. Tạo một Trackio run cho mỗi trial trong nhóm “sweep-aug30”, 20 trials, sau đó truy vấn kết quả và báo cáo ba cấu hình tốt nhất.
là đủ để một agent viết vòng lặp, chạy nó và đọc lại kết quả. Xem Chạy các thí nghiệm ML với Agents để biết cách cấu trúc vòng phản hồi hoàn chỉnh, bao gồm cảnh báo và giám sát.
Ví dụ có thể chạy
Một script hoàn chỉnh, tự chứa với lưới và các công thức ngẫu nhiên nằm tại examples/sweep-recipes.py.