Views
No views yet
ac1. Checkpoint saved
after training step 41 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 41,
3 "progress/batch": 41,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.84,
6 "puct/buffer_size": 664,
7 "puct/sampled_size": 8,
8 "puct/T": 20992,
9 "puct/scale_last": 0.575029249229154,
10 "puct/buffer_value/mean": -1.5214025546250234,
11 "puct/buffer_value/std": 0.07742122070319203,
12 "puct/buffer_value/min": -2.0797874683482562,
13 "puct/buffer_value/max": -1.5047582191191022,
14 "puct/buffer_timestep/mean": 19.746987951807228,
15 "puct/buffer_timestep/std": 11.981756587728098,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 40.0,
18 "puct/buffer_construction_len/mean": 1090.3463855421687,
19 "puct/buffer_construction_len/std": 641.1371513837939,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7850.0,
22 "puct/sampled_value/mean": -1.5047593223085962,
23 "puct/sampled_value/std": 7.617999582439042e-07,
24 "puct/sampled_value/min": -1.5047608589787889,
25 "puct/sampled_value/max": -1.5047582191191022,
26 "puct/sampled_timestep/mean": 40.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 40.0,
29 "puct/sampled_timestep/max": 40.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": 6291.636469364166,
35 "env/all/ac_tokens_per_turn": 7929.4140625,
36 "env/all/ob_tokens_per_turn": 4076.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": 4059860,
41 "env/all/total_ob_tokens": 2087232,
42 "env/all/time/sampling_mean": 290.8040138068609,
43 "env/all/time/sampling_max": 368.5008637905121,
44 "env/all/time/env_step_mean": 3121.4613684541546,
45 "env/all/time/env_step_max": 5927.973473548889,
46 "env/all/reward/mean": 0.6109710608434402,
47 "env/all/reward/max": 0.6645612926433909,
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.6109710608434402,
53 "env/all/correctness": 0.923828125,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 1.5139181183236523,
57 "env/all/raw_score/min": 1.5047520889709647,
58 "env/all/raw_score/max": 2.625049468796439,
59 "env/all/initial_raw_score": -1.5047593223085958,
60 "env/all/initial_raw_score/min": -1.5047608589787889,
61 "env/all/initial_raw_score/max": -1.5047582191191022,
62 "env/all/msg": "Evaluation timed out after 1100 seconds.",
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 \"\"\"\n Optimizes a sequence of non-negative coefficients to minimize the evaluation function.\n This approach combines hybrid exploration strategies, adaptive expansion, and improved LP constraints.\n \"\"\"\n np.random.seed(seed)\n deadline = time.time() + budget_s - 10\n\n # Initialize from the best known construction\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 # Generate diverse initial sequences with varied patterns\n initial_sequences = []\n base_lengths = [128, 256, 512, 1024]\n for _ in range(20): # Increased diversity\n base_len = np.random.choice(base_lengths)\n base = np.zeros(base_len)\n if np.random.rand() < 0.35: # Single peak\n peak_idx = np.random.randint(base_len)\n base[peak_idx] = np.random.uniform(0.1, 0.5)\n elif np.random.rand() < 0.35: # Multi-peak\n num_peaks = np.random.randint(3, 7)\n for i in range(num_peaks):\n x = np.random.uniform(0, 1)\n base += np.exp(-((np.linspace(0, 1, base_len) - x)**2)*10) * np.random.uniform(0.05, 0.2)\n else: # Random but smooth\n base = np.random.rand(base_len) * 0.5 + np.exp(-np.linspace(0, 1, base_len)**2 * 10) * 0.1\n sum_base = np.sum(base)\n target_sum = np.sqrt(2 * base_len)\n if sum_base > 0:\n scale_factor = target_sum / sum_base\n else:\n scale_factor = target_sum / 0.5 # default if sum_base is zero\n scaled_base = [max(0.0, min(1000.0, x * scale_factor)) for x in base]\n initial_sequences.append(scaled_base)\n best_sequence = initial_sequences[0].copy()\n for seq in initial_sequences:\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 best_sequence = list(current_sequence)\n\n def perturb_sequence(seq):\n \"\"\"Focused perturbations on top and middle convolution positions.\"\"\"\n n = len(seq)\n if n == 0:\n return None\n conv = np.convolve(seq, seq)\n top_indices = np.argsort(conv)[-int(n * 0.3):] # 30% of top positions\n middle_indices = np.arange(n)[np.argsort(conv)[int(n*0.2):int(n*0.8)]] # Middle 60%\n indices = np.random.choice(np.concatenate((top_indices, middle_indices)), size=min(40, len(top_indices)+len(middle_indices)), replace=False)\n indices = [min(idx, len(seq)-1) for idx in indices]\n scale = 0.15 * np.std(seq) # Larger perturbation scale\n for idx in indices:\n new_val = max(0.0, seq[idx] - np.random.normal(0, scale))\n seq = [new_val if i == idx else seq[i] for i in range(len(seq))]\n return seq\n\n def random_walk(seq):\n \"\"\"Adaptive large perturbations for exploration with dynamic scale.\"\"\"\n scale = 0.4 * np.std(seq)\n new_seq = [max(0.0, x + np.random.normal(0, scale)) for x in seq]\n return new_seq\n\n def get_good_direction_to_move_into(sequence):\n \"\"\"Optimized LP move with adaptive constraints and threshold.\"\"\"\n n = len(sequence)\n sum_sequence = np.sum(sequence)\n if sum_sequence <= 0.0:\n return None\n conv = np.convolve(sequence, sequence)\n max_b_val = np.max(conv)\n \n # Adaptive threshold adjustment\n threshold_scale = 0.25 # More aggressive thresholding\n threshold = max(0.4 * max_b_val, 0.05 * max_b_val * np.sqrt(n)) if max_b_val > 0 else 0.02\n tight_positions = np.where(conv >= threshold)[0]\n if not tight_positions.size:\n tight_positions = np.arange(2 * n - 1)\n \n g_fun = solve_convolution_lp(sequence, threshold, tight_positions, threshold_scale=threshold_scale)\n if g_fun is None:\n return None\n sum_g = np.sum(g_fun)\n if sum_g <= 0.0:\n return None\n \n # Optimized golden section search with lower resolution\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 low, high = 0.0, 1.0\n for _ in range(60):\n t1 = low + (high - low) / 3\n t2 = high - (high - low) / 3\n f1 = objective(t1)\n f2 = objective(t2)\n if f1 < f2:\n high = t2\n else:\n low = t1\n best_t = (low + high) / 2\n new_seq = [ (1 - best_t) * x + best_t * y for x, y in zip(sequence, g_fun) ]\n # Normalize\n new_seq = [max(0.0, x) for x in new_seq]\n target_sum = np.sqrt(2 * len(new_seq))\n if np.sum(new_seq) > 0:\n scale_factor = target_sum / np.sum(new_seq)\n else:\n scale_factor = target_sum / 0.5\n new_seq = [x * scale_factor for x in new_seq]\n return new_seq\n\n def solve_convolution_lp(f_sequence, rhs, tight_positions, threshold_scale=0.5):\n n = len(f_sequence)\n if n == 0:\n return None\n g = cp.Variable(n, nonneg=True)\n objective = cp.Minimize(-cp.sum(g))\n constraints = []\n for k in tight_positions:\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) <= threshold_scale * rhs)\n problem = cp.Problem(objective, constraints)\n try:\n problem.solve(solver=cp.GLPK, verbose=False, eps=1e-6)\n return g.value if problem.status == cp.OPTIMAL else None\n except:\n return None\n\n def expand_sequence(seq):\n \"\"\"Expand sequence with adaptive insertion and thorough line search.\"\"\"\n n = len(seq)\n if n >= 1500:\n return seq\n current_sum = np.sum(seq)\n conv = np.convolve(seq, seq)\n max_b = np.max(conv)\n \n def eval_func(x):\n new_seq = seq.copy()\n new_seq.append(x)\n new_sum = current_sum + x\n # Normalize\n target_sum = np.sqrt(2 * (n + 1))\n if new_sum > 0:\n scale_factor = target_sum / new_sum\n else:\n scale_factor = target_sum / 0.5\n new_seq_scaled = [y * scale_factor for y in new_seq]\n new_conv = np.convolve(new_seq_scaled, new_seq_scaled)\n new_max_b = np.max(new_conv)\n if new_sum < 0.01:\n return float('inf')\n return 2 * (n + 1) * new_max_b / (new_sum ** 2)\n \n # Line search around the current last element's value\n initial_x = seq[-1] if n > 0 else 0.01\n best_x = initial_x\n best_score = eval_func(best_x)\n \n # Try a range of x values around initial_x\n for delta in [ -0.5, -0.4, -0.3, -0.2, -0.15, -0.1, -0.05, -0.025, 0.0, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5 ]:\n x_candidate = initial_x + delta\n x_candidate = max(0.0, x_candidate)\n score = eval_func(x_candidate)\n if score < best_score:\n best_score = score\n best_x = x_candidate\n \n # Try additional fixed values\n for x_candidate in [0.01, 0.02, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5]:\n score = eval_func(x_candidate)\n if score < best_score:\n best_score = score\n best_x = x_candidate\n \n new_seq = seq + [best_x]\n # Normalize\n new_sum = np.sum(new_seq)\n target_sum = np.sqrt(2 * (n + 1))\n if new_sum > 0:\n scale_factor = target_sum / new_sum\n else:\n scale_factor = target_sum / 0.5\n new_seq = [x * scale_factor for x in new_seq]\n return new_seq\n\n def structured_balancing(seq):\n \"\"\"Targeted adjustments on peak positions and their neighbors with dynamic focus.\"\"\"\n seq = [max(0.0, x) for x in seq]\n n = len(seq)\n conv = np.convolve(seq, seq)\n peak_indices = np.argsort(conv)[-30:] # Focus on most critical positions\n peak_indices = np.array([min(idx, n-1) for idx in peak_indices])\n for idx in peak_indices:\n if seq[idx] > 0.0:\n seq[idx] = max(0.0, seq[idx] * 0.95) # Gently reduce peak\n for shift in [-1, 0, 1]:\n neighbor_idx = idx + shift\n if 0 <= neighbor_idx < n:\n seq[neighbor_idx] = min(1000.0, seq[neighbor_idx] * 1.1) # Increase neighbors\n return [max(0.0, min(1000.0, x)) for x in 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 not None:\n current_sequence = h_function\n else:\n # Expand if not already at limit\n if len(current_sequence) < 1500:\n current_sequence = expand_sequence(current_sequence)\n else:\n current_sequence = perturb_sequence(current_sequence)\n\n # Occasionally try random walk for exploration\n if np.random.rand() < 0.05:\n current_sequence = random_walk(current_sequence)\n\n # Apply structured balancing to refine\n if np.random.rand() < 0.05: # Increased frequency\n current_sequence = structured_balancing(current_sequence)\n\n try:\n # Normalize current_sequence\n target_sum = np.sqrt(2 * len(current_sequence))\n if np.sum(current_sequence) > 0:\n scale_factor = target_sum / np.sum(current_sequence)\n else:\n scale_factor = target_sum / 0.5\n current_sequence = [max(0.0, x * scale_factor) for x in current_sequence]\n current_sequence = [min(1000.0, max(0.0, x)) for x in current_sequence]\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": 290.8040138068609,
65 "env/all/time/policy/min": 135.30590796470642,
66 "env/all/time/policy/max": 368.5008637905121,
67 "env/all/time/env_step": 3121.4613684541546,
68 "env/all/time/env_step/min": 1.7722711563110352,
69 "env/all/time/env_step/max": 5927.973473548889,
70 "env/all/time/reward_compute": 4.98257577419281e-07,
71 "env/all/time/reward_compute/min": 2.0116567611694336e-07,
72 "env/all/time/reward_compute/max": 1.996755599975586e-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.013288063928484917,
77 "advantage/min": -1.0,
78 "advantage/max": 10.038365364074707,
79 "time/assemble_training_data": 6.540273427963257,
80 "time/kl_vs_base": 95.66814875602722,
81 "kl_policy_base": 0.000868582574184984,
82 "time/train": 577.4524383544922,
83 "time/save_checkpoint": 28.749743223190308,
84 "time/total": 7003.017857789993
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
[2026-07-11T14:04:05+00:00] job=1824338 node=node-1 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-12T06:23:00+00:00] job=1827205 node=node-14 ngpu=6 ntrain=2 replicas=4 flash_attn=yes