@seanhogg/builderforce-memory-engine 2026.7.14 → 2026.9.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/bench/adaptation.d.ts +57 -0
- package/dist/bench/adaptation.d.ts.map +1 -0
- package/dist/bench/adaptation.js +167 -0
- package/dist/bench/adaptation.js.map +1 -0
- package/dist/bench/harness.d.ts +2 -0
- package/dist/bench/harness.d.ts.map +1 -1
- package/dist/bench/harness.js +1 -1
- package/dist/bench/harness.js.map +1 -1
- package/dist/bench/index.d.ts +5 -3
- package/dist/bench/index.d.ts.map +1 -1
- package/dist/bench/index.js +4 -2
- package/dist/bench/index.js.map +1 -1
- package/dist/bench/types.d.ts +88 -0
- package/dist/bench/types.d.ts.map +1 -1
- package/dist/evermind/adapt.d.ts +40 -0
- package/dist/evermind/adapt.d.ts.map +1 -0
- package/dist/evermind/adapt.js +25 -0
- package/dist/evermind/adapt.js.map +1 -0
- package/dist/evermind/delta_wire.d.ts +43 -0
- package/dist/evermind/delta_wire.d.ts.map +1 -0
- package/dist/evermind/delta_wire.js +94 -0
- package/dist/evermind/delta_wire.js.map +1 -0
- package/dist/evermind/eval.d.ts +31 -0
- package/dist/evermind/eval.d.ts.map +1 -0
- package/dist/evermind/eval.js +36 -0
- package/dist/evermind/eval.js.map +1 -0
- package/dist/evermind/index.d.ts +16 -0
- package/dist/evermind/index.d.ts.map +1 -0
- package/dist/evermind/index.js +11 -0
- package/dist/evermind/index.js.map +1 -0
- package/dist/evermind/merge.d.ts +21 -0
- package/dist/evermind/merge.d.ts.map +1 -0
- package/dist/evermind/merge.js +79 -0
- package/dist/evermind/merge.js.map +1 -0
- package/dist/{moe/moe_package.d.ts → evermind/package.d.ts} +55 -5
- package/dist/evermind/package.d.ts.map +1 -0
- package/dist/{moe/moe_package.js → evermind/package.js} +118 -19
- package/dist/evermind/package.js.map +1 -0
- package/dist/import/foreign/adapter.d.ts +59 -0
- package/dist/import/foreign/adapter.d.ts.map +1 -0
- package/dist/import/foreign/adapter.js +76 -0
- package/dist/import/foreign/adapter.js.map +1 -0
- package/dist/import/foreign/apply.d.ts +23 -0
- package/dist/import/foreign/apply.d.ts.map +1 -0
- package/dist/import/foreign/apply.js +43 -0
- package/dist/import/foreign/apply.js.map +1 -0
- package/dist/import/foreign/codestral_mamba.d.ts +57 -0
- package/dist/import/foreign/codestral_mamba.d.ts.map +1 -0
- package/dist/import/foreign/codestral_mamba.js +174 -0
- package/dist/import/foreign/codestral_mamba.js.map +1 -0
- package/dist/import/foreign/falcon_mamba.d.ts +51 -0
- package/dist/import/foreign/falcon_mamba.d.ts.map +1 -0
- package/dist/import/foreign/falcon_mamba.js +131 -0
- package/dist/import/foreign/falcon_mamba.js.map +1 -0
- package/dist/import/foreign/index.d.ts +21 -0
- package/dist/import/foreign/index.d.ts.map +1 -0
- package/dist/import/foreign/index.js +18 -0
- package/dist/import/foreign/index.js.map +1 -0
- package/dist/import/foreign/plan.d.ts +122 -0
- package/dist/import/foreign/plan.d.ts.map +1 -0
- package/dist/import/foreign/plan.js +171 -0
- package/dist/import/foreign/plan.js.map +1 -0
- package/dist/import/foreign/registry.d.ts +35 -0
- package/dist/import/foreign/registry.d.ts.map +1 -0
- package/dist/import/foreign/registry.js +89 -0
- package/dist/import/foreign/registry.js.map +1 -0
- package/dist/import/index.d.ts +7 -0
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +7 -0
- package/dist/import/index.js.map +1 -1
- package/dist/index.d.ts +25 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/kernels/selective_scan.d.ts.map +1 -1
- package/dist/kernels/selective_scan.js +15 -9
- package/dist/kernels/selective_scan.js.map +1 -1
- package/dist/kernels/slice.d.ts +26 -0
- package/dist/kernels/slice.d.ts.map +1 -0
- package/dist/kernels/slice.js +52 -0
- package/dist/kernels/slice.js.map +1 -0
- package/dist/kernels/weight_update.d.ts.map +1 -1
- package/dist/kernels/weight_update.js +30 -4
- package/dist/kernels/weight_update.js.map +1 -1
- package/dist/lm/evermind_lm.d.ts +110 -1
- package/dist/lm/evermind_lm.d.ts.map +1 -1
- package/dist/lm/evermind_lm.js +220 -35
- package/dist/lm/evermind_lm.js.map +1 -1
- package/dist/lm/index.d.ts +4 -2
- package/dist/lm/index.d.ts.map +1 -1
- package/dist/lm/index.js +3 -1
- package/dist/lm/index.js.map +1 -1
- package/dist/lm/text_embedder.d.ts +55 -0
- package/dist/lm/text_embedder.d.ts.map +1 -0
- package/dist/lm/text_embedder.js +62 -0
- package/dist/lm/text_embedder.js.map +1 -0
- package/dist/model/attention_block.d.ts.map +1 -1
- package/dist/model/attention_block.js +9 -5
- package/dist/model/attention_block.js.map +1 -1
- package/dist/model/mamba1_block.d.ts.map +1 -1
- package/dist/model/mamba1_block.js +28 -12
- package/dist/model/mamba1_block.js.map +1 -1
- package/dist/model/mamba2_block.d.ts.map +1 -1
- package/dist/model/mamba2_block.js +14 -9
- package/dist/model/mamba2_block.js.map +1 -1
- package/dist/model/mamba3_block.d.ts.map +1 -1
- package/dist/model/mamba3_block.js +14 -9
- package/dist/model/mamba3_block.js.map +1 -1
- package/dist/moe/index.d.ts +0 -2
- package/dist/moe/index.d.ts.map +1 -1
- package/dist/moe/index.js +0 -1
- package/dist/moe/index.js.map +1 -1
- package/dist/optim/adamw.d.ts +32 -0
- package/dist/optim/adamw.d.ts.map +1 -1
- package/dist/optim/adamw.js +34 -0
- package/dist/optim/adamw.js.map +1 -1
- package/dist/tokenizer/bpe.d.ts +28 -0
- package/dist/tokenizer/bpe.d.ts.map +1 -1
- package/dist/tokenizer/bpe.js +47 -0
- package/dist/tokenizer/bpe.js.map +1 -1
- package/dist/training/cpu_ops.d.ts +44 -0
- package/dist/training/cpu_ops.d.ts.map +1 -0
- package/dist/training/cpu_ops.js +111 -0
- package/dist/training/cpu_ops.js.map +1 -0
- package/dist/training/mamba1_cpu.d.ts +109 -0
- package/dist/training/mamba1_cpu.d.ts.map +1 -0
- package/dist/training/mamba1_cpu.js +316 -0
- package/dist/training/mamba1_cpu.js.map +1 -0
- package/dist/training/model_cpu.d.ts +100 -0
- package/dist/training/model_cpu.d.ts.map +1 -0
- package/dist/training/model_cpu.js +252 -0
- package/dist/training/model_cpu.js.map +1 -0
- package/dist/training/trainer.d.ts +156 -16
- package/dist/training/trainer.d.ts.map +1 -1
- package/dist/training/trainer.js +327 -101
- package/dist/training/trainer.js.map +1 -1
- package/dist/utils/base64.d.ts +12 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +27 -0
- package/dist/utils/base64.js.map +1 -0
- package/package.json +3 -1
- package/src/bench/adaptation.ts +180 -0
- package/src/bench/harness.ts +1 -1
- package/src/bench/index.ts +13 -2
- package/src/bench/types.ts +93 -0
- package/src/evermind/adapt.ts +61 -0
- package/src/evermind/delta_wire.ts +114 -0
- package/src/evermind/eval.ts +62 -0
- package/src/evermind/index.ts +32 -0
- package/src/evermind/merge.ts +106 -0
- package/src/{moe/moe_package.ts → evermind/package.ts} +148 -17
- package/src/import/foreign/adapter.ts +106 -0
- package/src/import/foreign/apply.ts +54 -0
- package/src/import/foreign/codestral_mamba.ts +224 -0
- package/src/import/foreign/falcon_mamba.ts +173 -0
- package/src/import/foreign/index.ts +37 -0
- package/src/import/foreign/plan.ts +294 -0
- package/src/import/foreign/registry.ts +126 -0
- package/src/import/index.ts +30 -0
- package/src/index.ts +94 -13
- package/src/kernels/selective_scan.ts +15 -9
- package/src/kernels/slice.ts +64 -0
- package/src/kernels/weight_update.ts +30 -4
- package/src/lm/evermind_lm.ts +244 -34
- package/src/lm/index.ts +6 -2
- package/src/lm/text_embedder.ts +84 -0
- package/src/model/attention_block.ts +9 -5
- package/src/model/mamba1_block.ts +28 -12
- package/src/model/mamba2_block.ts +14 -9
- package/src/model/mamba3_block.ts +14 -9
- package/src/moe/index.ts +0 -9
- package/src/optim/adamw.ts +60 -0
- package/src/tokenizer/bpe.ts +55 -0
- package/src/training/cpu_ops.ts +127 -0
- package/src/training/mamba1_cpu.ts +421 -0
- package/src/training/model_cpu.ts +360 -0
- package/src/training/trainer.ts +397 -154
- package/src/utils/base64.ts +28 -0
- package/dist/model/mamba_block.d.ts +0 -64
- package/dist/model/mamba_block.d.ts.map +0 -1
- package/dist/model/mamba_block.js +0 -303
- package/dist/model/mamba_block.js.map +0 -1
- package/dist/moe/moe_package.d.ts.map +0 -1
- package/dist/moe/moe_package.js.map +0 -1
- package/src/model/mamba_block.ts +0 -401
package/dist/training/trainer.js
CHANGED
|
@@ -1,9 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* trainer.ts – MambaTrainer class
|
|
3
|
+
*
|
|
4
|
+
* REAL backpropagation. Until 2026-08 `_trainStep` handed the SAME `dLogits`
|
|
5
|
+
* buffer to AdamW for every parameter, so no parameter ever received its own
|
|
6
|
+
* gradient: `learn()` was SAFE (WSLA freezes the backbone, the trust region
|
|
7
|
+
* bounds every step, the NaN guard blocks a poisoned weight, and the session
|
|
8
|
+
* rolls back a regression) but INERT. It now runs a genuine backward pass —
|
|
9
|
+
* `cpuModelBackward` in `model_cpu.ts` — and each parameter is stepped with its
|
|
10
|
+
* OWN gradient.
|
|
11
|
+
*
|
|
12
|
+
* Where the maths runs, and why:
|
|
13
|
+
* • the backward pass is the CPU reference (`cpu_ops.ts` + `mamba1_cpu.ts`),
|
|
14
|
+
* a line-for-line mirror of the WGSL forward kernels. It is exact and it is
|
|
15
|
+
* PROVEN — `tests/backprop.test.ts` checks every parameter gradient against
|
|
16
|
+
* finite differences of the real loss, with no GPU involved;
|
|
17
|
+
* • the optimiser is {@link adamwUpdateInPlace}, the CPU mirror of
|
|
18
|
+
* `WEIGHT_UPDATE_WGSL`'s `adamw_update`, keeping the trust region and the
|
|
19
|
+
* NaN guard the safety story depends on;
|
|
20
|
+
* • the model's GPU buffers are written back after every optimiser step, so
|
|
21
|
+
* inference (which IS GPU) always serves the trained weights.
|
|
22
|
+
*
|
|
23
|
+
* The residual is a WGSL backward pass so training itself runs on the GPU. The
|
|
24
|
+
* backward kernels exist (`SELECTIVE_SCAN_BACKWARD_WGSL`, `SSD_BACKWARD_WGSL`,
|
|
25
|
+
* `CONV1D_BACKWARD_WGSL`, `LINEAR_BACKWARD_WGSL`, `ACTIVATIONS_BACKWARD_WGSL`)
|
|
26
|
+
* but wiring them cannot be validated numerically without a WebGPU device, and
|
|
27
|
+
* an unvalidated GPU backward is worse than a slower exact one.
|
|
3
28
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { crossEntropyLoss
|
|
6
|
-
import {
|
|
29
|
+
import { readBuffer, uploadBuffer, } from '../utils/gpu_utils.js';
|
|
30
|
+
import { crossEntropyLoss } from './autograd.js';
|
|
31
|
+
import { adamwUpdateInPlace } from '../optim/adamw.js';
|
|
32
|
+
import { LoRAAdapter } from './lora.js';
|
|
33
|
+
import { cpuModelBackward, cpuWeightsFromNamed, namedWeights, paramMatrixShape, DEFAULT_LORA_TARGETS, CPU_GRADIENT_LAYER_TYPES, } from './model_cpu.js';
|
|
7
34
|
/**
|
|
8
35
|
* Default per-step trust region for WSLA / write-through adaptation. Small
|
|
9
36
|
* enough that a single `adapt()` nudges the narrow params without lurching, so
|
|
@@ -20,39 +47,126 @@ export class MambaTrainer {
|
|
|
20
47
|
* Adam moments keyed by parameter NAME (not array index). Name-keying is what
|
|
21
48
|
* lets WSLA toggle safely: a narrow write-through step updates only the
|
|
22
49
|
* `layer{i}.wXProj/bXProj` subset, a full fine-tune updates everything, and
|
|
23
|
-
* both reuse the SAME `m`/`v`
|
|
24
|
-
*
|
|
25
|
-
*
|
|
50
|
+
* both reuse the SAME `m`/`v` per parameter. Index-keyed moments (the old
|
|
51
|
+
* scheme) silently misaligned the moment with the wrong parameter the moment
|
|
52
|
+
* the trainable set changed shape — corrupting the update.
|
|
26
53
|
*/
|
|
27
54
|
_moments;
|
|
28
55
|
_step;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
56
|
+
_dims;
|
|
57
|
+
/** CPU mirror of every model tensor — the gradient engine's working set. */
|
|
58
|
+
_mirror;
|
|
59
|
+
_mirrorByName;
|
|
60
|
+
/** Low-rank adapters by parameter name, when training with `lora`. */
|
|
61
|
+
_adapters;
|
|
62
|
+
/** Frozen base weights the adapters sit on top of (LoRA only). */
|
|
63
|
+
_loraBase;
|
|
64
|
+
_shard;
|
|
32
65
|
constructor(model, tokenizer = null) {
|
|
33
66
|
this.model = model;
|
|
34
67
|
this.tokenizer = tokenizer;
|
|
35
68
|
this.device = model.device;
|
|
36
69
|
this._moments = new Map();
|
|
37
70
|
this._step = 0;
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
71
|
+
this._dims = cpuDimsFor(model);
|
|
72
|
+
this._mirror = null;
|
|
73
|
+
this._mirrorByName = null;
|
|
74
|
+
this._adapters = new Map();
|
|
75
|
+
this._loraBase = new Map();
|
|
76
|
+
this._shard = null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The low-rank adapters this trainer is training, by parameter name — empty
|
|
80
|
+
* unless `train({ lora })` was used. Exposed so a caller can serialise just the
|
|
81
|
+
* adapter (a few hundred KB) instead of the whole checkpoint.
|
|
82
|
+
*/
|
|
83
|
+
get adapters() { return this._adapters; }
|
|
84
|
+
/** Trainable scalar count for the current mode — the LoRA saving, measured. */
|
|
85
|
+
trainableParamCount() {
|
|
86
|
+
const params = this.model.getTrainableParams();
|
|
87
|
+
if (this._adapters.size === 0)
|
|
88
|
+
return params.reduce((n, p) => n + p.numel, 0);
|
|
89
|
+
let n = 0;
|
|
90
|
+
for (const p of params) {
|
|
91
|
+
const a = this._adapters.get(p.name);
|
|
92
|
+
if (a)
|
|
93
|
+
n += a.numParams();
|
|
94
|
+
}
|
|
95
|
+
return n;
|
|
96
|
+
}
|
|
97
|
+
/** Whether this trainer owns parameter `index` under the active shard. */
|
|
98
|
+
_owns(index) {
|
|
99
|
+
return this._shard === null || index % this._shard.count === this._shard.index;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Build (once) an adapter for every LoRA-target parameter, snapshot the frozen
|
|
103
|
+
* base, and return the set. Rank is clamped per parameter to its smaller
|
|
104
|
+
* dimension so one global rank works across projections of very different shape.
|
|
105
|
+
*/
|
|
106
|
+
_installAdapters(cfg) {
|
|
107
|
+
if (this._adapters.size > 0)
|
|
108
|
+
return; // already installed; keep training them
|
|
109
|
+
const targets = new Set(cfg.targets ?? DEFAULT_LORA_TARGETS);
|
|
110
|
+
const weights = this._mirrorByName;
|
|
111
|
+
for (const p of this.model.getTrainableParams()) {
|
|
112
|
+
const local = p.name.includes('.') ? p.name.slice(p.name.indexOf('.') + 1) : p.name;
|
|
113
|
+
if (!targets.has(local))
|
|
114
|
+
continue;
|
|
115
|
+
const shape = paramMatrixShape(p.name, this._dims);
|
|
116
|
+
if (!shape)
|
|
117
|
+
continue; // a vector parameter — nothing for a low-rank adapter to do
|
|
118
|
+
const [rows, cols] = shape;
|
|
119
|
+
const rank = Math.max(1, Math.min(cfg.rank ?? 8, rows, cols));
|
|
120
|
+
this._adapters.set(p.name, new LoRAAdapter(rows, cols, { ...cfg, rank }));
|
|
121
|
+
this._loraBase.set(p.name, Float32Array.from(weights.get(p.name)));
|
|
122
|
+
}
|
|
123
|
+
if (this._adapters.size === 0) {
|
|
124
|
+
throw new Error(`MambaTrainer: lora was requested but no trainable parameter matched targets ` +
|
|
125
|
+
`[${[...targets].join(', ')}]. Valid targets: wInProj, wXProj, wDtProj, wOutProj, wConv, A_log, embedding.`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Write `base + adapter.delta()` into the mirror, so the forward sees the adapted weights. */
|
|
129
|
+
_materialiseAdapters() {
|
|
130
|
+
const weights = this._mirrorByName;
|
|
131
|
+
for (const [name, adapter] of this._adapters) {
|
|
132
|
+
const w = weights.get(name);
|
|
133
|
+
const base = this._loraBase.get(name);
|
|
134
|
+
const delta = adapter.delta();
|
|
135
|
+
for (let i = 0; i < w.length; i++)
|
|
136
|
+
w[i] = base[i] + delta[i];
|
|
137
|
+
}
|
|
41
138
|
}
|
|
42
139
|
/** Get-or-create the Adam first/second moments for a parameter, by name. */
|
|
43
140
|
_momentFor(p) {
|
|
44
141
|
let mom = this._moments.get(p.name);
|
|
45
142
|
if (!mom) {
|
|
46
|
-
mom = {
|
|
47
|
-
m: createEmptyStorageBuffer(this.device, p.numel * 4, false),
|
|
48
|
-
v: createEmptyStorageBuffer(this.device, p.numel * 4, false),
|
|
49
|
-
};
|
|
143
|
+
mom = { m: new Float32Array(p.numel), v: new Float32Array(p.numel) };
|
|
50
144
|
this._moments.set(p.name, mom);
|
|
51
145
|
}
|
|
52
146
|
return mom;
|
|
53
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Pull every model tensor off the GPU into the CPU mirror. Done once per
|
|
150
|
+
* `train()` call (not per step) so an externally loaded checkpoint or a
|
|
151
|
+
* previous session's weights are picked up, after which the mirror is
|
|
152
|
+
* authoritative and each step writes the updated tensors back.
|
|
153
|
+
*/
|
|
154
|
+
async _syncMirrorFromGpu() {
|
|
155
|
+
const named = new Map();
|
|
156
|
+
for (const p of this.model.parameters()) {
|
|
157
|
+
named.set(p.name, await readBuffer(this.device, p.buf, p.numel * 4));
|
|
158
|
+
}
|
|
159
|
+
named.set('lm_head_bias', await readBuffer(this.device, this.model.gpuLMHeadBias, this._dims.vocabSize * 4));
|
|
160
|
+
this._mirror = cpuWeightsFromNamed(named, this._dims);
|
|
161
|
+
this._mirrorByName = namedWeights(this._mirror);
|
|
162
|
+
}
|
|
54
163
|
async train(input, opts = {}) {
|
|
55
|
-
const { learningRate = 1e-4, epochs = 5, batchSize = 1, seqLen = 512, maxGradNorm = 1.0, weightDecay = 0.01, beta1 = 0.9, beta2 = 0.999, eps = 1e-8, wsla = false,
|
|
164
|
+
const { learningRate = 1e-4, epochs = 5, batchSize = 1, seqLen = 512, maxGradNorm = 1.0, weightDecay = 0.01, beta1 = 0.9, beta2 = 0.999, eps = 1e-8, wsla = false, onEpochEnd = null, } = opts;
|
|
165
|
+
const accumulation = Math.max(1, Math.floor(opts.gradientAccumulation ?? 1));
|
|
166
|
+
this._shard = opts.shard ?? null;
|
|
167
|
+
if (this._shard && (this._shard.count <= 0 || this._shard.index < 0 || this._shard.index >= this._shard.count)) {
|
|
168
|
+
throw new Error(`MambaTrainer: invalid shard ${this._shard.index}/${this._shard.count}`);
|
|
169
|
+
}
|
|
56
170
|
// Trust region defaults ON for write-through (WSLA) adapts, OFF otherwise.
|
|
57
171
|
const maxDelta = opts.maxDelta ?? (wsla ? WSLA_MAX_DELTA : 0);
|
|
58
172
|
if (wsla)
|
|
@@ -75,119 +189,182 @@ export class MambaTrainer {
|
|
|
75
189
|
if (chunks.length === 0) {
|
|
76
190
|
throw new Error('Input is too short to form any training chunk.');
|
|
77
191
|
}
|
|
78
|
-
|
|
79
|
-
//
|
|
80
|
-
//
|
|
192
|
+
const batches = buildBatches(chunks, Math.max(1, Math.floor(batchSize)));
|
|
193
|
+
// The mirror is the gradient engine's working set; refresh it from the GPU
|
|
194
|
+
// once per train() so a freshly loaded checkpoint is trained, not stale weights.
|
|
195
|
+
await this._syncMirrorFromGpu();
|
|
196
|
+
if (opts.lora)
|
|
197
|
+
this._installAdapters(opts.lora);
|
|
81
198
|
const epochLosses = [];
|
|
82
199
|
for (let epoch = 0; epoch < epochs; epoch++) {
|
|
83
200
|
let epochLoss = 0;
|
|
84
201
|
let epochGradNorm = 0;
|
|
85
202
|
let numSteps = 0;
|
|
86
|
-
|
|
87
|
-
|
|
203
|
+
// Gradient accumulation: `accumulation` batches contribute to one
|
|
204
|
+
// optimiser step, so the effective batch is batchSize x accumulation at
|
|
205
|
+
// the memory of one batch.
|
|
206
|
+
for (let i = 0; i < batches.length; i += accumulation) {
|
|
207
|
+
const group = batches.slice(i, i + accumulation);
|
|
208
|
+
const { loss, gradNorm } = await this._trainStep(group, { learningRate, maxGradNorm, weightDecay, beta1, beta2, eps, wsla, maxDelta,
|
|
209
|
+
...(opts.activationCheckpointing ? { activationCheckpointing: true } : {}) });
|
|
88
210
|
epochLoss += loss;
|
|
89
|
-
|
|
90
|
-
epochGradNorm += gradNorm;
|
|
211
|
+
epochGradNorm += gradNorm;
|
|
91
212
|
numSteps++;
|
|
92
213
|
}
|
|
93
214
|
const avgLoss = epochLoss / numSteps;
|
|
94
215
|
epochLosses.push(avgLoss);
|
|
95
|
-
// Mean pre-clip grad norm this epoch (only measured when trackGradNorm is on).
|
|
96
|
-
const avgGradNorm = trackGradNorm ? epochGradNorm / numSteps : undefined;
|
|
97
216
|
if (onEpochEnd)
|
|
98
|
-
onEpochEnd(epoch + 1, avgLoss,
|
|
217
|
+
onEpochEnd(epoch + 1, avgLoss, epochGradNorm / numSteps);
|
|
99
218
|
}
|
|
100
219
|
if (wsla)
|
|
101
220
|
this.model.setWSLAMode(false);
|
|
102
221
|
return epochLosses;
|
|
103
222
|
}
|
|
104
|
-
|
|
105
|
-
|
|
223
|
+
/**
|
|
224
|
+
* One optimiser step over one batch: real forward + backward, a global
|
|
225
|
+
* gradient-norm clip over the trainable set, then AdamW per parameter with
|
|
226
|
+
* its OWN gradient, written straight back to the GPU buffer.
|
|
227
|
+
*/
|
|
228
|
+
async _trainStep(group, hyperparams) {
|
|
229
|
+
const { learningRate, maxGradNorm, weightDecay, beta1, beta2, eps, maxDelta } = hyperparams;
|
|
230
|
+
if (!this._mirror || !this._mirrorByName)
|
|
231
|
+
await this._syncMirrorFromGpu();
|
|
232
|
+
const mirror = this._mirror;
|
|
233
|
+
const weights = this._mirrorByName;
|
|
106
234
|
this._step++;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
235
|
+
// Under LoRA the forward must see base + Delta, not the stale merge from the
|
|
236
|
+
// previous step.
|
|
237
|
+
if (this._adapters.size > 0)
|
|
238
|
+
this._materialiseAdapters();
|
|
239
|
+
const bwOpts = hyperparams.activationCheckpointing ? { activationCheckpointing: true } : {};
|
|
240
|
+
let loss = 0;
|
|
241
|
+
let grads = new Map();
|
|
242
|
+
for (const b of group) {
|
|
243
|
+
const step = cpuModelBackward(b.inputs, b.targets, mirror, this._dims, b.batch, b.seqLen, bwOpts);
|
|
244
|
+
loss += step.loss / group.length;
|
|
245
|
+
if (grads.size === 0) {
|
|
246
|
+
// First micro-batch owns the accumulator; scale it as we go so the
|
|
247
|
+
// accumulated gradient is the MEAN over the group, matching a single
|
|
248
|
+
// pass at the larger batch size.
|
|
249
|
+
for (const v of step.grads.values())
|
|
250
|
+
for (let i = 0; i < v.length; i++)
|
|
251
|
+
v[i] = v[i] / group.length;
|
|
252
|
+
grads = step.grads;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
for (const [k, v] of step.grads) {
|
|
256
|
+
const acc = grads.get(k);
|
|
257
|
+
for (let i = 0; i < v.length; i++)
|
|
258
|
+
acc[i] = acc[i] + v[i] / group.length;
|
|
259
|
+
}
|
|
120
260
|
}
|
|
121
261
|
}
|
|
122
|
-
const loss = totalLoss / seqLen;
|
|
123
|
-
const dLogitsBuf = createStorageBuffer(this.device, dLogits, false);
|
|
124
|
-
const gradNorm = await this._clipGradients(dLogitsBuf, dLogits.length, maxGradNorm, !!trackGradNorm);
|
|
125
262
|
// Only the trainable set is updated. Under WSLA (write-through) that is
|
|
126
263
|
// the narrow per-layer subset and the backbone (incl. every A_log) stays
|
|
127
264
|
// frozen — the guarantee that repeated adapts can't destabilise the SSM.
|
|
128
265
|
const params = this.model.getTrainableParams();
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
266
|
+
// Under LoRA the base weights are frozen: project each base gradient onto
|
|
267
|
+
// its adapter, and the adapter's A/B are what the optimiser steps.
|
|
268
|
+
if (this._adapters.size > 0) {
|
|
269
|
+
for (const [name, adapter] of this._adapters) {
|
|
270
|
+
const g = grads.get(name);
|
|
271
|
+
if (!g)
|
|
272
|
+
continue;
|
|
273
|
+
adapter.zeroGrad();
|
|
274
|
+
adapter.accumulateGradient(g);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Global pre-clip L2 norm ACROSS the whole trainable set. The old GPU
|
|
278
|
+
// reduce clipped one buffer at a time and raced on `norm_sq[0]` across
|
|
279
|
+
// workgroups; this is the true global norm and needs no readback.
|
|
280
|
+
let sumSq = 0;
|
|
281
|
+
for (const p of params) {
|
|
282
|
+
const g = grads.get(p.name);
|
|
283
|
+
if (!g)
|
|
284
|
+
continue;
|
|
285
|
+
for (let i = 0; i < g.length; i++)
|
|
286
|
+
sumSq += g[i] * g[i];
|
|
287
|
+
}
|
|
288
|
+
const gradNorm = Math.sqrt(sumSq);
|
|
289
|
+
const gradScale = maxGradNorm > 0 && gradNorm > maxGradNorm ? maxGradNorm / gradNorm : 1;
|
|
290
|
+
this._adamwStep(params, grads, weights, {
|
|
291
|
+
learningRate, weightDecay, beta1, beta2, eps,
|
|
292
|
+
beta1_t: Math.pow(beta1, this._step),
|
|
293
|
+
beta2_t: Math.pow(beta2, this._step),
|
|
294
|
+
maxDelta, gradScale,
|
|
295
|
+
});
|
|
134
296
|
return { loss, gradNorm };
|
|
135
297
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
298
|
+
/**
|
|
299
|
+
* AdamW over the trainable set. Each parameter is paired with its OWN
|
|
300
|
+
* gradient by NAME — the bug this replaces passed one shared `dLogits`
|
|
301
|
+
* buffer to every parameter — and the updated tensor is uploaded to the GPU
|
|
302
|
+
* so inference serves it.
|
|
303
|
+
*/
|
|
304
|
+
_adamwStep(params, grads, weights, hp) {
|
|
305
|
+
const { learningRate, weightDecay, beta1, beta2, eps, beta1_t, beta2_t, maxDelta, gradScale } = hp;
|
|
306
|
+
const step = { lr: learningRate, beta1, beta2, eps, weightDecay, beta1_t, beta2_t, maxDelta, gradScale };
|
|
307
|
+
for (let idx = 0; idx < params.length; idx++) {
|
|
308
|
+
const p = params[idx];
|
|
309
|
+
if (!this._owns(idx))
|
|
310
|
+
continue; // another shard holds this one's moments
|
|
311
|
+
// LoRA: step A and B, then re-merge base + Delta into the mirror so the
|
|
312
|
+
// GPU buffer (what inference reads) always holds the adapted weights.
|
|
313
|
+
const adapter = this._adapters.get(p.name);
|
|
314
|
+
if (adapter) {
|
|
315
|
+
const w = weights.get(p.name);
|
|
316
|
+
const base = this._loraBase.get(p.name);
|
|
317
|
+
const [aP, bP] = [adapter.A, adapter.B];
|
|
318
|
+
const [gA, gB] = [adapter.gradients()[1].data, adapter.gradients()[0].data];
|
|
319
|
+
const momB = this._momentNamed(`${p.name}::loraB`, bP.length);
|
|
320
|
+
const momA = this._momentNamed(`${p.name}::loraA`, aP.length);
|
|
321
|
+
adamwUpdateInPlace(bP, gB, momB.m, momB.v, step);
|
|
322
|
+
adamwUpdateInPlace(aP, gA, momA.m, momA.v, step);
|
|
323
|
+
const delta = adapter.delta();
|
|
324
|
+
for (let i = 0; i < w.length; i++)
|
|
325
|
+
w[i] = base[i] + delta[i];
|
|
326
|
+
uploadBuffer(this.device, p.buf, w);
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
const g = grads.get(p.name);
|
|
330
|
+
const w = weights.get(p.name);
|
|
331
|
+
if (!g || !w)
|
|
142
332
|
continue;
|
|
333
|
+
if (g.length !== p.numel || w.length !== p.numel) {
|
|
334
|
+
throw new Error(`MambaTrainer: parameter "${p.name}" is ${p.numel} elements but the ` +
|
|
335
|
+
`gradient engine produced ${g.length} — model and CPU mirror disagree.`);
|
|
336
|
+
}
|
|
143
337
|
const mom = this._momentFor(p);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
338
|
+
adamwUpdateInPlace(w, g, mom.m, mom.v, step);
|
|
339
|
+
uploadBuffer(this.device, p.buf, w);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/** Get-or-create moments for a synthetic parameter (a LoRA factor), by name. */
|
|
343
|
+
_momentNamed(name, numel) {
|
|
344
|
+
let mom = this._moments.get(name);
|
|
345
|
+
if (!mom) {
|
|
346
|
+
mom = { m: new Float32Array(numel), v: new Float32Array(numel) };
|
|
347
|
+
this._moments.set(name, mom);
|
|
154
348
|
}
|
|
349
|
+
return mom;
|
|
155
350
|
}
|
|
156
351
|
/**
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* already computed it, so this is only a small buffer readback (a GPU sync,
|
|
161
|
-
* hence opt-in). Returns null when not tracking.
|
|
352
|
+
* Bytes of optimiser state (Adam m + v) this trainer holds. Under a shard that
|
|
353
|
+
* is 1/count of the full state; under LoRA it is the adapters' state, not the
|
|
354
|
+
* weights'. The measurable point of both features.
|
|
162
355
|
*/
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
new Float32Array(clipParams, 4, 1).set([maxNorm * maxNorm]);
|
|
169
|
-
const pBuf = createUniformBuffer(this.device, clipParams);
|
|
170
|
-
const bg1 = createBindGroup(this.device, this._clipReducePipeline, [pBuf, gradBuf, normSqBuf]);
|
|
171
|
-
dispatchKernel(this.device, this._clipReducePipeline, bg1, [cdiv(numel, 256), 1, 1]);
|
|
172
|
-
// Read Σg² AFTER the reduce (the scale kernel only reads it, never overwrites),
|
|
173
|
-
// so the returned norm is the pre-clip magnitude — the instability signal.
|
|
174
|
-
let gradNorm = null;
|
|
175
|
-
if (trackNorm) {
|
|
176
|
-
const out = await readBuffer(this.device, normSqBuf, 4);
|
|
177
|
-
gradNorm = Math.sqrt(Math.max(0, out[0] ?? 0));
|
|
178
|
-
}
|
|
179
|
-
const bg2 = createBindGroup(this.device, this._clipScalePipeline, [pBuf, gradBuf, normSqBuf]);
|
|
180
|
-
dispatchKernel(this.device, this._clipScalePipeline, bg2, [cdiv(numel, 256), 1, 1]);
|
|
181
|
-
pBuf.destroy();
|
|
182
|
-
normSqBuf.destroy();
|
|
183
|
-
return gradNorm;
|
|
356
|
+
optimizerStateBytes() {
|
|
357
|
+
let n = 0;
|
|
358
|
+
for (const mom of this._moments.values())
|
|
359
|
+
n += mom.m.byteLength + mom.v.byteLength;
|
|
360
|
+
return n;
|
|
184
361
|
}
|
|
185
362
|
async evaluate(input) {
|
|
186
363
|
let tokenIds;
|
|
187
364
|
if (typeof input === 'string') {
|
|
188
365
|
if (!this.tokenizer)
|
|
189
366
|
throw new Error('Tokenizer required for string input.');
|
|
190
|
-
tokenIds = this.tokenizer.encode(input);
|
|
367
|
+
tokenIds = Array.from(this.tokenizer.encode(input));
|
|
191
368
|
}
|
|
192
369
|
else {
|
|
193
370
|
tokenIds = Array.from(input);
|
|
@@ -204,7 +381,38 @@ export class MambaTrainer {
|
|
|
204
381
|
return Math.exp(avgLoss);
|
|
205
382
|
}
|
|
206
383
|
}
|
|
207
|
-
|
|
384
|
+
/**
|
|
385
|
+
* Derive the gradient engine's dimensions from a model, rejecting layer types
|
|
386
|
+
* the CPU reference cannot differentiate.
|
|
387
|
+
*
|
|
388
|
+
* A hybrid schedule (`jamba`/`zamba`, or any explicit schedule containing
|
|
389
|
+
* `mamba2`/`mamba3`/`attention`) fails LOUDLY here rather than silently training
|
|
390
|
+
* on gradients that do not exist — which is exactly what the old trainer did.
|
|
391
|
+
*/
|
|
392
|
+
export function cpuDimsFor(model) {
|
|
393
|
+
const unsupported = model.layerSpecs
|
|
394
|
+
.map((s, i) => ({ i, type: s.type }))
|
|
395
|
+
.filter(({ type }) => !CPU_GRADIENT_LAYER_TYPES.includes(type));
|
|
396
|
+
if (unsupported.length > 0) {
|
|
397
|
+
const detail = unsupported.map(({ i, type }) => `layer${i}=${type}`).join(', ');
|
|
398
|
+
throw new Error(`MambaTrainer: the gradient engine differentiates ${CPU_GRADIENT_LAYER_TYPES.join('/')} ` +
|
|
399
|
+
`layers only, but this model has ${detail}. Build the model with the default ` +
|
|
400
|
+
`mamba1 schedule to train it, or extend the CPU reference to cover those blocks.`);
|
|
401
|
+
}
|
|
402
|
+
const first = model.layers[0];
|
|
403
|
+
const dInner = first?.dInner ?? model.config.expand * model.config.dModel;
|
|
404
|
+
const dtRank = first?.dtRank ?? Math.ceil(model.config.dModel / 16);
|
|
405
|
+
return {
|
|
406
|
+
vocabSize: model.config.vocabSize,
|
|
407
|
+
dModel: model.config.dModel,
|
|
408
|
+
dState: model.config.dState,
|
|
409
|
+
dConv: model.config.dConv,
|
|
410
|
+
dInner,
|
|
411
|
+
dtRank,
|
|
412
|
+
numLayers: model.layers.length,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
export function buildChunks(ids, seqLen) {
|
|
208
416
|
const chunks = [];
|
|
209
417
|
for (let start = 0; start + seqLen < ids.length; start += seqLen) {
|
|
210
418
|
chunks.push({
|
|
@@ -222,12 +430,30 @@ function buildChunks(ids, seqLen) {
|
|
|
222
430
|
}
|
|
223
431
|
return chunks;
|
|
224
432
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
433
|
+
/**
|
|
434
|
+
* Group equal-length chunks into batches of at most `batchSize`.
|
|
435
|
+
*
|
|
436
|
+
* `batchSize` used to be accepted and ignored — every chunk trained alone. The
|
|
437
|
+
* batch dimension the model and the gradient engine both take is real, so it is
|
|
438
|
+
* honoured here; a ragged tail chunk simply trains as its own batch of one.
|
|
439
|
+
*/
|
|
440
|
+
export function buildBatches(chunks, batchSize) {
|
|
441
|
+
const batches = [];
|
|
442
|
+
let i = 0;
|
|
443
|
+
while (i < chunks.length) {
|
|
444
|
+
const seqLen = chunks[i].inputs.length;
|
|
445
|
+
const group = [];
|
|
446
|
+
while (i < chunks.length && group.length < batchSize && chunks[i].inputs.length === seqLen) {
|
|
447
|
+
group.push(chunks[i]);
|
|
448
|
+
i++;
|
|
449
|
+
}
|
|
450
|
+
batches.push({
|
|
451
|
+
inputs: group.flatMap((c) => c.inputs),
|
|
452
|
+
targets: group.flatMap((c) => c.targets),
|
|
453
|
+
batch: group.length,
|
|
454
|
+
seqLen,
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
return batches;
|
|
232
458
|
}
|
|
233
459
|
//# sourceMappingURL=trainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trainer.js","sourceRoot":"","sources":["../../src/training/trainer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trainer.js","sourceRoot":"","sources":["../../src/training/trainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils/base64.ts — binary ⇄ standard base64, isomorphic (browser, Node ≥ 16, Workers).
|
|
3
|
+
*
|
|
4
|
+
* Built on the global `btoa`/`atob` every supported runtime provides, so the engine
|
|
5
|
+
* keeps zero runtime dependencies (no `Buffer`). One implementation for every wire
|
|
6
|
+
* encoding the Evermind contract uses — weight deltas and packed embeddings alike.
|
|
7
|
+
*/
|
|
8
|
+
/** Encode bytes as standard (padded) base64. */
|
|
9
|
+
export declare function bytesToBase64(bytes: ArrayBuffer | Uint8Array): string;
|
|
10
|
+
/** Decode standard base64 to a fresh `ArrayBuffer`. Throws on malformed input (as `atob` does). */
|
|
11
|
+
export declare function base64ToBytes(b64: string): ArrayBuffer;
|
|
12
|
+
//# sourceMappingURL=base64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAOrE;AAED,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAKtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils/base64.ts — binary ⇄ standard base64, isomorphic (browser, Node ≥ 16, Workers).
|
|
3
|
+
*
|
|
4
|
+
* Built on the global `btoa`/`atob` every supported runtime provides, so the engine
|
|
5
|
+
* keeps zero runtime dependencies (no `Buffer`). One implementation for every wire
|
|
6
|
+
* encoding the Evermind contract uses — weight deltas and packed embeddings alike.
|
|
7
|
+
*/
|
|
8
|
+
/** Chunk size for `String.fromCharCode.apply` — well under every engine's arg limit. */
|
|
9
|
+
const CHUNK = 0x8000;
|
|
10
|
+
/** Encode bytes as standard (padded) base64. */
|
|
11
|
+
export function bytesToBase64(bytes) {
|
|
12
|
+
const u8 = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
13
|
+
let bin = "";
|
|
14
|
+
for (let i = 0; i < u8.length; i += CHUNK) {
|
|
15
|
+
bin += String.fromCharCode.apply(null, Array.from(u8.subarray(i, i + CHUNK)));
|
|
16
|
+
}
|
|
17
|
+
return btoa(bin);
|
|
18
|
+
}
|
|
19
|
+
/** Decode standard base64 to a fresh `ArrayBuffer`. Throws on malformed input (as `atob` does). */
|
|
20
|
+
export function base64ToBytes(b64) {
|
|
21
|
+
const bin = atob(b64);
|
|
22
|
+
const out = new Uint8Array(bin.length);
|
|
23
|
+
for (let i = 0; i < bin.length; i++)
|
|
24
|
+
out[i] = bin.charCodeAt(i);
|
|
25
|
+
return out.buffer;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wFAAwF;AACxF,MAAM,KAAK,GAAG,MAAM,CAAC;AAErB,gDAAgD;AAChD,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC3D,MAAM,EAAE,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC1C,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC"}
|