Views
No views yet
ac1. Checkpoint saved
after training step 36 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 36,
3 "progress/batch": 36,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.74,
6 "puct/buffer_size": 584,
7 "puct/sampled_size": 8,
8 "puct/T": 18432,
9 "puct/scale_last": 0.49366426964428567,
10 "puct/buffer_value/mean": -1.519052499094036,
11 "puct/buffer_value/std": 0.06908250711210029,
12 "puct/buffer_value/min": -2.000000000000008,
13 "puct/buffer_value/max": -1.5063357303557148,
14 "puct/buffer_timestep/mean": 17.246575342465754,
15 "puct/buffer_timestep/std": 10.538618897736114,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 35.0,
18 "puct/buffer_construction_len/mean": 1074.539383561644,
19 "puct/buffer_construction_len/std": 555.4319821590213,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7397.0,
22 "puct/sampled_value/mean": -1.506335730355723,
23 "puct/sampled_value/std": 6.196894572858729e-15,
24 "puct/sampled_value/min": -1.50633573035573,
25 "puct/sampled_value/max": -1.5063357303557148,
26 "puct/sampled_timestep/mean": 35.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 35.0,
29 "puct/sampled_timestep/max": 35.0,
30 "puct/sampled_construction_len/mean": 1000.0,
31 "puct/sampled_construction_len/std": 0.0,
32 "puct/sampled_construction_len/min": 1000.0,
33 "puct/sampled_construction_len/max": 1000.0,
34 "time/sampling": 4469.4557592868805,
35 "env/all/ac_tokens_per_turn": 9272.431640625,
36 "env/all/ob_tokens_per_turn": 2918.625,
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": 4747485,
41 "env/all/total_ob_tokens": 1494336,
42 "env/all/time/sampling_mean": 586.1919030775316,
43 "env/all/time/sampling_max": 842.4871475696564,
44 "env/all/time/env_step_mean": 1591.1268601072952,
45 "env/all/time/env_step_max": 3635.3150351047516,
46 "env/all/reward/mean": 0.6085217641793346,
47 "env/all/reward/max": 0.6638630366061868,
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.6085217641793346,
53 "env/all/correctness": 0.94140625,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 1.5597636561057724,
57 "env/all/raw_score/min": 1.5063347983246491,
58 "env/all/raw_score/max": 3.2949846872717505,
59 "env/all/initial_raw_score": -1.506335730355723,
60 "env/all/initial_raw_score/min": -1.50633573035573,
61 "env/all/initial_raw_score/max": -1.5063357303557148,
62 "env/all/msg": "Success; raw_score=1.5063357303557148",
63 "env/all/parsed_code": "```python\nimport numpy as np\nimport random\nimport time\nfrom scipy.optimize import linprog\n\ndef propose_candidate(seed=42, **kwargs):\n \"\"\"\n Proposes a sequence of non-negative numbers to minimize the evaluation score using a genetic algorithm with\n tournament selection, crossover, and adaptive mutation. This approach avoids the problematic constraints\n and focuses on exploring the search space more robustly to find a sequence that achieves a better score.\n \"\"\"\n np.random.seed(seed)\n deadline = time.time() + 1000 - 10\n n = 1000 # Fixed size of the sequence\n\n # Use the existing best sequence if available\n global height_sequence_1\n if 'height_sequence_1' in globals() and isinstance(height_sequence_1, (list, np.ndarray)):\n best_sequence = list(height_sequence_1)\n else:\n # Initialize with a uniform distribution for broader search\n best_sequence = np.random.uniform(0, np.sqrt(2 * n), n).tolist()\n best_sequence = [x / sum(best_sequence) * np.sqrt(2 * n) for x in best_sequence]\n best_sequence = [min(1000.0, max(0.0, x)) for x in best_sequence]\n best_score = evaluate_sequence(best_sequence)\n\n population_size = 50\n mutation_rate = 0.1\n generations = 200\n\n # Initialize population with valid sequences\n population = []\n for _ in range(population_size):\n seq = np.random.uniform(0, np.sqrt(2 * n), n).tolist()\n seq = [x / sum(seq) * np.sqrt(2 * n) for x in seq]\n seq = [min(1000.0, max(0.0, x)) for x in seq]\n population.append(seq)\n\n # Function to evaluate a candidate\n def evaluate(seq):\n return evaluate_sequence(seq)\n\n # Main iterative process\n for gen in range(generations):\n current_time = time.time()\n if current_time > deadline:\n break\n\n # Evaluate all candidates\n fitness = [(evaluate(seq), seq) for seq in population]\n # Remove invalid sequences and replace with new random ones\n valid_fitness = [(s, seq) for s, seq in fitness if s != np.inf]\n while len(valid_fitness) < population_size:\n new_seq = np.random.uniform(0, np.sqrt(2 * n), n).tolist()\n new_seq = [x / sum(new_seq) * np.sqrt(2 * n) for x in new_seq]\n new_seq = [min(1000.0, max(0.0, x)) for x in new_seq]\n valid_fitness.append((evaluate(new_seq), new_seq))\n # Sort by fitness\n valid_fitness.sort()\n # Select best half as parents for next generation\n selected = [seq for (s, seq) in valid_fitness[:population_size // 2]]\n\n # Create new population through crossover and mutation\n new_population = selected.copy()\n while len(new_population) < population_size:\n parent1, parent2 = random.sample(selected, 2)\n # Crossover\n child = np.zeros(n)\n for i in range(n):\n if random.random() < 0.5:\n child[i] = parent1[i]\n else:\n child[i] = parent2[i]\n child = child / np.sum(child) * np.sqrt(2 * n)\n child = [min(1000.0, max(0.0, x)) for x in child]\n new_population.append(child)\n\n # Mutation\n parent = random.choice(selected)\n child_mut = parent.copy()\n for i in range(n):\n if random.random() < mutation_rate:\n perturbation = np.random.normal(0, 0.01)\n child_mut[i] = max(0.0, min(1000.0, child_mut[i] + perturbation))\n child_mut = np.array(child_mut) / np.sum(child_mut) * np.sqrt(2 * n)\n child_mut = [min(1000.0, max(0.0, x)) for x in child_mut]\n new_population.append(child_mut)\n\n # Update population\n population = new_population\n\n # Find the best sequence found so far\n for score, seq in valid_fitness:\n if score < best_score:\n best_score = score\n best_sequence = seq\n print(f\"Generation {gen}: Best score improved to {best_score}\")\n\n final_sequence = [float(x) for x in best_sequence]\n return final_sequence\n```",
64 "env/all/time/policy": 586.1919030775316,
65 "env/all/time/policy/min": 237.95990920066833,
66 "env/all/time/policy/max": 842.4871475696564,
67 "env/all/time/env_step": 1591.1268601072952,
68 "env/all/time/env_step/min": 0.613593578338623,
69 "env/all/time/env_step/max": 3635.3150351047516,
70 "env/all/time/reward_compute": 4.880130290985107e-07,
71 "env/all/time/reward_compute/min": 2.1979212760925293e-07,
72 "env/all/time/reward_compute/max": 1.043081283569336e-06,
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.004059770610183477,
77 "advantage/min": -1.0,
78 "advantage/max": 0.9515261650085449,
79 "time/assemble_training_data": 10.722968816757202,
80 "time/kl_vs_base": 148.32886362075806,
81 "kl_policy_base": 0.0006734613562002778,
82 "time/train": 1180.1556541919708,
83 "time/save_checkpoint": 18.583666801452637,
84 "time/total": 5830.0731773376465
85}[2026-07-09T06:24:18+00:00] job=1812628 node=node-12 ngpu=3 ntrain=1 replicas=2 flash_attn=no
[2026-07-09T08:30:32+00:00] job=1813127 node=node-22 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-09T13:07:08+00:00] job=1813128 node=node-6 ngpu=6 ntrain=2 replicas=4 flash_attn=yes
[2026-07-11T13:13:37+00:00] job=1824165 node=node-6 ngpu=3 ntrain=1 replicas=2 flash_attn=yes