Prefix iteration-scoped log lines with [i=N]
Make traversal progress and iteration-complete summary lines easier to visually scan during long runs by leading with [i=N]. Drop the redundant "iteration=N" kv from the body to keep lines short. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -131,8 +131,7 @@ class IterationMetrics:
|
||||
|
||||
def _format_iteration_summary(metrics: IterationMetrics, data: dict[str, float | int]) -> str:
|
||||
parts = [
|
||||
"Iteration complete:",
|
||||
f"iteration={metrics.iteration}",
|
||||
f"[i={metrics.iteration}] Iteration complete",
|
||||
f"traversal_nodes={metrics.traversal_nodes}",
|
||||
f"nodes_per_second={_format_summary_value(data['nodes_per_second'])}",
|
||||
f"advantage_loss={_format_summary_value(metrics.advantage_loss)}",
|
||||
@@ -422,7 +421,7 @@ class DeepCFRTrainer:
|
||||
if progress_every > 0 and completed >= progress_every:
|
||||
elapsed = time.perf_counter() - progress_started
|
||||
self.tracker.log_event(
|
||||
f"Traversal progress iteration={iteration} completed={completed} "
|
||||
f"[i={iteration}] Traversal progress completed={completed} "
|
||||
f"elapsed_seconds={elapsed:.2f} total_nodes={total_stats.nodes} "
|
||||
f"nodes_per_second={total_stats.nodes / max(elapsed, 1.0e-12):.1f}"
|
||||
)
|
||||
@@ -436,13 +435,13 @@ class DeepCFRTrainer:
|
||||
requested_workers = self.config.traversal.resolved_num_workers()
|
||||
max_workers = self.config.traversal.resolved_num_workers(len(batches))
|
||||
self.tracker.log_event(
|
||||
f"Traversal multiprocessing enabled iteration={iteration} "
|
||||
f"[i={iteration}] Traversal multiprocessing enabled "
|
||||
f"requested_workers={requested_workers} effective_workers={max_workers} "
|
||||
f"batches={len(batches)} chunk_size={self.config.traversal.worker_chunk_size}"
|
||||
)
|
||||
if max_workers < requested_workers:
|
||||
self.tracker.log_event(
|
||||
f"Traversal worker count capped iteration={iteration} "
|
||||
f"[i={iteration}] Traversal worker count capped "
|
||||
f"requested_workers={requested_workers} effective_workers={max_workers} "
|
||||
f"available_batches={len(batches)}"
|
||||
)
|
||||
@@ -482,7 +481,7 @@ class DeepCFRTrainer:
|
||||
if next_progress_at is not None and progress_traversals >= next_progress_at:
|
||||
elapsed = time.perf_counter() - progress_started
|
||||
self.tracker.log_event(
|
||||
f"Traversal multiprocessing progress iteration={iteration} "
|
||||
f"[i={iteration}] Traversal multiprocessing progress "
|
||||
f"completed_batches={completed_batches}/{total_batches} "
|
||||
f"completed_traversals={progress_traversals} "
|
||||
f"elapsed_seconds={elapsed:.2f} "
|
||||
|
||||
@@ -666,7 +666,8 @@ def test_deep_cfr_trainer_saves_loads_and_evaluates_checkpoint(tmp_path) -> None
|
||||
assert (checkpoint_dir / "train.log").exists()
|
||||
train_log = (checkpoint_dir / "train.log").read_text(encoding="utf-8")
|
||||
assert re.search(r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}", train_log)
|
||||
assert "Iteration complete:" in train_log
|
||||
assert "Iteration complete" in train_log
|
||||
assert "[i=1]" in train_log
|
||||
assert "reservoir memories and RNG state are not restored" in train_log
|
||||
assert restored.iteration == 1
|
||||
assert "eval_random_games" in metrics[0].eval_metrics
|
||||
|
||||
Reference in New Issue
Block a user