Tutorial — AI
Train and finalize
End-to-end Tenzro Train flow: post a TimesFM task, enroll as a trainer, run the Python reference trainer, submit an outer gradient, and finalize a sync round.
- Level
- Advanced
- Time
- ~45 min
- Prerequisites
- tenzro-node + Python trainer; one GPU recommended
- Stack
- CLI + Python
01
Post a training task
tenzro train post-task \
--modality timeseries \
--architecture timesfm-2.5 \
--tier open \
--aggregation mean \
--target-rounds 6402
Enroll as a trainer
tenzro train enroll-trainer --task <task-id>03
Run the Python reference trainer
The Python trainer wraps PyTorch FSDP2 and Hivemind. It talks to the Rust syncer over JSON-RPC and the gossip topics.
pip install "tenzro-trainer"
tenzro-trainer run --task <task-id> --shard <shard-uri>04
Submit the outer gradient
The trainer computes an outer gradient, serializes it to safetensors, hashes it (SHA-256), and publishes via IrohGradientStore. The on-wire submission is small — just the SHA-256 + signature.
tenzro train submit-gradient --task <task-id> --round <r>05
Finalize the round (witness committee)
SyncerState::finalize_round is idempotent — k-of-N witnesses can submit the same (round, state_root) concurrently with no double-finalize hazard. Conflicting state_roots return TrainingError::ConflictingFinalize for fork detection. If the committee cannot assemble a quorum within grace_window_ms, build_nec_sync_round emits a no-endorsement-cert sync round and the run advances carrying forward the prior state_root.
06
Read the receipt
tenzro train get-receipt --task <task-id> --round <r>