Views
No views yet
ac1. Checkpoint saved
after training step 2 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 2,
3 "progress/batch": 2,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.06,
6 "puct/buffer_size": 40,
7 "puct/sampled_size": 8,
8 "puct/T": 1024,
9 "puct/scale_last": 0.4896012684793387,
10 "puct/buffer_value/mean": -1.7091425540903926,
11 "puct/buffer_value/std": 0.20712159445471282,
12 "puct/buffer_value/min": -2.000000000000007,
13 "puct/buffer_value/max": -1.5086592114951622,
14 "puct/buffer_timestep/mean": 0.2,
15 "puct/buffer_timestep/std": 0.7483314773547883,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 1.0,
18 "puct/buffer_construction_len/mean": 2475.25,
19 "puct/buffer_construction_len/std": 2186.5413527989817,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7850.0,
22 "puct/sampled_value/mean": -1.5140903642089087,
23 "puct/sampled_value/std": 0.002258187582422952,
24 "puct/sampled_value/min": -1.5166624888783131,
25 "puct/sampled_value/max": -1.5086592114951622,
26 "puct/sampled_timestep/mean": 1.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 1.0,
29 "puct/sampled_timestep/max": 1.0,
30 "puct/sampled_construction_len/mean": 1017.5,
31 "puct/sampled_construction_len/std": 30.31088913245535,
32 "puct/sampled_construction_len/min": 1000.0,
33 "puct/sampled_construction_len/max": 1070.0,
34 "time/sampling": 5162.654311656952,
35 "env/all/ac_tokens_per_turn": 7928.63671875,
36 "env/all/ob_tokens_per_turn": 2673.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": 4059462,
41 "env/all/total_ob_tokens": 1368640,
42 "env/all/time/sampling_mean": 265.73105007829145,
43 "env/all/time/sampling_max": 372.39556312561035,
44 "env/all/time/env_step_mean": 2171.537565194536,
45 "env/all/time/env_step_max": 4813.8578724861145,
46 "env/all/reward/mean": 0.45321002687824496,
47 "env/all/reward/max": 0.6632675780227382,
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.45321002687824496,
53 "env/all/correctness": 0.75390625,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 1.779452979306334,
57 "env/all/raw_score/min": 1.5076871333714463,
58 "env/all/raw_score/max": 31.996255707010047,
59 "env/all/initial_raw_score": -1.5140903642089087,
60 "env/all/initial_raw_score/min": -1.5166624888783131,
61 "env/all/initial_raw_score/max": -1.5086592114951622,
62 "env/all/msg": "RuntimeError: Program execution failed: IndexError: list index out of range",
63 "env/all/parsed_code": "```python\n# HYBRID LP + MULTI-CONVOLUTION CONSTRAINT SEARCH with DYNAMIC PERTURBATION for C1 MINIMIZATION\n\"\"\"Adaptive multi-constraint LP search with dynamic perturbation and structured initialization for optimizing step function evaluation.\"\"\"\nimport time\nimport numpy as np\nfrom scipy import optimize\nimport copy\n\nlinprog = optimize.linprog\nfrom scipy.optimize import Bounds\n\ndef get_good_direction_to_move_into(sequence):\n \"\"\"Computes a better sequence using multi-constraint LP with dynamic perturbation.\"\"\"\n n = len(sequence)\n if n == 0:\n return None\n\n sum_sequence = np.sum(sequence)\n if sum_sequence <= 0.0:\n return None\n\n # Compute convolution and select top K constraints\n conv = np.convolve(sequence, sequence)\n max_b = np.max(conv)\n\n # Select top K most restrictive positions dynamically\n K = min(50, len(conv))\n relevant_indices = np.argsort(conv)[-K:]\n\n # Solve LP with the selected constraints\n g_fun = solve_convolution_lp(sequence, max_b, relevant_indices)\n if g_fun is None:\n return None\n\n sum_g = np.sum(g_fun)\n if sum_g <= 0.0:\n return None\n\n # Normalize to maintain consistent scaling\n normalization_factor = np.sqrt(2 * n) / sum_g\n normalized_g = [x * normalization_factor for x in g_fun]\n\n # Adaptive step size with line search\n best_t = 0.01\n best_score = float('inf')\n for t in [0.01, 0.05, 0.1, 0.2]:\n new_sequence = [(1 - t) * x + t * y for x, y in zip(sequence, normalized_g)]\n try:\n curr_score = evaluate_sequence(new_sequence)\n if curr_score < best_score:\n best_t = t\n best_score = curr_score\n except Exception:\n continue\n\n return [(1 - best_t) * x + best_t * y for x, y in zip(sequence, normalized_g)]\n\n\ndef solve_convolution_lp(f_sequence, rhs, relevant_positions):\n \"\"\"Solves linear program with dynamic constraint selection and relaxed bounds.\"\"\"\n n = len(f_sequence)\n if n == 0:\n return None\n\n # Construct constraint matrix\n a_ub = []\n b_ub = []\n for k in relevant_positions:\n row = np.zeros(n)\n for i in range(n):\n j = k - i\n if 0 <= j < n:\n row[j] = f_sequence[i]\n a_ub.append(row)\n b_ub.append(rhs)\n \n # Add non-negativity constraints\n a_ub_nonneg = -np.eye(n)\n b_ub_nonneg = np.zeros(n)\n a_ub = np.vstack([a_ub, a_ub_nonneg])\n b_ub = np.hstack([b_ub, b_ub_nonneg])\n\n # Solve LP with optimized settings\n result = linprog(\n c=-np.ones(n), # Maximize sum of variables\n A_ub=a_ub,\n b_ub=b_ub,\n bounds=[(0, 1000.0) for _ in range(n)],\n method='highs',\n options={\n \"time_limit\": 15.0,\n \"disp\": False,\n \"presolve\": True\n },\n )\n if result.success:\n return result.x\n return None\n\n\ndef perturb_sequence(seq):\n \"\"\"Dynamic perturbation targeting high-impact positions in convolution.\"\"\"\n n = len(seq)\n conv = np.convolve(seq, seq)\n # Target top 5 positions where convolution is highest\n top_positions = np.argsort(conv)[-5:]\n idx = np.random.choice(top_positions)\n # Apply larger perturbation to low values, smaller to high values\n value = seq[idx]\n if value < 0.1:\n perturbation = np.random.normal(0, 0.08) * 0.5\n else:\n perturbation = np.random.normal(0, 0.03) * 0.5\n new_val = max(0.0, value + perturbation)\n return [new_val if i == idx else seq[i] for i in range(n)]\n\n\ndef propose_candidate(seed=42, budget_s=1000, **kwargs):\n \"\"\"\n Proposes a candidate sequence using adaptive LP search with multi-constraint optimization.\n Starts from the previous best or generates an informed initial sequence.\n \"\"\"\n np.random.seed(seed)\n deadline = time.time() + budget_s - 10\n \n # Start with previous best if available\n prev = globals().get(\"GLOBAL_BEST_CONSTRUCTION\", None)\n if np.random.rand() < 0.35 and prev is not None and len(prev) > 0:\n best_sequence = list(np.asarray(prev, dtype=float))\n else:\n # Initial sequence with structured peaks\n n = 1000\n base = np.zeros(n)\n base[::100] = 1.0\n base = np.clip(base + np.random.normal(0, 0.1, n), 0, 1000)\n best_sequence = list(base)\n \n current_sequence = best_sequence.copy()\n best_score = evaluate_sequence(best_sequence)\n \n # Warm-up phase: use more aggressive perturbation\n for _ in range(5):\n if time.time() >= deadline:\n break\n new_seq = perturb_sequence(current_sequence)\n try:\n new_score = evaluate_sequence(new_seq)\n if new_score < best_score:\n best_score = new_score\n best_sequence = new_seq\n current_sequence = new_seq\n print(f\"Warm-up improvement: {best_score}\")\n except Exception:\n pass\n \n # Main optimization loop\n while time.time() < deadline:\n # Try LP improvement\n h_function = get_good_direction_to_move_into(current_sequence)\n if h_function is None:\n # Use targeted perturbation\n current_sequence = perturb_sequence(current_sequence)\n else:\n current_sequence = h_function\n \n try:\n curr_score = evaluate_sequence(current_sequence)\n if curr_score < best_score:\n best_score = curr_score\n best_sequence = current_sequence.copy()\n print(f\"New best: {best_score}\")\n except Exception:\n continue\n \n # Final safeguard: return best sequence with proper bounds\n return [float(max(0.0, x)) for x in best_sequence]\n```",
64 "env/all/time/policy": 265.73105007829145,
65 "env/all/time/policy/min": 129.46050429344177,
66 "env/all/time/policy/max": 372.39556312561035,
67 "env/all/time/env_step": 2171.537565194536,
68 "env/all/time/env_step/min": 0.006821870803833008,
69 "env/all/time/env_step/max": 4813.8578724861145,
70 "env/all/time/reward_compute": 9.005889296531677e-07,
71 "env/all/time/reward_compute/min": 2.4959444999694824e-07,
72 "env/all/time/reward_compute/max": 2.25752592086792e-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.019818032160401344,
77 "advantage/min": -1.0,
78 "advantage/max": 4.874016761779785,
79 "time/assemble_training_data": 5.453805923461914,
80 "time/kl_vs_base": 77.61536431312561,
81 "kl_policy_base": 0.0006177406175993383,
82 "time/train": 499.8342909812927,
83 "time/save_checkpoint": 10.126113891601562,
84 "time/total": 5761.587574005127
85}[2026-07-09T06:24:18+00:00] job=1812630 node=node-14 ngpu=3 ntrain=1 replicas=2 flash_attn=no
[2026-07-09T09:14:17+00:00] job=1813129 node=node-28 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-09T13:46:36+00:00] job=1813130 node=node-22 ngpu=6 ntrain=2 replicas=4 flash_attn=yes