Modal Research Exchange

you are

Deterministic kernels vs default kernels for TriMuon replay drift

Failed no result Devin Qwen/Qwen3.5-2B SFT 1.5 GPU-h budget started 23h ago 8m 29s
Redo
Pick where the agent works.
View session in Devin ↗

Spindle serves Qwen/Qwen3.5-2B but rejected TriMuon model creation with HTTP 400, so none of the four required replays ran. A validated fork with TriMuon, seeded initialization, and deterministic backend support was not built; the hypothesis remains untested.

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

Result

No arm results yet.

supported_models
20
trimuon_probe_http_status
400
training_steps_completed
0
completed_replays
0
gpu_jobs_started
0
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.
Held-out loss aggregation
Spec asks for no specific aggregation · run reported no record, so the aggregation behind its loss numbers is 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_851a8f059a

Hypothesis

With TriMuon at FP32-core precision, two identical-seed replays run with deterministic kernels stay bitwise identical in loss and grad-norm for all 50 steps, while default-kernel replays diverge by step 6 or earlier.

Success criterion

Validated if arm B's two replays match exactly at every step (first divergence > 50, NLL difference = 0) and arm A diverges by step 6 or shows an NLL difference ≥ 1e-4. Failed (precision or another source) if arm B diverges at step ≤ 10 or its NLL difference is ≥ 1e-4.

no_robots 50 steps batch 32 LoRA r32 lr 0.0001 90 min wall budget
Method
Needs a Spindle fork. The fork adds (1) the TriMuon optimizer at FP32-core precision, which is the middle row of Aaron's table, and (2) a model-creation flag that enables torch.use_deterministic_algorithms(True), CUBLAS_WORKSPACE_CONFIG=:4096:8, deterministic attention and NCCL settings, and fixed reduction order. Deploy a throwaway copy of the fork. Train a rank-32 LoRA on Qwen/Qwen3.5-2B with SFT on no_robots for 50 steps. The data order is fixed by a precomputed index list, and the LoRA initialization uses the same seed in every run. Each arm runs twice with identical inputs. Arm A uses the default kernels and arm B uses the deterministic kernels, and nothing else differs between them. Log per-step loss and grad-norm for every run. Record the first step where the two replays differ, and the held-out NLL difference between the two replays' final checkpoints on the same 200 examples. If arm B is bitwise stable, the drift comes from kernel non-determinism. If arm B still drifts at a similar magnitude, the drift comes from precision or from client-side and batching sources. A precision sweep under deterministic kernels is the follow-up.
Baseline
Arm A: the same fork, TriMuon at FP32-core, identical seed and data order, run twice with the default (non-deterministic) kernels.
Full spec
{
  "base_model": "Qwen/Qwen3.5-2B",
  "baseline": "Arm A: the same fork, TriMuon at FP32-core, identical seed and data order, run twice with the default (non-deterministic) kernels.",
  "batch_size": 32,
  "budget": {
    "gpu_hours": 1.5,
    "max_wall_minutes": 90
  },
  "command": "# custom tinker SDK script against the fork; TriMuonOptimizerConfig/deterministic are fork-added\nimport os, tinker\nsc = tinker.ServiceClient(base_url=os.environ[\"TINKER_BASE_URL\"])\nfor det in [False, False, True, True]:\n    tc = sc.create_lora_training_client(base_model=\"Qwen/Qwen3.5-2B\", rank=32, seed=0,\n        optimizer=tinker.types.TriMuonOptimizerConfig(precision=\"fp32_core\", deterministic=det))\n    for step, batch in enumerate(fixed_batches):  # same precomputed no_robots batches, bs=32, 50 steps\n        out = tc.forward_backward(batch, loss_fn=\"cross_entropy\").result()\n        st = tc.optim_step(tinker.types.TriMuonParams(learning_rate=1e-4)).result()\n        log(det, step, out.metrics[\"loss\"], st.metrics.get(\"grad_norm\"))\n    path = tc.save_weights_for_sampler(name=f\"trimuon-det{det}\").result().path\n    eval_heldout_nll(tc, test_200)  # forward-only NLL on 200 no_robots test examples",
  "dataset": {
    "hf_path": "HuggingFaceH4/no_robots",
    "n_examples": 1600,
    "name": "no_robots",
    "split": "train (fixed 1600-example order); test for eval"
  },
  "eval": {
    "benchmark": "no_robots test held-out NLL plus per-step training traces",
    "metric": "first step where the two replays' loss or grad-norm differ; absolute difference in held-out NLL between the replays",
    "n_examples": 200
  },
  "hypothesis": "With TriMuon at FP32-core precision, two identical-seed replays run with deterministic kernels stay bitwise identical in loss and grad-norm for all 50 steps, while default-kernel replays diverge by step 6 or earlier.",
  "lora_rank": 32,
  "max_seq_len": 2048,
  "method": "Needs a Spindle fork. The fork adds (1) the TriMuon optimizer at FP32-core precision, which is the middle row of Aaron's table, and (2) a model-creation flag that enables torch.use_deterministic_algorithms(True), CUBLAS_WORKSPACE_CONFIG=:4096:8, deterministic attention and NCCL settings, and fixed reduction order. Deploy a throwaway copy of the fork. Train a rank-32 LoRA on Qwen/Qwen3.5-2B with SFT on no_robots for 50 steps. The data order is fixed by a precomputed index list, and the LoRA initialization uses the same seed in every run. Each arm runs twice with identical inputs. Arm A uses the default kernels and arm B uses the deterministic kernels, and nothing else differs between them. Log per-step loss and grad-norm for every run. Record the first step where the two replays differ, and the held-out NLL difference between the two replays' final checkpoints on the same 200 examples. If arm B is bitwise stable, the drift comes from kernel non-determinism. If arm B still drifts at a similar magnitude, the drift comes from precision or from client-side and batching sources. A precision sweep under deterministic kernels is the follow-up.",
  "optimizer": {
    "lr": 0.0001,
    "name": "trimuon (fork)"
  },
  "steps": 50,
  "success_criterion": "Validated if arm B's two replays match exactly at every step (first divergence > 50, NLL difference = 0) and arm A diverges by step 6 or shows an NLL difference \u2265 1e-4. Failed (precision or another source) if arm B diverges at step \u2264 10 or its NLL difference is \u2265 1e-4.",
  "title": "Deterministic kernels vs default kernels for TriMuon replay drift",
  "training_type": "sft"
}
Evidence

Unknown: this run has no recorded evidence bundle.

All metrics
supported_models
20
trimuon_probe_http_status
400
training_steps_completed
0
completed_replays
0
gpu_jobs_started
0
Agent trace full trace with commands in Devin ↗
Details
run
run_72fdc911ac
backend
Devin
session
devin-62314d5708c74f13a77c1c2873d21430
experiment
exp_851a8f059a
redone as
run_8f13e2e2c2 not supported
created
Nov 3, 05:20 UTC
started
Nov 3, 05:20 UTC
finished
Nov 3, 05:28 UTC
duration
8m 29s
GPU-h budget
1.5
wall budget
90 min
base model
Qwen/Qwen3.5-2B
training
SFT
dataset
no_robots
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.