Views
No views yet
ac2. Checkpoint saved
after training step 25 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 25,
3 "progress/batch": 25,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.52,
6 "puct/buffer_size": 405,
7 "puct/sampled_size": 8,
8 "puct/T": 12800,
9 "puct/scale_last": 0.2808392336571254,
10 "puct/buffer_value/mean": 0.9312048341167537,
11 "puct/buffer_value/std": 0.044927810901257574,
12 "puct/buffer_value/min": 0.6666666666666636,
13 "puct/buffer_value/max": 0.947505900323792,
14 "puct/buffer_timestep/mean": 11.809876543209876,
15 "puct/buffer_timestep/std": 7.351553206816886,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 24.0,
18 "puct/buffer_construction_len/mean": 3751.6814814814816,
19 "puct/buffer_construction_len/std": 2003.3685951855148,
20 "puct/buffer_construction_len/min": 1024.0,
21 "puct/buffer_construction_len/max": 32768.0,
22 "puct/sampled_value/mean": 0.9474791909553217,
23 "puct/sampled_value/std": 1.0095361551839793e-05,
24 "puct/sampled_value/min": 0.9474753061298598,
25 "puct/sampled_value/max": 0.947505900323792,
26 "puct/sampled_timestep/mean": 24.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 24.0,
29 "puct/sampled_timestep/max": 24.0,
30 "puct/sampled_construction_len/mean": 4096.0,
31 "puct/sampled_construction_len/std": 0.0,
32 "puct/sampled_construction_len/min": 4096.0,
33 "puct/sampled_construction_len/max": 4096.0,
34 "time/sampling": 4016.5226407051086,
35 "env/all/ac_tokens_per_turn": 8729.111328125,
36 "env/all/ob_tokens_per_turn": 3700.125,
37 "env/all/turns_per_episode": 1.0,
38 "env/all/total_episodes": 512,
39 "env/all/total_turns": 512,
40 "env/all/total_ac_tokens": 4469305,
41 "env/all/total_ob_tokens": 1894464,
42 "env/all/time/sampling_mean": 568.2425810499117,
43 "env/all/time/sampling_max": 797.4285295009613,
44 "env/all/time/env_step_mean": 1727.0194606976584,
45 "env/all/time/env_step_max": 3237.9476516246796,
46 "env/all/reward/mean": 0.6413429923043803,
47 "env/all/reward/max": 0.9475750360438833,
48 "env/all/reward/min": 0.0,
49 "env/all/format": 1.0,
50 "env/all/format/min": 1.0,
51 "env/all/format/max": 1.0,
52 "env/all/reward": 0.6413429923043803,
53 "env/all/correctness": 0.720703125,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 0.889885127533449,
57 "env/all/raw_score/min": 0.02288094526516324,
58 "env/all/raw_score/max": 0.9475750360438833,
59 "env/all/initial_raw_score": 0.9474791909553217,
60 "env/all/initial_raw_score/min": 0.9474753061298598,
61 "env/all/initial_raw_score/max": 0.947505900323792,
62 "env/all/msg": "Success; raw_score=0.7075820433990201",
63 "env/all/parsed_code": "```python\nimport numpy as np\nimport random\nimport time\n\ndef construct_function():\n \"\"\"\n Uses a genetic algorithm to evolve a non-negative sequence of lengths 4096 to maximize the evaluation function,\n which calculates a lower bound based on the L2, L1, and L\u221e norms of the convolution of the sequence with itself.\n This approach allows for broad exploration of the search space and helps escape local optima by maintaining\n diversity through crossover and mutation.\n \"\"\"\n from typing import List\n\n # Parameter settings\n POPULATION_SIZE = 80\n MAX_GENERATIONS = 400\n TOURNAMENT_SIZE = 5\n MUTATION_RATE = 0.15\n CROSSOVER_RATE = 0.9\n SEQUENCE_LENGTH = 4096\n\n def generate_initial_population(size):\n \"\"\"Generate a diverse set of initial sequences for the population.\"\"\"\n population = []\n for _ in range(size):\n # Random sequence\n seq = np.random.rand(SEQUENCE_LENGTH) * 0.01 / SEQUENCE_LENGTH\n seq_sum = np.sum(seq)\n if seq_sum < 0.01:\n seq = np.clip(seq + (0.01 - seq_sum) / SEQUENCE_LENGTH, 0.0, 1000.0)\n population.append(seq)\n\n # Gaussian-like\n if random.random() < 0.2:\n x = np.linspace(-0.5, 0.5, SEQUENCE_LENGTH)\n peak = 0.01 * np.exp(-((x - 0.0) / 0.2)**2)\n peak = np.clip(peak / np.sum(peak) * 0.01, 0.0, 1000.0)\n population.append(peak)\n\n # Multiple peaks\n if random.random() < 0.2:\n x = np.linspace(-0.5, 0.5, SEQUENCE_LENGTH)\n peak_sum = 0.0\n for i in range(3):\n pos = -0.5 + (i + 0.5) * 0.3\n peak = 0.01 * np.exp(-((x - pos) / 0.1)**2)\n peak_sum += peak\n peak_sum = np.clip(peak_sum / np.sum(peak_sum) * 0.01, 0.0, 1000.0)\n population.append(peak_sum)\n\n # Sine wave\n if random.random() < 0.2:\n x = np.linspace(-0.5, 0.5, SEQUENCE_LENGTH)\n wave = 0.01 * np.sin(2 * np.pi * x * 5)\n wave = np.clip(wave / np.sum(wave) * 0.01, 0.0, 1000.0)\n population.append(wave)\n\n # Triangular\n if random.random() < 0.2:\n x = np.linspace(-0.5, 0.5, SEQUENCE_LENGTH)\n peak = np.abs(x - 0.0) * (x < 0.5)\n peak = np.clip(peak / np.sum(peak) * 0.01, 0.0, 1000.0)\n population.append(peak)\n # Trim to desired size\n population = population[:size]\n return population\n\n def evaluate_individual(seq):\n \"\"\"Evaluate the fitness of a single sequence.\"\"\"\n try:\n return evaluate_sequence(seq.tolist())\n except:\n print(\"Evaluation failed for sequence.\")\n return -1.0\n\n def tournament_selection(population, size):\n \"\"\"Select a candidate via tournament selection.\"\"\"\n tournament = random.sample(population, size)\n winner = max(tournament, key=evaluate_individual)\n return winner\n\n def crossover(parent1, parent2):\n \"\"\"Crossover operation to generate a child.\"\"\"\n child = np.zeros_like(parent1)\n for i in range(len(parent1)):\n if random.random() < CROSSOVER_RATE:\n child[i] = parent1[i]\n else:\n child[i] = parent2[i]\n return child\n\n def mutate(seq):\n \"\"\"Mutate a sequence by adding noise and ensuring constraints.\"\"\"\n noise = np.random.normal(0, 0.005, len(seq))\n seq += noise\n seq = np.clip(seq, 0.0, 1000.0)\n sum_seq = np.sum(seq)\n if sum_seq < 0.01:\n scale = 0.01 / sum_seq\n seq *= scale\n return seq\n\n # Initialize population\n population = generate_initial_population(POPULATION_SIZE)\n\n # Evaluate initial population and find the best\n scores = [evaluate_individual(seq) for seq in population]\n best_index = np.argmax(scores)\n best_sequence = population[best_index]\n best_score = scores[best_index]\n\n start_time = time.time()\n\n for generation in range(MAX_GENERATIONS):\n new_population = []\n\n for _ in range(POPULATION_SIZE):\n parent1 = tournament_selection(population, TOURNAMENT_SIZE)\n parent2 = tournament_selection(population, TOURNAMENT_SIZE)\n child = crossover(parent1, parent2)\n if random.random() < MUTATION_RATE:\n child = mutate(child)\n new_population.append(child)\n\n # Evaluate new population\n new_scores = [evaluate_individual(seq) for seq in new_population]\n # Update best solution\n for i, score in enumerate(new_scores):\n if score > best_score:\n best_score = score\n best_sequence = new_population[i]\n\n # Replace old population with new_population\n population = new_population\n\n # Track time\n elapsed_time = time.time() - start_time\n if elapsed_time >= 1000:\n print(f\"Time remaining: {1000 - elapsed_time} seconds. Final refinement.\")\n break\n\n print(f\"Final C2 lower bound: {best_score}\")\n return best_sequence.tolist()\n```",
64 "env/all/time/policy": 568.2425810499117,
65 "env/all/time/policy/min": 271.45865964889526,
66 "env/all/time/policy/max": 797.4285295009613,
67 "env/all/time/env_step": 1727.0194606976584,
68 "env/all/time/env_step/min": 0.008996009826660156,
69 "env/all/time/env_step/max": 3237.9476516246796,
70 "env/all/time/reward_compute": 4.1956081986427307e-07,
71 "env/all/time/reward_compute/min": 1.825392246246338e-07,
72 "env/all/time/reward_compute/max": 9.126961231231689e-07,
73 "env/all/by_group/frac_mixed": 1.0,
74 "env/all/by_group/frac_all_good": 0.0,
75 "env/all/by_group/frac_all_bad": 0.0,
76 "advantage/mean": 0.013632606714963913,
77 "advantage/min": -1.0,
78 "advantage/max": 5.430055618286133,
79 "time/assemble_training_data": 9.835371255874634,
80 "time/kl_vs_base": 151.72688722610474,
81 "kl_policy_base": 0.0006956540746614337,
82 "time/train": 1204.7169947624207,
83 "time/save_checkpoint": 14.519163131713867,
84 "time/total": 5403.9904961586
85}[2026-07-09T06:42:12+00:00] job=1812634 node=node-30 ngpu=3 ntrain=1 replicas=2 flash_attn=no
[2026-07-09T07:26:33+00:00] job=1812736 node=node-12 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-09T09:27:32+00:00] job=1813133 node=node-14 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-09T16:26:04+00:00] job=1813134 node=node-4 ngpu=6 ntrain=2 replicas=4 flash_attn=yes
[2026-07-11T01:56:04+00:00] job=1821290 node=node-4 ngpu=3 ntrain=1 replicas=2 flash_attn=yes