Modal Research Exchange

you are

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

Failed no result Devin Qwen/Qwen3.5-2B EVAL_ONLY 2.0 GPU-h budget started 23h ago 1h 23m
Redo
Pick where the agent works.
View session in Devin ↗

The fork app spindle-fork-run_11123a121e on Qwen/Qwen3.5-2B added a weight-write API that uploads sparse row and column edits as exact LoRA factors, and it reached 13 of 50 edit iterations with the Qwen3.8-27B editor. No edit beat the unedited dev score of 0.63 on 200 examples (proposals scored 0.58 to 0.625), and the run stopped when Modal proxy auth began rejecting the fork's credentials for the research-exchange environment, so no 500-example test comparison exists.

No result No result: the run finished without measuring the effect.

Result

No arm results yet.

dev200_baseline_exact_match
0.63
dev200_best_proposal_exact_match
0.625
iterations_completed
13
edits_kept
0
fork_files_changed
10
fork_insertions
452
fork_deletions
11
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.
Executor reported inconclusive; shown as no result.
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

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
dev200_baseline_exact_match
0.63
dev200_best_proposal_exact_match
0.625
iterations_completed
13
edits_kept
0
fork_files_changed
10
fork_insertions
452
fork_deletions
11
Agent trace full trace with commands in Devin ↗
Details
run
run_11123a121e
backend
Devin
session
devin-09d3df9311954c518a7927b564fdd422
experiment
exp_699cc61a3f
redone as
run_5cc69b7d9c not supported
created
Nov 3, 05:20 UTC
started
Nov 3, 05:20 UTC
finished
Nov 3, 06:43 UTC
duration
1h 23m
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.