Views
No views yet
ac1. Checkpoint saved
after training step 18 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 18,
3 "progress/batch": 18,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.38,
6 "puct/buffer_size": 296,
7 "puct/sampled_size": 8,
8 "puct/T": 9216,
9 "puct/scale_last": 0.5740358075986212,
10 "puct/buffer_value/mean": -1.5412748945773764,
11 "puct/buffer_value/std": 0.11284216655887214,
12 "puct/buffer_value/min": -2.0797874683482562,
13 "puct/buffer_value/max": -1.505751660749635,
14 "puct/buffer_timestep/mean": 8.243243243243244,
15 "puct/buffer_timestep/std": 5.344385310420472,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 17.0,
18 "puct/buffer_construction_len/mean": 1202.668918918919,
19 "puct/buffer_construction_len/std": 948.3333843922637,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7850.0,
22 "puct/sampled_value/mean": -1.505819755934605,
23 "puct/sampled_value/std": 4.963198208582355e-05,
24 "puct/sampled_value/min": -1.50587194807894,
25 "puct/sampled_value/max": -1.505751660749635,
26 "puct/sampled_timestep/mean": 17.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 17.0,
29 "puct/sampled_timestep/max": 17.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": 5582.291729211807,
35 "env/all/ac_tokens_per_turn": 8158.076171875,
36 "env/all/ob_tokens_per_turn": 2883.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": 4176935,
41 "env/all/total_ob_tokens": 1476416,
42 "env/all/time/sampling_mean": 282.05954238725826,
43 "env/all/time/sampling_max": 352.0192391872406,
44 "env/all/time/env_step_mean": 2789.9205375416204,
45 "env/all/time/env_step_max": 5224.420923471451,
46 "env/all/reward/mean": 0.5592973592677727,
47 "env/all/reward/max": 0.6641334908768143,
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.5592973592677727,
53 "env/all/correctness": 0.892578125,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 10.900182182984858,
57 "env/all/raw_score/min": 1.5057213754397887,
58 "env/all/raw_score/max": 2000.0,
59 "env/all/initial_raw_score": -1.5058197559346052,
60 "env/all/initial_raw_score/min": -1.50587194807894,
61 "env/all/initial_raw_score/max": -1.505751660749635,
62 "env/all/msg": "Success; raw_score=1.5057529255518878",
63 "env/all/parsed_code": "```python\nimport time\nimport numpy as np\nimport cvxpy as cp\nimport copy\nimport random\n\ndef propose_candidate(seed=42, budget_s=1000, **kwargs):\n np.random.seed(seed)\n deadline = time.time() + budget_s - 10\n\n # Start from known best construction if it exists\n prev = globals().get(\"height_sequence_1\", None)\n if prev is not None and isinstance(prev, (list, np.ndarray)) and len(prev) > 0:\n best_sequence = list(np.asarray(prev, dtype=float))\n else:\n n = 1000 # Use fixed length for efficiency\n S = np.sqrt(2 * n) # Target sum for normalization\n initial_sequences = []\n for _ in range(5): # More initial sequences for diversity\n base = np.random.exponential(scale=0.3, size=n)\n sum_base = np.sum(base)\n scale_factor = S / sum_base if sum_base > 0 else 1.0\n seq = [max(0.0, x * scale_factor) for x in base]\n initial_sequences.append(seq)\n best_sequence = initial_sequences[0].copy()\n for seq in initial_sequences[1:]:\n curr_score = evaluate_sequence(seq)\n best_score = evaluate_sequence(best_sequence)\n if curr_score < best_score:\n best_sequence = seq.copy()\n \n current_sequence = best_sequence.copy()\n best_score = float('inf')\n\n def rescale_sequence(seq):\n \"\"\"Rescale the sequence to have sum sqrt(2 * len(seq))\"\"\"\n n = len(seq)\n target_sum = np.sqrt(2 * n)\n current_sum = np.sum(seq)\n if current_sum == 0:\n return [0.0] * n\n scale_factor = target_sum / current_sum\n return [max(0.0, x * scale_factor) for x in seq]\n\n def get_good_direction_to_move_into(sequence):\n \"\"\"Computes a better sequence using improved line search and constraint selection.\"\"\"\n n = len(sequence)\n if n == 0:\n return None\n\n sum_sequence = np.sum(sequence)\n conv = np.convolve(sequence, sequence)\n max_b_val = np.max(conv)\n\n # Select more impactful constraints\n top_indices = np.argsort(conv)[::-1]\n if not top_indices.size:\n top_indices = np.arange(2 * n - 1)\n\n # Solve LP with selected constraints\n g_fun = solve_convolution_lp(sequence, max_b_val, top_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 # Perform binary search on t to find optimal combination\n def objective(t):\n new_seq = [(1 - t) * x + t * y for x, y in zip(sequence, g_fun)]\n return evaluate_sequence(new_seq)\n\n # Binary search bounds\n low, high = 0.0, 1.0\n best_t = 0.0\n best_score = float('inf')\n for _ in range(200): # Increased to 200 iterations\n mid = (low + high) / 2\n curr_score = objective(mid)\n if curr_score < best_score:\n best_score = curr_score\n best_t = mid\n if curr_score < evaluate_sequence(sequence):\n high = mid\n else:\n low = mid\n\n if best_score < float('inf'):\n return [(1 - best_t) * x + best_t * y for x, y in zip(sequence, g_fun)]\n return None\n\n def solve_convolution_lp(f_sequence, rhs, tight_positions):\n \"\"\"Solves LP with enhanced constraint selection.\"\"\"\n n = len(f_sequence)\n if n == 0:\n return None\n\n # Variables\n g = cp.Variable(n, nonneg=True)\n # Objective: maximize sum(g_j)\n objective = cp.Maximize(cp.sum(g))\n\n # Constraints: ensure max(convolution) <= rhs\n constraints = []\n for k in tight_positions:\n # Coefficients for the constraint: sum_{j=0}^{n-1} f[i] * g[j] <= rhs\n coeff = np.zeros(n)\n for j in range(n):\n i = k - j\n if 0 <= i < n:\n coeff[j] = f_sequence[i]\n constraints.append(cp.sum(coeff * g) <= rhs)\n\n # Solve the LP with a more efficient solver\n problem = cp.Problem(objective, constraints)\n try:\n problem.solve(solver=cp.SCS, verbose=False)\n if problem.status == cp.OPTIMAL:\n return g.value\n except:\n return None\n return None\n\n def perturb_sequence(seq):\n \"\"\"Perturb selected elements while maintaining sum normalization.\"\"\"\n n = len(seq)\n S = np.sqrt(2 * n)\n conv = np.convolve(seq, seq)\n top_indices = np.argsort(conv)[-30:]\n indices = np.random.choice(top_indices, size=min(30, len(top_indices)), replace=False)\n indices = [min(idx, n-1) for idx in indices]\n for idx in indices:\n scale = 0.1 * np.std(seq)\n new_val = max(0.0, seq[idx] + np.random.exponential(scale) - scale * 0.3)\n seq = [new_val if i == idx else seq[i] for i in range(n)]\n return rescale_sequence(seq)\n\n def random_walk(seq):\n \"\"\"Add small random perturbations to all elements.\"\"\"\n n = len(seq)\n S = np.sqrt(2 * n)\n scale = 0.1 * np.std(seq)\n new_seq = [max(0.0, x + np.random.normal(0, scale)) for x in seq]\n return rescale_sequence(new_seq)\n\n while time.time() < deadline:\n # Try LP-based move\n h_function = get_good_direction_to_move_into(current_sequence)\n if h_function is None:\n current_sequence = perturb_sequence(current_sequence)\n else:\n current_sequence = h_function\n\n # Occasionally try random walk for exploration\n if np.random.rand() < 0.1:\n current_sequence = random_walk(current_sequence)\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 pass\n\n return [float(max(0.0, x)) for x in best_sequence]\n```",
64 "env/all/time/policy": 282.05954238725826,
65 "env/all/time/policy/min": 142.7221221923828,
66 "env/all/time/policy/max": 352.0192391872406,
67 "env/all/time/env_step": 2789.9205375416204,
68 "env/all/time/env_step/min": 0.005502939224243164,
69 "env/all/time/env_step/max": 5224.420923471451,
70 "env/all/time/reward_compute": 5.811452865600586e-07,
71 "env/all/time/reward_compute/min": 2.4586915969848633e-07,
72 "env/all/time/reward_compute/max": 1.866370439529419e-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.03304026275873184,
77 "advantage/min": -1.0,
78 "advantage/max": 16.437110900878906,
79 "time/assemble_training_data": 10.169202089309692,
80 "time/kl_vs_base": 89.5257215499878,
81 "kl_policy_base": 0.0008857426000759006,
82 "time/train": 524.3787279129028,
83 "time/save_checkpoint": 16.1472647190094,
84 "time/total": 6224.834969758987
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