Views
No views yet
ac1. Checkpoint saved
after training step 28 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 28,
3 "progress/batch": 28,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.58,
6 "puct/buffer_size": 456,
7 "puct/sampled_size": 8,
8 "puct/T": 14336,
9 "puct/scale_last": 0.4936516100901467,
10 "puct/buffer_value/mean": -1.5226172549392936,
11 "puct/buffer_value/std": 0.0778076724561299,
12 "puct/buffer_value/min": -2.000000000000008,
13 "puct/buffer_value/max": -1.5063483899098538,
14 "puct/buffer_timestep/mean": 13.24561403508772,
15 "puct/buffer_timestep/std": 8.22977201567446,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 27.0,
18 "puct/buffer_construction_len/mean": 1095.4627192982457,
19 "puct/buffer_construction_len/std": 626.9809367926407,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7397.0,
22 "puct/sampled_value/mean": -1.5063602553961977,
23 "puct/sampled_value/std": 4.312968045759758e-12,
24 "puct/sampled_value/min": -1.5063602554003857,
25 "puct/sampled_value/max": -1.5063602553852484,
26 "puct/sampled_timestep/mean": 27.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 27.0,
29 "puct/sampled_timestep/max": 27.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": 5236.407685995102,
35 "env/all/ac_tokens_per_turn": 8210.1796875,
36 "env/all/ob_tokens_per_turn": 3006.875,
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": 4203612,
41 "env/all/total_ob_tokens": 1539520,
42 "env/all/time/sampling_mean": 282.2851976980455,
43 "env/all/time/sampling_max": 375.48298811912537,
44 "env/all/time/env_step_mean": 2543.462399111595,
45 "env/all/time/env_step_max": 4873.109321594238,
46 "env/all/reward/mean": 0.6047426607149964,
47 "env/all/reward/max": 0.6638518175153144,
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.6047426607149964,
53 "env/all/correctness": 0.935546875,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 1.694162701413517,
57 "env/all/raw_score/min": 1.5063602553719193,
58 "env/all/raw_score/max": 68.87346569887661,
59 "env/all/initial_raw_score": -1.5063602553961977,
60 "env/all/initial_raw_score/min": -1.5063602554003857,
61 "env/all/initial_raw_score/max": -1.5063602553852484,
62 "env/all/msg": "Success; raw_score=1.5063602553851487",
63 "env/all/parsed_code": "```python\nimport time\nimport numpy as np\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 \n with normalization, refined constraint selection, and clipping with renormalization.\n \"\"\"\n np.random.seed(seed)\n deadline = time.time() + 1000 - 10 # Run for up to 1000 seconds\n\n n = 1000\n desired_sum = np.sqrt(2 * n)\n \n # Start with a high-quality initial sequence, if available, otherwise uniform\n try:\n best_sequence = np.array(list(height_sequence_1))\n except NameError:\n # Start with a uniform initialization\n best_sequence = np.ones(n) * (desired_sum / n)\n \n # Normalize initial sequence\n best_sequence = best_sequence / np.sum(best_sequence) * desired_sum\n curr_sequence = best_sequence.copy()\n \n # Evaluate initial sequence\n best_score = evaluate_sequence(curr_sequence.tolist())\n no_improvement_counter = 0\n iteration_count = 0\n\n # Parameters for line search and perturbation\n while time.time() < deadline:\n current_time = time.time()\n try:\n # Compute current convolution and max_b\n conv = np.convolve(curr_sequence, curr_sequence, mode='full')\n max_b = np.max(conv)\n sum_a = np.sum(curr_sequence)\n if sum_a < 0.01:\n raise ValueError(\"Sum too small\")\n\n # Select the top k positions with highest convolution values for constraints\n k = np.random.randint(100, 200) # Refine k to focus on critical positions\n positions = np.argsort(conv)[-k:]\n\n # Construct the A matrix for LP constraints: (curr_sequence * g_0) <= max_b at certain positions\n A = []\n for j in positions:\n row = np.zeros(n)\n for m in range(n):\n i = j - m\n if 0 <= i < n:\n row[m] = curr_sequence[i]\n A.append(row)\n A = np.array(A)\n b = np.full(len(positions), max_b)\n\n # Define LP problem: maximize sum of g_0, constrained to (curr_sequence * g_0) <= max_b\n c = [-1.0] * n # Minimize -sum(g_0) => maximize sum(g_0)\n bounds = [(0.0, 1000.0) for _ in range(n)]\n\n # Solve LP with tighter convergence settings\n res = linprog(c=c, A_ub=A, b_ub=b, bounds=bounds, method='highs', options={\"feastol\": 1e-8})\n if res.success:\n g_0 = res.x\n sum_g = np.sum(g_0)\n if sum_g == 0:\n continue\n\n # Generate optimal alpha via ternary search with precise evaluation\n def find_optimal_alpha(curr_seq, g0_norm):\n low = 0.0\n high = 1.0\n for _ in range(500): # Increased iterations for precision\n m1 = low + (high - low)/3\n m2 = high - (high - low)/3\n new_seq1 = (1 - m1) * curr_seq + m1 * g0_norm\n new_seq1 = np.clip(new_seq1, 0.0, 1000.0)\n new_seq1 = new_seq1 / np.sum(new_seq1) * desired_sum # Renormalize\n score1 = evaluate_sequence(new_seq1.tolist())\n\n new_seq2 = (1 - m2) * curr_seq + m2 * g0_norm\n new_seq2 = np.clip(new_seq2, 0.0, 1000.0)\n new_seq2 = new_seq2 / np.sum(new_seq2) * desired_sum # Renormalize\n score2 = evaluate_sequence(new_seq2.tolist())\n\n if score1 < score2:\n high = m2\n else:\n low = m1\n alpha_opt = (low + high) / 2\n new_seq = (1 - alpha_opt) * curr_seq + alpha_opt * g0_norm\n new_seq = np.clip(new_seq, 0.0, 1000.0)\n new_seq = new_seq / np.sum(new_seq) * desired_sum # Renormalize\n return new_seq, evaluate_sequence(new_seq.tolist())\n\n new_sequence, new_score = find_optimal_alpha(curr_sequence, g_0)\n curr_sequence = new_sequence\n\n # Evaluate and update best sequence\n curr_score = evaluate_sequence(curr_sequence.tolist())\n if curr_score < best_score:\n best_score = curr_score\n best_sequence = curr_sequence.copy()\n no_improvement_counter = 0\n print(f\"New best score: {best_score}\")\n else:\n no_improvement_counter += 1\n else:\n print(\"LP solution not found, exiting loop\")\n break\n\n # Intensive perturbation to escape local minima\n iteration_count += 1\n if iteration_count % 50 == 0: # Perturb every 50 iterations\n print(f\"Iteration {iteration_count}, current best score: {best_score}\")\n if no_improvement_counter > 200:\n print(\"No improvement for 200 iterations, perturbing the sequence\")\n no_improvement_counter = 0\n # Add a larger random perturbation and renormalize\n perturb = np.random.uniform(-1.0, 1.0, size=n)\n curr_sequence = curr_sequence + perturb\n curr_sequence = np.clip(curr_sequence, 0.0, 1000.0)\n curr_sequence = curr_sequence / np.sum(curr_sequence) * desired_sum # Renormalize\n # Ensure sum is not too small\n if np.sum(curr_sequence) < 0.01:\n curr_sequence = curr_sequence * 0.01 / np.sum(curr_sequence) * 1000.0 # Scale to have sum 0.01\n\n except Exception as e:\n print(f\"Error during optimization: {e}. Skipping update.\")\n continue\n\n # Final safety check and return\n final_sequence = np.maximum(0.0, best_sequence).tolist()\n return [float(x) for x in final_sequence]\n```",
64 "env/all/time/policy": 282.2851976980455,
65 "env/all/time/policy/min": 99.54642391204834,
66 "env/all/time/policy/max": 375.48298811912537,
67 "env/all/time/env_step": 2543.462399111595,
68 "env/all/time/env_step/min": 0.005238056182861328,
69 "env/all/time/env_step/max": 4873.109321594238,
70 "env/all/time/reward_compute": 2.9476359486579895e-07,
71 "env/all/time/reward_compute/min": 1.9371509552001953e-07,
72 "env/all/time/reward_compute/max": 7.152557373046875e-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.006127829663455486,
77 "advantage/min": -1.0,
78 "advantage/max": 0.8529410362243652,
79 "time/assemble_training_data": 10.354790687561035,
80 "time/kl_vs_base": 88.22011852264404,
81 "kl_policy_base": 0.0007477378821931779,
82 "time/train": 529.809424161911,
83 "time/save_checkpoint": 33.364089012145996,
84 "time/total": 5900.774831056595
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