Modal Research Exchange

you are

Agent sparse weight edits vs unedited Qwen3.5-2B on GSM8K

Succeeded not supported Devin Qwen/Qwen3.5-2B EVAL_ONLY 2.0 GPU-h budget started 14h ago 44m 36s
Redo
Pick where the agent works.
View session in Devin ↗

On fork spindle-fork-run_5cc69b7d9c (weight-write API that encodes sparse row/column edits as exact LoRA factors), a Qwen3.8-27B editor ran 50 gradient-free iterations on Qwen/Qwen3.5-2B and kept 3 edits (49,152 values, well under the 320K budget), raising dev-200 accuracy from 0.77 to 0.81. On the 500 held-out GSM8K test problems the edited model scored 73.4% versus 74.4% for the unedited base (-1.0 point), so the hypothesis is refuted.

Not supported The agent judged the hypothesis refuted; no effect size was recorded against the margin.

Result

No arm results yet.

base_dev_acc
0.77
best_dev_acc
0.81
iterations_run
50
edits_accepted
3
values_touched
49,152
base_test_acc
0.744
edited_test_acc
0.734
base_test_correct
372
edited_test_correct
367
test_n
500
delta_points
-1
wall_minutes_search_and_eval
24.3
Changes from the spec 0

Not recorded: this run didn't report its changes from the spec, so they are unknown.

Checks · activation unverified · evaluator unknown · feasibility unknown
Custom implementation correctness: unverified
Correctness preflight was not recorded.
Validates executor-reported evidence; autonomous training calls are not blocked by this server.
Treatment activation: unverified
The spec has no activation gate or experiment features (it predates them), so whether the treatment engaged is unknown.
Initialization / optimizer verification: unverified
Initialization and optimizer evidence was not required by this saved spec.
Research decision: unknown
No prespecified decision rule was recorded.
Adaptation batches across paired arms: unknown (not verified)
The spec does not declare whether this check applies, and the run did not verify it. The run did not report adaptation batch manifests.
Evaluator comparability: unknown
Evaluator provenance was not recorded.
Generator reward audit
Generator reward audit: Unknown whether this run needed a teacher reward audit: its spec does not declare whether a teacher or task generator is trained. Nothing was recorded, so reward contributions are unknown.
Feasibility projection: unknown
Projected costs, not measured GPU usage.
Measured feasibility was not recorded for this run.
Generated task audit: unverified: no audit recorded
Answer agreement with recorded independent solutions does not establish semantic correctness. Normalized exact overlap does not detect paraphrases.
Spec exp_699cc61a3f
Instructions given to Devin
Redo: the previous run lost iterations to proxy 401s calling its fork. Call your fork with the RUNS_PROXY_TOKEN_* headers.

Hypothesis

Qwen3.5-2B after agent-chosen direct weight edits touching at most 0.016% of parameters beats the unedited Qwen3.5-2B by at least 5 points exact-match on 500 held-out GSM8K test problems.

Success criterion

Validated if the edited model's GSM8K test exact-match exceeds the baseline by at least 5.0 points, roughly 2x the ~2.2-point standard error at n=500, and all edits stay within 320K parameters. Failed if the gain is under 2 points. Anything in between is inconclusive.

gsm8k 50 steps batch 200 150 min wall budget
Method
Needs a Spindle fork that adds a weight-write API: an endpoint that takes (tensor name, index set, new values) and writes them into a copy of the served model's weights, then exposes that copy to the sampling client. Qwen3.5-0.8B is not served, so Qwen/Qwen3.5-2B, the closest served model, is used. The edit budget is 0.016% of parameters, about 320K values. The editor agent is Qwen/Qwen3.8-27B through the sampling client. It sees the layer and tensor names, the current dev score and failure examples, and proposes one sparse edit per iteration, such as scaling selected rows or columns, adding small offsets, or changing norm gains. Each edit is applied through the fork and scored on 200 GSM8K train problems used as a dev set. An edit is kept only if the dev score improves, and edits accumulate within the budget. The loop runs for 50 iterations with no gradients. The final edited model and the unedited baseline are then scored on 500 GSM8K test problems, never seen during the search. Both use the same chat template, the same 4-shot-free zero-shot prompt with a 'final answer after ####' instruction, greedy decoding and max 512 tokens. No LoRA is trained.
Baseline
Unedited Qwen/Qwen3.5-2B, scored on the same 500 GSM8K test problems with the identical prompt, renderer, greedy decoding and 512-token limit.
Full spec
{
  "base_model": "Qwen/Qwen3.5-2B",
  "baseline": "Unedited Qwen/Qwen3.5-2B, scored on the same 500 GSM8K test problems with the identical prompt, renderer, greedy decoding and 512-token limit.",
  "batch_size": 200,
  "budget": {
    "gpu_hours": 2.0,
    "max_wall_minutes": 150
  },
  "command": "python edit_search.py  # tinker SDK: sc = tinker.ServiceClient(base_url=os.environ['TINKER_BASE_URL']); agent = sc.create_sampling_client(base_model='Qwen/Qwen3.8-27B'); for it in range(50): edit = propose(agent, history); handle = fork_weight_write('Qwen/Qwen3.5-2B', edit)  # CUSTOM: endpoint added in the Spindle fork; target = sc.create_sampling_client(model_path=handle); score = gsm8k_eval(target, dev200); keep edit if score improves; final: gsm8k_eval on test500 for edited model and for sc.create_sampling_client(base_model='Qwen/Qwen3.5-2B')",
  "dataset": {
    "hf_path": "openai/gsm8k",
    "n_examples": 700,
    "name": "gsm8k",
    "split": "train (200 dev for search), test (500 held-out eval)"
  },
  "eval": {
    "benchmark": "GSM8K test",
    "metric": "exact-match accuracy on final numeric answer",
    "n_examples": 500
  },
  "hypothesis": "Qwen3.5-2B after agent-chosen direct weight edits touching at most 0.016% of parameters beats the unedited Qwen3.5-2B by at least 5 points exact-match on 500 held-out GSM8K test problems.",
  "lora_rank": 0,
  "max_seq_len": 1024,
  "method": "Needs a Spindle fork that adds a weight-write API: an endpoint that takes (tensor name, index set, new values) and writes them into a copy of the served model's weights, then exposes that copy to the sampling client. Qwen3.5-0.8B is not served, so Qwen/Qwen3.5-2B, the closest served model, is used. The edit budget is 0.016% of parameters, about 320K values. The editor agent is Qwen/Qwen3.8-27B through the sampling client. It sees the layer and tensor names, the current dev score and failure examples, and proposes one sparse edit per iteration, such as scaling selected rows or columns, adding small offsets, or changing norm gains. Each edit is applied through the fork and scored on 200 GSM8K train problems used as a dev set. An edit is kept only if the dev score improves, and edits accumulate within the budget. The loop runs for 50 iterations with no gradients. The final edited model and the unedited baseline are then scored on 500 GSM8K test problems, never seen during the search. Both use the same chat template, the same 4-shot-free zero-shot prompt with a 'final answer after ####' instruction, greedy decoding and max 512 tokens. No LoRA is trained.",
  "optimizer": {
    "lr": 0.0,
    "name": "none (agent-driven direct weight edits via fork weight-write API)"
  },
  "steps": 50,
  "success_criterion": "Validated if the edited model's GSM8K test exact-match exceeds the baseline by at least 5.0 points, roughly 2x the ~2.2-point standard error at n=500, and all edits stay within 320K parameters. Failed if the gain is under 2 points. Anything in between is inconclusive.",
  "title": "Agent sparse weight edits vs unedited Qwen3.5-2B on GSM8K",
  "training_type": "eval_only"
}
Evidence

Unknown: this run has no recorded evidence bundle.

All metrics
base_dev_acc
0.77
best_dev_acc
0.81
iterations_run
50
edits_accepted
3
values_touched
49,152
base_test_acc
0.744
edited_test_acc
0.734
base_test_correct
372
edited_test_correct
367
test_n
500
delta_points
-1
wall_minutes_search_and_eval
24.3
Agent trace full trace with commands in Devin ↗
Details
run
run_5cc69b7d9c
backend
Devin
session
devin-d5185da7b2c443d8bc72e92e2a3c83a9
experiment
exp_699cc61a3f
created
Nov 3, 13:28 UTC
started
Nov 3, 13:28 UTC
finished
Nov 3, 14:13 UTC
duration
44m 36s
GPU-h budget
2.0
wall budget
150 min
base model
Qwen/Qwen3.5-2B
training
EVAL_ONLY
dataset
gsm8k
Other runs of this idea

Submit an idea

Most ideas come in from Slack threads. Use this when yours is not in one yet; the triage agent picks it up.