|
1 | 1 | """ |
2 | | -Example: Log some fake training data, then sync to a static HF Space. |
| 2 | +Example: Log training data locally, sync to a static Space, then log more and sync again. |
3 | 3 |
|
4 | 4 | Usage: |
5 | 5 | python examples/sync-static-space.py |
6 | 6 |
|
7 | 7 | This will: |
8 | | -1. Log a few runs of fake training metrics locally |
9 | | -2. Call trackio.sync() which uploads the local project to an HF Bucket |
10 | | - and deploys a static dashboard Space (no running server needed) |
| 8 | +1. Log an initial run of fake training metrics locally |
| 9 | +2. Sync to a static HF Space (uploads to an HF Bucket, no server needed) |
| 10 | +3. Log a second run with more data |
| 11 | +4. Sync again -- the static Space now contains both runs |
11 | 12 |
|
12 | 13 | Set HF_TOKEN or run `huggingface-cli login` first. |
13 | 14 | """ |
|
21 | 22 | EPOCHS = 15 |
22 | 23 |
|
23 | 24 |
|
24 | | -def fake_loss(epoch, max_epochs): |
| 25 | +def fake_metrics(epoch, max_epochs): |
25 | 26 | progress = epoch / max_epochs |
26 | | - return max(0.05, 2.5 * math.exp(-3 * progress) + random.gauss(0, 0.2)) |
| 27 | + loss = max(0.05, 2.5 * math.exp(-3 * progress) + random.gauss(0, 0.1)) |
| 28 | + acc = min(0.95, 0.9 / (1 + math.exp(-6 * (progress - 0.5))) + random.gauss(0, 0.03)) |
| 29 | + return round(loss, 4), round(acc, 4) |
27 | 30 |
|
28 | 31 |
|
29 | | -def fake_accuracy(epoch, max_epochs): |
30 | | - progress = epoch / max_epochs |
31 | | - return min( |
32 | | - 0.95, 0.9 / (1 + math.exp(-6 * (progress - 0.5))) + random.gauss(0, 0.05) |
33 | | - ) |
34 | | - |
35 | | - |
36 | | -for run_idx in range(3): |
37 | | - trackio.init( |
38 | | - project=PROJECT, |
39 | | - name=f"run-{run_idx}", |
40 | | - config={"lr": 0.001 * (run_idx + 1), "epochs": EPOCHS}, |
41 | | - ) |
42 | | - for epoch in range(EPOCHS): |
43 | | - trackio.log( |
44 | | - { |
45 | | - "train/loss": round(fake_loss(epoch, EPOCHS), 4), |
46 | | - "train/accuracy": round(fake_accuracy(epoch, EPOCHS), 4), |
47 | | - "val/loss": round(fake_loss(epoch, EPOCHS) * 1.1, 4), |
48 | | - } |
49 | | - ) |
50 | | - trackio.finish() |
| 32 | +trackio.init(project=PROJECT, name="run-0", config={"lr": 0.001, "epochs": EPOCHS}) |
| 33 | +for epoch in range(EPOCHS): |
| 34 | + loss, acc = fake_metrics(epoch, EPOCHS) |
| 35 | + trackio.log({"train/loss": loss, "train/accuracy": acc}) |
| 36 | +trackio.finish() |
51 | 37 |
|
| 38 | +print("First run complete. Syncing to a static Space...") |
52 | 39 | space_id = trackio.sync(project=PROJECT, sdk="static") |
53 | 40 | print(f"Dashboard: https://huggingface.co/spaces/{space_id}") |
| 41 | + |
| 42 | +trackio.init(project=PROJECT, name="run-1", config={"lr": 0.003, "epochs": EPOCHS}) |
| 43 | +for epoch in range(EPOCHS): |
| 44 | + loss, acc = fake_metrics(epoch, EPOCHS) |
| 45 | + trackio.log({"train/loss": loss, "train/accuracy": acc}) |
| 46 | +trackio.finish() |
| 47 | + |
| 48 | +print("Second run complete. Syncing again...") |
| 49 | +trackio.sync(project=PROJECT, sdk="static") |
| 50 | +print("Static Space updated with both runs.") |
0 commit comments