@dxo/nn 0.0.9 → 0.0.10
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 +12 -12
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts +159 -0
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +397 -6
- package/dist/module.js.map +1 -1
- package/package.json +14 -8
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @dxo/nn
|
|
1
|
+
# 🧱 @dxo/nn
|
|
2
2
|
|
|
3
3
|
**Developer preview — API unstable (`0.0.x`).**
|
|
4
4
|
|
|
@@ -6,19 +6,19 @@ Pure TypeScript modules over `@dxo/core`.
|
|
|
6
6
|
|
|
7
7
|
## Contract (G3 preview)
|
|
8
8
|
|
|
9
|
-
| Type
|
|
10
|
-
|
|
11
|
-
| `Linear(in, out)`
|
|
12
|
-
| `Relu` / `relu(x)`
|
|
13
|
-
| `Sequential(layers)`
|
|
14
|
-
| `parameters()`
|
|
15
|
-
| `zeroGrad()`
|
|
16
|
-
| `Linear.loadParameters([W, b])` | Reassign leaves after `optimizer.step`
|
|
17
|
-
| `Linear.state` / `loadState`
|
|
9
|
+
| Type | Behavior |
|
|
10
|
+
|---------------------------------|--------------------------------------------------------------------|
|
|
11
|
+
| `Linear(in, out)` | **`y = x @ W + b` only** — no implicit ReLU |
|
|
12
|
+
| `Relu` / `relu(x)` | Explicit nonlinearity |
|
|
13
|
+
| `Sequential(layers)` | Chains `forward` |
|
|
14
|
+
| `parameters()` | Collects `Tensor` fields (and nested modules) in enumeration order |
|
|
15
|
+
| `zeroGrad()` | Calls `zeroGrad` on each parameter leaf |
|
|
16
|
+
| `Linear.loadParameters([W, b])` | Reassign leaves after `optimizer.step` |
|
|
17
|
+
| `Linear.state` / `loadState` | Plain `{ shape, data }` snapshots |
|
|
18
18
|
|
|
19
19
|
```typescript
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import {Linear, Relu, Sequential} from '@dxo/nn';
|
|
21
|
+
import {SGD} from '@dxo/optimizer';
|
|
22
22
|
|
|
23
23
|
const model = new Sequential([new Linear(2, 4), new Relu(), new Linear(4, 1)]);
|
|
24
24
|
const opt = new SGD(0.05);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { LinearState, TensorStateSlice } from './module.js';
|
|
2
|
-
export { Linear, Module, Relu, relu, Sequential } from './module.js';
|
|
1
|
+
export type { BatchNorm2dState, Conv2dState, EmbeddingState, LayerNormState, LinearState, TensorStateSlice } from './module.js';
|
|
2
|
+
export { BatchNorm2d, Conv2d, Embedding, LayerNorm, Linear, MaxPool2d, Module, MultiheadAttention, Relu, relu, Sequential, TinyCnn, TinyTransformer, TransformerBlock, } from './module.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAChI,OAAO,EACH,WAAW,EACX,MAAM,EACN,SAAS,EACT,SAAS,EACT,MAAM,EACN,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,eAAe,EACf,gBAAgB,GACnB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Linear, Module, Relu, relu, Sequential } from './module.js';
|
|
1
|
+
export { BatchNorm2d, Conv2d, Embedding, LayerNorm, Linear, MaxPool2d, Module, MultiheadAttention, Relu, relu, Sequential, TinyCnn, TinyTransformer, TransformerBlock, } from './module.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,WAAW,EACX,MAAM,EACN,SAAS,EACT,SAAS,EACT,MAAM,EACN,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,eAAe,EACf,gBAAgB,GACnB,MAAM,aAAa,CAAC"}
|
package/dist/module.d.ts
CHANGED
|
@@ -41,4 +41,163 @@ export declare class Sequential extends Module {
|
|
|
41
41
|
constructor(layers: Module[]);
|
|
42
42
|
forward(x: Tensor): Tensor;
|
|
43
43
|
}
|
|
44
|
+
export interface EmbeddingState {
|
|
45
|
+
weight: TensorStateSlice;
|
|
46
|
+
}
|
|
47
|
+
/** Token embedding: `forward(indices)` gathers rows from `[vocab, dim]`. */
|
|
48
|
+
export declare class Embedding extends Module {
|
|
49
|
+
readonly numEmbeddings: number;
|
|
50
|
+
readonly embeddingDim: number;
|
|
51
|
+
weight: Tensor;
|
|
52
|
+
constructor(numEmbeddings: number, embeddingDim: number, opts?: {
|
|
53
|
+
requiresGrad?: boolean;
|
|
54
|
+
});
|
|
55
|
+
forward(indices: Tensor): Tensor;
|
|
56
|
+
loadParameters(params: Tensor[]): void;
|
|
57
|
+
state(): Promise<EmbeddingState>;
|
|
58
|
+
loadState(saved: EmbeddingState): void;
|
|
59
|
+
}
|
|
60
|
+
export interface LayerNormState {
|
|
61
|
+
weight: TensorStateSlice;
|
|
62
|
+
bias: TensorStateSlice;
|
|
63
|
+
}
|
|
64
|
+
/** LayerNorm over the last dimension. */
|
|
65
|
+
export declare class LayerNorm extends Module {
|
|
66
|
+
readonly normalizedShape: number;
|
|
67
|
+
weight: Tensor;
|
|
68
|
+
bias: Tensor;
|
|
69
|
+
constructor(normalizedShape: number, opts?: {
|
|
70
|
+
eps?: number;
|
|
71
|
+
requiresGrad?: boolean;
|
|
72
|
+
});
|
|
73
|
+
readonly eps: number;
|
|
74
|
+
forward(x: Tensor): Tensor;
|
|
75
|
+
loadParameters(params: Tensor[]): void;
|
|
76
|
+
state(): Promise<LayerNormState>;
|
|
77
|
+
loadState(saved: LayerNormState): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Causal multi-head self-attention over `[B, T, C]`.
|
|
81
|
+
* Head dim must divide `embedDim`.
|
|
82
|
+
*/
|
|
83
|
+
export declare class MultiheadAttention extends Module {
|
|
84
|
+
readonly embedDim: number;
|
|
85
|
+
readonly numHeads: number;
|
|
86
|
+
qkv: Linear;
|
|
87
|
+
proj: Linear;
|
|
88
|
+
constructor(embedDim: number, numHeads: number, opts?: {
|
|
89
|
+
requiresGrad?: boolean;
|
|
90
|
+
});
|
|
91
|
+
readonly headDim: number;
|
|
92
|
+
forward(x: Tensor): Tensor;
|
|
93
|
+
}
|
|
94
|
+
/** One decoder block: LN → causal MHA → residual → LN → MLP → residual. */
|
|
95
|
+
export declare class TransformerBlock extends Module {
|
|
96
|
+
ln1: LayerNorm;
|
|
97
|
+
attn: MultiheadAttention;
|
|
98
|
+
ln2: LayerNorm;
|
|
99
|
+
fc1: Linear;
|
|
100
|
+
fc2: Linear;
|
|
101
|
+
constructor(embedDim: number, numHeads: number, opts?: {
|
|
102
|
+
requiresGrad?: boolean;
|
|
103
|
+
});
|
|
104
|
+
forward(x: Tensor): Tensor;
|
|
105
|
+
}
|
|
106
|
+
/** Tiny decoder-only LM: token + position embed → N blocks → LN → tied logits via Linear. */
|
|
107
|
+
export declare class TinyTransformer extends Module {
|
|
108
|
+
readonly vocabSize: number;
|
|
109
|
+
readonly maxSeqLen: number;
|
|
110
|
+
readonly embedDim: number;
|
|
111
|
+
readonly numHeads: number;
|
|
112
|
+
readonly numLayers: number;
|
|
113
|
+
tokEmbed: Embedding;
|
|
114
|
+
posEmbed: Embedding;
|
|
115
|
+
blocks: TransformerBlock[];
|
|
116
|
+
lnF: LayerNorm;
|
|
117
|
+
head: Linear;
|
|
118
|
+
constructor(vocabSize: number, maxSeqLen: number, embedDim: number, numHeads: number, numLayers: number, opts?: {
|
|
119
|
+
requiresGrad?: boolean;
|
|
120
|
+
});
|
|
121
|
+
/** `tokens` shape `[B, T]` with integer ids stored as f32. */
|
|
122
|
+
forward(tokens: Tensor): Tensor;
|
|
123
|
+
/** Flat named tensors for safetensors / checkpoint (stable keys). */
|
|
124
|
+
state(): Promise<Record<string, TensorStateSlice>>;
|
|
125
|
+
loadState(saved: Record<string, TensorStateSlice>, opts?: {
|
|
126
|
+
requiresGrad?: boolean;
|
|
127
|
+
}): void;
|
|
128
|
+
}
|
|
129
|
+
export interface Conv2dState {
|
|
130
|
+
weight: TensorStateSlice;
|
|
131
|
+
bias: TensorStateSlice;
|
|
132
|
+
}
|
|
133
|
+
/** 2D convolution NCHW / OIHW. */
|
|
134
|
+
export declare class Conv2d extends Module {
|
|
135
|
+
readonly inChannels: number;
|
|
136
|
+
readonly outChannels: number;
|
|
137
|
+
readonly kernelSize: number;
|
|
138
|
+
weight: Tensor;
|
|
139
|
+
bias: Tensor;
|
|
140
|
+
constructor(inChannels: number, outChannels: number, kernelSize: number, opts?: {
|
|
141
|
+
stride?: number;
|
|
142
|
+
padding?: number;
|
|
143
|
+
requiresGrad?: boolean;
|
|
144
|
+
});
|
|
145
|
+
readonly stride: number;
|
|
146
|
+
readonly padding: number;
|
|
147
|
+
forward(x: Tensor): Tensor;
|
|
148
|
+
state(): Promise<Conv2dState>;
|
|
149
|
+
loadState(saved: Conv2dState, opts?: {
|
|
150
|
+
requiresGrad?: boolean;
|
|
151
|
+
}): void;
|
|
152
|
+
}
|
|
153
|
+
/** Max pooling 2D NCHW. */
|
|
154
|
+
export declare class MaxPool2d extends Module {
|
|
155
|
+
readonly kernelSize: number;
|
|
156
|
+
constructor(kernelSize: number, opts?: {
|
|
157
|
+
stride?: number;
|
|
158
|
+
padding?: number;
|
|
159
|
+
});
|
|
160
|
+
readonly stride: number;
|
|
161
|
+
readonly padding: number;
|
|
162
|
+
forward(x: Tensor): Tensor;
|
|
163
|
+
}
|
|
164
|
+
export interface BatchNorm2dState {
|
|
165
|
+
weight: TensorStateSlice;
|
|
166
|
+
bias: TensorStateSlice;
|
|
167
|
+
}
|
|
168
|
+
/** Batch norm 2D (per-batch stats, training-style). */
|
|
169
|
+
export declare class BatchNorm2d extends Module {
|
|
170
|
+
readonly numFeatures: number;
|
|
171
|
+
weight: Tensor;
|
|
172
|
+
bias: Tensor;
|
|
173
|
+
constructor(numFeatures: number, opts?: {
|
|
174
|
+
eps?: number;
|
|
175
|
+
requiresGrad?: boolean;
|
|
176
|
+
});
|
|
177
|
+
readonly eps: number;
|
|
178
|
+
forward(x: Tensor): Tensor;
|
|
179
|
+
state(): Promise<BatchNorm2dState>;
|
|
180
|
+
loadState(saved: BatchNorm2dState, opts?: {
|
|
181
|
+
requiresGrad?: boolean;
|
|
182
|
+
}): void;
|
|
183
|
+
}
|
|
184
|
+
/** Tiny CNN: Conv → BN → ReLU → Pool → Linear. */
|
|
185
|
+
export declare class TinyCnn extends Module {
|
|
186
|
+
readonly inChannels: number;
|
|
187
|
+
readonly numClasses: number;
|
|
188
|
+
conv: Conv2d;
|
|
189
|
+
bn: BatchNorm2d;
|
|
190
|
+
pool: MaxPool2d;
|
|
191
|
+
fc: Linear;
|
|
192
|
+
constructor(inChannels: number, numClasses: number, opts?: {
|
|
193
|
+
channels?: number;
|
|
194
|
+
spatial?: number;
|
|
195
|
+
requiresGrad?: boolean;
|
|
196
|
+
});
|
|
197
|
+
forward(x: Tensor): Tensor;
|
|
198
|
+
state(): Promise<Record<string, TensorStateSlice>>;
|
|
199
|
+
loadState(saved: Record<string, TensorStateSlice>, opts?: {
|
|
200
|
+
requiresGrad?: boolean;
|
|
201
|
+
}): void;
|
|
202
|
+
}
|
|
44
203
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
package/dist/module.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { randnValues, Tensor, tensor, zeros } from '@dxo/core';
|
|
1
|
+
import { embedding, ones, randnValues, Tensor, tensor, zeros } from '@dxo/core';
|
|
2
2
|
export class Module {
|
|
3
3
|
parameters() {
|
|
4
4
|
const out = [];
|
|
5
|
-
|
|
6
|
-
if (value instanceof Tensor)
|
|
5
|
+
const visit = (value) => {
|
|
6
|
+
if (value instanceof Tensor) {
|
|
7
7
|
out.push(value);
|
|
8
|
-
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (value instanceof Module) {
|
|
9
11
|
out.push(...value.parameters());
|
|
10
|
-
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
for (const item of value)
|
|
16
|
+
visit(item);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
for (const value of Object.values(this))
|
|
20
|
+
visit(value);
|
|
11
21
|
return out;
|
|
12
22
|
}
|
|
13
23
|
zeroGrad() {
|
|
@@ -45,7 +55,20 @@ export class Linear extends Module {
|
|
|
45
55
|
this.bias = zeros([outFeatures], { requiresGrad: rg });
|
|
46
56
|
}
|
|
47
57
|
forward(x) {
|
|
48
|
-
|
|
58
|
+
if (x.shape.length === 2) {
|
|
59
|
+
return x.matmul(this.weight).add(this.bias);
|
|
60
|
+
}
|
|
61
|
+
if (x.shape.length < 2) {
|
|
62
|
+
throw new Error(`Linear expects rank >= 2, got [${x.shape.join(',')}]`);
|
|
63
|
+
}
|
|
64
|
+
const last = x.shape[x.shape.length - 1];
|
|
65
|
+
if (last !== this.inFeatures) {
|
|
66
|
+
throw new Error(`Linear inFeatures ${this.inFeatures} != last dim ${last}`);
|
|
67
|
+
}
|
|
68
|
+
const leading = x.shape.slice(0, -1);
|
|
69
|
+
const flat = leading.reduce((n, d) => n * d, 1);
|
|
70
|
+
const y = x.reshape([flat, last]).matmul(this.weight).add(this.bias);
|
|
71
|
+
return y.reshape([...leading, this.outFeatures]);
|
|
49
72
|
}
|
|
50
73
|
/** Replace parameter leaves after an optimizer step. */
|
|
51
74
|
loadParameters(params) {
|
|
@@ -79,4 +102,372 @@ export class Sequential extends Module {
|
|
|
79
102
|
return out;
|
|
80
103
|
}
|
|
81
104
|
}
|
|
105
|
+
/** Token embedding: `forward(indices)` gathers rows from `[vocab, dim]`. */
|
|
106
|
+
export class Embedding extends Module {
|
|
107
|
+
numEmbeddings;
|
|
108
|
+
embeddingDim;
|
|
109
|
+
weight;
|
|
110
|
+
constructor(numEmbeddings, embeddingDim, opts = {}) {
|
|
111
|
+
super();
|
|
112
|
+
this.numEmbeddings = numEmbeddings;
|
|
113
|
+
this.embeddingDim = embeddingDim;
|
|
114
|
+
const rg = opts.requiresGrad ?? true;
|
|
115
|
+
const scale = Math.sqrt(1 / embeddingDim);
|
|
116
|
+
const raw = randnValues([numEmbeddings, embeddingDim]).map((v) => v * scale);
|
|
117
|
+
this.weight = tensor(raw, [numEmbeddings, embeddingDim], { requiresGrad: rg });
|
|
118
|
+
}
|
|
119
|
+
forward(indices) {
|
|
120
|
+
return embedding(this.weight, indices);
|
|
121
|
+
}
|
|
122
|
+
loadParameters(params) {
|
|
123
|
+
if (params.length < 1)
|
|
124
|
+
throw new Error('Embedding expects [weight]');
|
|
125
|
+
this.weight = params[0];
|
|
126
|
+
}
|
|
127
|
+
async state() {
|
|
128
|
+
return { weight: { shape: [...this.weight.shape], data: await this.weight.toArray() } };
|
|
129
|
+
}
|
|
130
|
+
loadState(saved) {
|
|
131
|
+
this.weight = tensor(saved.weight.data, saved.weight.shape, { requiresGrad: true });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** LayerNorm over the last dimension. */
|
|
135
|
+
export class LayerNorm extends Module {
|
|
136
|
+
normalizedShape;
|
|
137
|
+
weight;
|
|
138
|
+
bias;
|
|
139
|
+
constructor(normalizedShape, opts = {}) {
|
|
140
|
+
super();
|
|
141
|
+
this.normalizedShape = normalizedShape;
|
|
142
|
+
const rg = opts.requiresGrad ?? true;
|
|
143
|
+
this.eps = opts.eps ?? 1e-5;
|
|
144
|
+
this.weight = ones([normalizedShape], { requiresGrad: rg });
|
|
145
|
+
this.bias = zeros([normalizedShape], { requiresGrad: rg });
|
|
146
|
+
}
|
|
147
|
+
eps;
|
|
148
|
+
forward(x) {
|
|
149
|
+
return x.layerNorm(this.weight, this.bias, this.eps);
|
|
150
|
+
}
|
|
151
|
+
loadParameters(params) {
|
|
152
|
+
if (params.length < 2)
|
|
153
|
+
throw new Error('LayerNorm expects [weight, bias]');
|
|
154
|
+
this.weight = params[0];
|
|
155
|
+
this.bias = params[1];
|
|
156
|
+
}
|
|
157
|
+
async state() {
|
|
158
|
+
return {
|
|
159
|
+
weight: { shape: [...this.weight.shape], data: await this.weight.toArray() },
|
|
160
|
+
bias: { shape: [...this.bias.shape], data: await this.bias.toArray() },
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
loadState(saved) {
|
|
164
|
+
this.weight = tensor(saved.weight.data, saved.weight.shape, { requiresGrad: true });
|
|
165
|
+
this.bias = tensor(saved.bias.data, saved.bias.shape, { requiresGrad: true });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Causal multi-head self-attention over `[B, T, C]`.
|
|
170
|
+
* Head dim must divide `embedDim`.
|
|
171
|
+
*/
|
|
172
|
+
export class MultiheadAttention extends Module {
|
|
173
|
+
embedDim;
|
|
174
|
+
numHeads;
|
|
175
|
+
qkv;
|
|
176
|
+
proj;
|
|
177
|
+
constructor(embedDim, numHeads, opts = {}) {
|
|
178
|
+
super();
|
|
179
|
+
this.embedDim = embedDim;
|
|
180
|
+
this.numHeads = numHeads;
|
|
181
|
+
if (embedDim % numHeads !== 0) {
|
|
182
|
+
throw new Error(`embedDim ${embedDim} must be divisible by numHeads ${numHeads}`);
|
|
183
|
+
}
|
|
184
|
+
this.headDim = embedDim / numHeads;
|
|
185
|
+
this.qkv = new Linear(embedDim, embedDim * 3, opts);
|
|
186
|
+
this.proj = new Linear(embedDim, embedDim, opts);
|
|
187
|
+
}
|
|
188
|
+
headDim;
|
|
189
|
+
forward(x) {
|
|
190
|
+
const [b, t, c] = x.shape;
|
|
191
|
+
if (b === undefined || t === undefined || c === undefined || x.shape.length !== 3) {
|
|
192
|
+
throw new Error(`MultiheadAttention expects [B,T,C], got [${x.shape.join(',')}]`);
|
|
193
|
+
}
|
|
194
|
+
if (c !== this.embedDim) {
|
|
195
|
+
throw new Error(`expected embedDim ${this.embedDim}, got ${c}`);
|
|
196
|
+
}
|
|
197
|
+
const qkv = this.qkv.forward(x); // [B,T,3C]
|
|
198
|
+
const packed = qkv.reshape([b, t, 3, this.numHeads, this.headDim]);
|
|
199
|
+
// Split Q/K/V along axis 2 then move heads: [B,H,T,D]
|
|
200
|
+
const q = packed.narrow(2, 0, 1).reshape([b, t, this.numHeads, this.headDim]).transposeDims(1, 2);
|
|
201
|
+
const k = packed.narrow(2, 1, 1).reshape([b, t, this.numHeads, this.headDim]).transposeDims(1, 2);
|
|
202
|
+
const v = packed.narrow(2, 2, 1).reshape([b, t, this.numHeads, this.headDim]).transposeDims(1, 2);
|
|
203
|
+
const attn = q.scaledDotProductAttention(k, v, true); // [B,H,T,D]
|
|
204
|
+
const merged = attn.transposeDims(1, 2).reshape([b, t, this.embedDim]);
|
|
205
|
+
return this.proj.forward(merged);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** One decoder block: LN → causal MHA → residual → LN → MLP → residual. */
|
|
209
|
+
export class TransformerBlock extends Module {
|
|
210
|
+
ln1;
|
|
211
|
+
attn;
|
|
212
|
+
ln2;
|
|
213
|
+
fc1;
|
|
214
|
+
fc2;
|
|
215
|
+
constructor(embedDim, numHeads, opts = {}) {
|
|
216
|
+
super();
|
|
217
|
+
this.ln1 = new LayerNorm(embedDim, opts);
|
|
218
|
+
this.attn = new MultiheadAttention(embedDim, numHeads, opts);
|
|
219
|
+
this.ln2 = new LayerNorm(embedDim, opts);
|
|
220
|
+
this.fc1 = new Linear(embedDim, embedDim * 4, opts);
|
|
221
|
+
this.fc2 = new Linear(embedDim * 4, embedDim, opts);
|
|
222
|
+
}
|
|
223
|
+
forward(x) {
|
|
224
|
+
const h = x.add(this.attn.forward(this.ln1.forward(x)));
|
|
225
|
+
const mlp = this.fc2.forward(this.fc1.forward(this.ln2.forward(h)).relu());
|
|
226
|
+
return h.add(mlp);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Tiny decoder-only LM: token + position embed → N blocks → LN → tied logits via Linear. */
|
|
230
|
+
export class TinyTransformer extends Module {
|
|
231
|
+
vocabSize;
|
|
232
|
+
maxSeqLen;
|
|
233
|
+
embedDim;
|
|
234
|
+
numHeads;
|
|
235
|
+
numLayers;
|
|
236
|
+
tokEmbed;
|
|
237
|
+
posEmbed;
|
|
238
|
+
blocks;
|
|
239
|
+
lnF;
|
|
240
|
+
head;
|
|
241
|
+
constructor(vocabSize, maxSeqLen, embedDim, numHeads, numLayers, opts = {}) {
|
|
242
|
+
super();
|
|
243
|
+
this.vocabSize = vocabSize;
|
|
244
|
+
this.maxSeqLen = maxSeqLen;
|
|
245
|
+
this.embedDim = embedDim;
|
|
246
|
+
this.numHeads = numHeads;
|
|
247
|
+
this.numLayers = numLayers;
|
|
248
|
+
this.tokEmbed = new Embedding(vocabSize, embedDim, opts);
|
|
249
|
+
this.posEmbed = new Embedding(maxSeqLen, embedDim, opts);
|
|
250
|
+
this.blocks = Array.from({ length: numLayers }, () => new TransformerBlock(embedDim, numHeads, opts));
|
|
251
|
+
this.lnF = new LayerNorm(embedDim, opts);
|
|
252
|
+
this.head = new Linear(embedDim, vocabSize, opts);
|
|
253
|
+
}
|
|
254
|
+
/** `tokens` shape `[B, T]` with integer ids stored as f32. */
|
|
255
|
+
forward(tokens) {
|
|
256
|
+
const [b, t] = tokens.shape;
|
|
257
|
+
if (b === undefined || t === undefined || tokens.shape.length !== 2) {
|
|
258
|
+
throw new Error(`TinyTransformer expects [B,T], got [${tokens.shape.join(',')}]`);
|
|
259
|
+
}
|
|
260
|
+
if (t > this.maxSeqLen) {
|
|
261
|
+
throw new Error(`seq len ${t} exceeds maxSeqLen ${this.maxSeqLen}`);
|
|
262
|
+
}
|
|
263
|
+
const posIds = tensor(Array.from({ length: b * t }, (_, i) => i % t), [b, t]);
|
|
264
|
+
let x = this.tokEmbed.forward(tokens).add(this.posEmbed.forward(posIds));
|
|
265
|
+
for (const block of this.blocks) {
|
|
266
|
+
x = block.forward(x);
|
|
267
|
+
}
|
|
268
|
+
return this.head.forward(this.lnF.forward(x));
|
|
269
|
+
}
|
|
270
|
+
/** Flat named tensors for safetensors / checkpoint (stable keys). */
|
|
271
|
+
async state() {
|
|
272
|
+
const out = {};
|
|
273
|
+
const put = async (key, t) => {
|
|
274
|
+
out[key] = { shape: [...t.shape], data: await t.toArray() };
|
|
275
|
+
};
|
|
276
|
+
await put('tok_embed.weight', this.tokEmbed.weight);
|
|
277
|
+
await put('pos_embed.weight', this.posEmbed.weight);
|
|
278
|
+
for (let i = 0; i < this.blocks.length; i++) {
|
|
279
|
+
const block = this.blocks[i];
|
|
280
|
+
const p = `blocks.${i}`;
|
|
281
|
+
await put(`${p}.ln1.weight`, block.ln1.weight);
|
|
282
|
+
await put(`${p}.ln1.bias`, block.ln1.bias);
|
|
283
|
+
await put(`${p}.attn.qkv.weight`, block.attn.qkv.weight);
|
|
284
|
+
await put(`${p}.attn.qkv.bias`, block.attn.qkv.bias);
|
|
285
|
+
await put(`${p}.attn.proj.weight`, block.attn.proj.weight);
|
|
286
|
+
await put(`${p}.attn.proj.bias`, block.attn.proj.bias);
|
|
287
|
+
await put(`${p}.ln2.weight`, block.ln2.weight);
|
|
288
|
+
await put(`${p}.ln2.bias`, block.ln2.bias);
|
|
289
|
+
await put(`${p}.fc1.weight`, block.fc1.weight);
|
|
290
|
+
await put(`${p}.fc1.bias`, block.fc1.bias);
|
|
291
|
+
await put(`${p}.fc2.weight`, block.fc2.weight);
|
|
292
|
+
await put(`${p}.fc2.bias`, block.fc2.bias);
|
|
293
|
+
}
|
|
294
|
+
await put('ln_f.weight', this.lnF.weight);
|
|
295
|
+
await put('ln_f.bias', this.lnF.bias);
|
|
296
|
+
await put('head.weight', this.head.weight);
|
|
297
|
+
await put('head.bias', this.head.bias);
|
|
298
|
+
return out;
|
|
299
|
+
}
|
|
300
|
+
loadState(saved, opts = {}) {
|
|
301
|
+
const rg = opts.requiresGrad ?? true;
|
|
302
|
+
const take = (key) => {
|
|
303
|
+
const slice = saved[key];
|
|
304
|
+
if (!slice)
|
|
305
|
+
throw new Error(`TinyTransformer.loadState: missing '${key}'`);
|
|
306
|
+
return tensor(slice.data, slice.shape, { requiresGrad: rg });
|
|
307
|
+
};
|
|
308
|
+
this.tokEmbed.weight = take('tok_embed.weight');
|
|
309
|
+
this.posEmbed.weight = take('pos_embed.weight');
|
|
310
|
+
for (let i = 0; i < this.blocks.length; i++) {
|
|
311
|
+
const block = this.blocks[i];
|
|
312
|
+
const p = `blocks.${i}`;
|
|
313
|
+
block.ln1.weight = take(`${p}.ln1.weight`);
|
|
314
|
+
block.ln1.bias = take(`${p}.ln1.bias`);
|
|
315
|
+
block.attn.qkv.weight = take(`${p}.attn.qkv.weight`);
|
|
316
|
+
block.attn.qkv.bias = take(`${p}.attn.qkv.bias`);
|
|
317
|
+
block.attn.proj.weight = take(`${p}.attn.proj.weight`);
|
|
318
|
+
block.attn.proj.bias = take(`${p}.attn.proj.bias`);
|
|
319
|
+
block.ln2.weight = take(`${p}.ln2.weight`);
|
|
320
|
+
block.ln2.bias = take(`${p}.ln2.bias`);
|
|
321
|
+
block.fc1.weight = take(`${p}.fc1.weight`);
|
|
322
|
+
block.fc1.bias = take(`${p}.fc1.bias`);
|
|
323
|
+
block.fc2.weight = take(`${p}.fc2.weight`);
|
|
324
|
+
block.fc2.bias = take(`${p}.fc2.bias`);
|
|
325
|
+
}
|
|
326
|
+
this.lnF.weight = take('ln_f.weight');
|
|
327
|
+
this.lnF.bias = take('ln_f.bias');
|
|
328
|
+
this.head.weight = take('head.weight');
|
|
329
|
+
this.head.bias = take('head.bias');
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/** 2D convolution NCHW / OIHW. */
|
|
333
|
+
export class Conv2d extends Module {
|
|
334
|
+
inChannels;
|
|
335
|
+
outChannels;
|
|
336
|
+
kernelSize;
|
|
337
|
+
weight;
|
|
338
|
+
bias;
|
|
339
|
+
constructor(inChannels, outChannels, kernelSize, opts = {}) {
|
|
340
|
+
super();
|
|
341
|
+
this.inChannels = inChannels;
|
|
342
|
+
this.outChannels = outChannels;
|
|
343
|
+
this.kernelSize = kernelSize;
|
|
344
|
+
this.stride = opts.stride ?? 1;
|
|
345
|
+
this.padding = opts.padding ?? 0;
|
|
346
|
+
const rg = opts.requiresGrad ?? true;
|
|
347
|
+
const fanIn = inChannels * kernelSize * kernelSize;
|
|
348
|
+
const scale = Math.sqrt(2 / fanIn);
|
|
349
|
+
const n = outChannels * inChannels * kernelSize * kernelSize;
|
|
350
|
+
const raw = randnValues([n]).map((v) => v * scale);
|
|
351
|
+
this.weight = tensor(raw, [outChannels, inChannels, kernelSize, kernelSize], { requiresGrad: rg });
|
|
352
|
+
this.bias = zeros([outChannels], { requiresGrad: rg });
|
|
353
|
+
}
|
|
354
|
+
stride;
|
|
355
|
+
padding;
|
|
356
|
+
forward(x) {
|
|
357
|
+
return x.conv2d(this.weight, this.bias, this.stride, this.padding);
|
|
358
|
+
}
|
|
359
|
+
async state() {
|
|
360
|
+
return {
|
|
361
|
+
weight: { shape: [...this.weight.shape], data: await this.weight.toArray() },
|
|
362
|
+
bias: { shape: [...this.bias.shape], data: await this.bias.toArray() },
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
loadState(saved, opts = {}) {
|
|
366
|
+
const rg = opts.requiresGrad ?? true;
|
|
367
|
+
this.weight = tensor(saved.weight.data, saved.weight.shape, { requiresGrad: rg });
|
|
368
|
+
this.bias = tensor(saved.bias.data, saved.bias.shape, { requiresGrad: rg });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/** Max pooling 2D NCHW. */
|
|
372
|
+
export class MaxPool2d extends Module {
|
|
373
|
+
kernelSize;
|
|
374
|
+
constructor(kernelSize, opts = {}) {
|
|
375
|
+
super();
|
|
376
|
+
this.kernelSize = kernelSize;
|
|
377
|
+
this.stride = opts.stride ?? kernelSize;
|
|
378
|
+
this.padding = opts.padding ?? 0;
|
|
379
|
+
}
|
|
380
|
+
stride;
|
|
381
|
+
padding;
|
|
382
|
+
forward(x) {
|
|
383
|
+
return x.maxPool2d(this.kernelSize, this.stride, this.padding);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/** Batch norm 2D (per-batch stats, training-style). */
|
|
387
|
+
export class BatchNorm2d extends Module {
|
|
388
|
+
numFeatures;
|
|
389
|
+
weight;
|
|
390
|
+
bias;
|
|
391
|
+
constructor(numFeatures, opts = {}) {
|
|
392
|
+
super();
|
|
393
|
+
this.numFeatures = numFeatures;
|
|
394
|
+
this.eps = opts.eps ?? 1e-5;
|
|
395
|
+
const rg = opts.requiresGrad ?? true;
|
|
396
|
+
this.weight = ones([numFeatures], { requiresGrad: rg });
|
|
397
|
+
this.bias = zeros([numFeatures], { requiresGrad: rg });
|
|
398
|
+
}
|
|
399
|
+
eps;
|
|
400
|
+
forward(x) {
|
|
401
|
+
return x.batchNorm2d(this.weight, this.bias, this.eps);
|
|
402
|
+
}
|
|
403
|
+
async state() {
|
|
404
|
+
return {
|
|
405
|
+
weight: { shape: [...this.weight.shape], data: await this.weight.toArray() },
|
|
406
|
+
bias: { shape: [...this.bias.shape], data: await this.bias.toArray() },
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
loadState(saved, opts = {}) {
|
|
410
|
+
const rg = opts.requiresGrad ?? true;
|
|
411
|
+
this.weight = tensor(saved.weight.data, saved.weight.shape, { requiresGrad: rg });
|
|
412
|
+
this.bias = tensor(saved.bias.data, saved.bias.shape, { requiresGrad: rg });
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/** Tiny CNN: Conv → BN → ReLU → Pool → Linear. */
|
|
416
|
+
export class TinyCnn extends Module {
|
|
417
|
+
inChannels;
|
|
418
|
+
numClasses;
|
|
419
|
+
conv;
|
|
420
|
+
bn;
|
|
421
|
+
pool;
|
|
422
|
+
fc;
|
|
423
|
+
constructor(inChannels, numClasses, opts = {}) {
|
|
424
|
+
super();
|
|
425
|
+
this.inChannels = inChannels;
|
|
426
|
+
this.numClasses = numClasses;
|
|
427
|
+
const ch = opts.channels ?? 4;
|
|
428
|
+
const spatial = opts.spatial ?? 8;
|
|
429
|
+
const rg = opts.requiresGrad ?? true;
|
|
430
|
+
this.conv = new Conv2d(inChannels, ch, 3, { padding: 1, requiresGrad: rg });
|
|
431
|
+
this.bn = new BatchNorm2d(ch, { requiresGrad: rg });
|
|
432
|
+
this.pool = new MaxPool2d(2);
|
|
433
|
+
const flat = ch * Math.floor(spatial / 2) * Math.floor(spatial / 2);
|
|
434
|
+
this.fc = new Linear(flat, numClasses, { requiresGrad: rg });
|
|
435
|
+
}
|
|
436
|
+
forward(x) {
|
|
437
|
+
let h = this.conv.forward(x);
|
|
438
|
+
h = this.bn.forward(h);
|
|
439
|
+
h = relu(h);
|
|
440
|
+
h = this.pool.forward(h);
|
|
441
|
+
const n = h.shape[0];
|
|
442
|
+
return this.fc.forward(h.reshape([n, h.numel() / n]));
|
|
443
|
+
}
|
|
444
|
+
async state() {
|
|
445
|
+
const c = await this.conv.state();
|
|
446
|
+
const b = await this.bn.state();
|
|
447
|
+
const f = await this.fc.state();
|
|
448
|
+
return {
|
|
449
|
+
'conv.weight': c.weight,
|
|
450
|
+
'conv.bias': c.bias,
|
|
451
|
+
'bn.weight': b.weight,
|
|
452
|
+
'bn.bias': b.bias,
|
|
453
|
+
'fc.weight': f.weight,
|
|
454
|
+
'fc.bias': f.bias,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
loadState(saved, opts = {}) {
|
|
458
|
+
const rg = opts.requiresGrad ?? true;
|
|
459
|
+
const take = (k) => {
|
|
460
|
+
const t = saved[k];
|
|
461
|
+
if (!t)
|
|
462
|
+
throw new Error(`TinyCnn missing state key ${k}`);
|
|
463
|
+
return tensor(t.data, t.shape, { requiresGrad: rg });
|
|
464
|
+
};
|
|
465
|
+
this.conv.weight = take('conv.weight');
|
|
466
|
+
this.conv.bias = take('conv.bias');
|
|
467
|
+
this.bn.weight = take('bn.weight');
|
|
468
|
+
this.bn.bias = take('bn.bias');
|
|
469
|
+
this.fc.weight = take('fc.weight');
|
|
470
|
+
this.fc.bias = take('fc.bias');
|
|
471
|
+
}
|
|
472
|
+
}
|
|
82
473
|
//# sourceMappingURL=module.js.map
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxo/nn",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "DXO neural modules over @dxo/core (developer preview, API unstable)",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
@@ -21,18 +21,24 @@
|
|
|
21
21
|
"test:forward": "tsx ../../../scripts/test/nn-forward.ts"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@dxo/core": "0.0.
|
|
24
|
+
"@dxo/core": "0.0.10"
|
|
25
25
|
},
|
|
26
26
|
"keywords": [
|
|
27
27
|
"dxo",
|
|
28
28
|
"neural-network",
|
|
29
|
-
"typescript"
|
|
29
|
+
"typescript",
|
|
30
|
+
"deep-learning"
|
|
30
31
|
],
|
|
31
|
-
"
|
|
32
|
-
"access": "public"
|
|
33
|
-
},
|
|
32
|
+
"homepage": "https://github.com/ai4waifu/dxo-framework#readme",
|
|
34
33
|
"repository": {
|
|
35
34
|
"type": "git",
|
|
36
|
-
"url": "
|
|
35
|
+
"url": "https://github.com/ai4waifu/dxo-framework.git",
|
|
36
|
+
"directory": "projects/runtimes/dxo-nn"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/ai4waifu/dxo-framework/issues"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
37
43
|
}
|
|
38
44
|
}
|