Views
No views yet
ac1. Checkpoint saved
after training step 14 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 14,
3 "progress/batch": 14,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.3,
6 "puct/buffer_size": 232,
7 "puct/sampled_size": 8,
8 "puct/T": 7168,
9 "puct/scale_last": 0.5735853592883937,
10 "puct/buffer_value/mean": -1.550979858051361,
11 "puct/buffer_value/std": 0.1257393460361321,
12 "puct/buffer_value/min": -2.0797874683482562,
13 "puct/buffer_value/max": -1.5062021090598625,
14 "puct/buffer_timestep/mean": 6.241379310344827,
15 "puct/buffer_timestep/std": 4.190754786874301,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 13.0,
18 "puct/buffer_construction_len/mean": 1258.5775862068965,
19 "puct/buffer_construction_len/std": 1064.411681042162,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7850.0,
22 "puct/sampled_value/mean": -1.5062789589401255,
23 "puct/sampled_value/std": 4.285933009387e-05,
24 "puct/sampled_value/min": -1.5063036919506334,
25 "puct/sampled_value/max": -1.5062021090598625,
26 "puct/sampled_timestep/mean": 13.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 13.0,
29 "puct/sampled_timestep/max": 13.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": 5335.010577917099,
35 "env/all/ac_tokens_per_turn": 8142.787109375,
36 "env/all/ob_tokens_per_turn": 2895.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": 4169107,
41 "env/all/total_ob_tokens": 1482304,
42 "env/all/time/sampling_mean": 281.0934245791286,
43 "env/all/time/sampling_max": 359.37439465522766,
44 "env/all/time/env_step_mean": 2531.403828400653,
45 "env/all/time/env_step_max": 4989.724637508392,
46 "env/all/reward/mean": 0.547094700812188,
47 "env/all/reward/max": 0.6639326153789163,
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.547094700812188,
53 "env/all/correctness": 0.849609375,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 1.8434986634019817,
57 "env/all/raw_score/min": 1.5061769375344798,
58 "env/all/raw_score/max": 125.5484796931534,
59 "env/all/initial_raw_score": -1.5062789589401258,
60 "env/all/initial_raw_score/min": -1.5063036919506334,
61 "env/all/initial_raw_score/max": -1.5062021090598625,
62 "env/all/msg": "Success; raw_score=1.5061974744517268",
63 "env/all/parsed_code": "```python\n\"\"\"Optimized Step Function Search with Fixed Normalization and Adaptive Convolution Constraints\"\"\"\n\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 larger size for better attack surface\n # Generate multiple initial sequences for diverse starting points\n initial_sequences = []\n for _ in range(3):\n if np.random.rand() < 0.4:\n # Cosine-like pattern for structured structure\n base = np.cos(np.linspace(0, np.pi, n)) * 0.2 + 0.1\n elif np.random.rand() < 0.5:\n # Uniform distribution with higher density\n base = np.random.uniform(0.01, 0.05, size=n)\n else:\n # Exponential distribution for more variance\n base = np.random.exponential(scale=0.01, size=n)\n sum_base = np.sum(base)\n target_sum = np.sqrt(2 * n)\n scale_factor = target_sum / sum_base\n seq = [max(0.0, x * scale_factor) for x in base]\n initial_sequences.append(seq)\n best_sequence = initial_sequences[0]\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\n\n current_sequence = best_sequence.copy()\n best_score = float('inf')\n target_sum = np.sqrt(2 * len(current_sequence))\n\n def get_good_direction_to_move_into(sequence):\n \"\"\"Computes a better sequence using dynamic constraint selection and adaptive line search.\"\"\"\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 conv = np.convolve(sequence, sequence)\n max_b_val = np.max(conv)\n\n # Selecting tight positions based on current max_b_val\n tolerance = max_b_val * 0.03\n tight_positions = np.where(conv >= max_b_val - tolerance)[0]\n if len(tight_positions) < int(len(conv)*0.05):\n tight_positions = np.argsort(conv)[::-1][:int(len(conv)*0.05)]\n if not tight_positions.size:\n tight_positions = np.arange(2 * n - 1)\n\n # Solve LP with enhanced constraint selection\n g_fun = solve_convolution_lp(sequence, max_b_val, tight_positions)\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 # Multi-step line search with adaptive t values and increased iterations\n best_t = 0.01\n best_score = float('inf')\n low, high = 0.005, 0.5\n for _ in range(300): # Increased iteration count for precision\n mid = (low + high) / 2\n new_seq = [(1 - mid)*x + mid*y for x, y in zip(sequence, g_fun)]\n new_sum = np.sum(new_seq)\n scaling_factor = target_sum / new_sum\n new_seq = [x * scaling_factor for x in new_seq]\n try:\n curr_score = evaluate_sequence(new_seq)\n if curr_score < best_score:\n best_score = curr_score\n best_t = mid\n print(f\"New best: {best_score}\")\n if curr_score < best_score:\n low = mid\n else:\n high = mid\n except Exception:\n continue\n\n return [(1 - best_t)*x + best_t*y for x, y in zip(sequence, g_fun)]\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), equivalent to minimize -sum(g_j)\n objective = cp.Minimize(-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 for appropriate i\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 # Add constraint with safety margin\n constraints.append(cp.sum(coeff * g) <= rhs * 1.005) # Tighter margin for precision\n\n # Solve the LP\n problem = cp.Problem(objective, constraints)\n try:\n problem.solve(solver=cp.GLPK, 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 \"\"\"Perturbation with structured strategies for local minima escape.\"\"\"\n conv = np.convolve(seq, seq)\n top_indices = np.argsort(conv)[-15:]\n indices = np.random.choice(top_indices, size=min(15, len(top_indices)), replace=False)\n indices = [min(idx, len(seq)-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(len(seq))]\n # Scale to maintain target_sum\n current_sum = np.sum(seq)\n scaling_factor = target_sum / current_sum\n seq = [x * scaling_factor for x in seq]\n return seq\n\n def random_walk(seq):\n \"\"\"Adds small random perturbations to all elements while maintaining sum.\"\"\"\n scale = 0.05 * np.std(seq)\n new_seq = [max(0.0, x + np.random.normal(0, scale)) for x in seq]\n new_sum = np.sum(new_seq)\n scaling_factor = target_sum / new_sum\n new_seq = [x * scaling_factor for x in new_seq]\n return 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.05:\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": 281.0934245791286,
65 "env/all/time/policy/min": 94.26162481307983,
66 "env/all/time/policy/max": 359.37439465522766,
67 "env/all/time/env_step": 2531.403828400653,
68 "env/all/time/env_step/min": 0.006440639495849609,
69 "env/all/time/env_step/max": 4989.724637508392,
70 "env/all/time/reward_compute": 4.866160452365875e-07,
71 "env/all/time/reward_compute/min": 2.905726432800293e-07,
72 "env/all/time/reward_compute/max": 1.0989606380462646e-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.01758163422346115,
77 "advantage/min": -1.0,
78 "advantage/max": 1.5466949939727783,
79 "time/assemble_training_data": 9.588677644729614,
80 "time/kl_vs_base": 90.23750710487366,
81 "kl_policy_base": 0.0008538885158486664,
82 "time/train": 524.2339634895325,
83 "time/save_checkpoint": 23.918071508407593,
84 "time/total": 5984.994057416916
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