@stellarapp/tfjs-stellar 1.0.0 → 1.0.1
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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/jest.config.d.ts +8 -0
- package/dist/jest.config.d.ts.map +1 -0
- package/{jest.config.ts → dist/jest.config.js} +8 -64
- package/dist/jest.config.js.map +1 -0
- package/dist/kv_cache.d.ts +53 -0
- package/dist/kv_cache.d.ts.map +1 -0
- package/{src/kv_cache.ts → dist/kv_cache.js} +35 -105
- package/dist/kv_cache.js.map +1 -0
- package/dist/layers/cached_rope_multihead_attention.d.ts +31 -0
- package/dist/layers/cached_rope_multihead_attention.d.ts.map +1 -0
- package/dist/layers/cached_rope_multihead_attention.js +76 -0
- package/dist/layers/cached_rope_multihead_attention.js.map +1 -0
- package/dist/layers/cached_rope_multihead_attention.test.d.ts +2 -0
- package/dist/layers/cached_rope_multihead_attention.test.d.ts.map +1 -0
- package/{src/layers/cached_rope_multihead_attention.test.ts → dist/layers/cached_rope_multihead_attention.test.js} +14 -30
- package/dist/layers/cached_rope_multihead_attention.test.js.map +1 -0
- package/dist/layers/gpt_decoder_block.d.ts +34 -0
- package/dist/layers/gpt_decoder_block.d.ts.map +1 -0
- package/{src/layers/gpt_decoder_block.ts → dist/layers/gpt_decoder_block.js} +10 -36
- package/dist/layers/gpt_decoder_block.js.map +1 -0
- package/dist/layers/index.d.ts +17 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +33 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/multihead_attention.d.ts +106 -0
- package/dist/layers/multihead_attention.d.ts.map +1 -0
- package/{src/layers/multihead_attention.ts → dist/layers/multihead_attention.js} +60 -162
- package/dist/layers/multihead_attention.js.map +1 -0
- package/dist/layers/multihead_attention.test.d.ts +2 -0
- package/dist/layers/multihead_attention.test.d.ts.map +1 -0
- package/{src/layers/multihead_attention.test.ts → dist/layers/multihead_attention.test.js} +48 -100
- package/dist/layers/multihead_attention.test.js.map +1 -0
- package/dist/layers/positional_encoding.d.ts +37 -0
- package/dist/layers/positional_encoding.d.ts.map +1 -0
- package/{src/layers/positional_encoding.ts → dist/layers/positional_encoding.js} +17 -60
- package/dist/layers/positional_encoding.js.map +1 -0
- package/dist/layers/positional_encoding.test.d.ts +2 -0
- package/dist/layers/positional_encoding.test.d.ts.map +1 -0
- package/{src/layers/positional_encoding.test.ts → dist/layers/positional_encoding.test.js} +39 -57
- package/dist/layers/positional_encoding.test.js.map +1 -0
- package/dist/layers/rotary_position_embedding.d.ts +39 -0
- package/dist/layers/rotary_position_embedding.d.ts.map +1 -0
- package/{src/layers/rotary_position_embedding.ts → dist/layers/rotary_position_embedding.js} +22 -86
- package/dist/layers/rotary_position_embedding.js.map +1 -0
- package/dist/layers/rotary_position_embedding.test.d.ts +2 -0
- package/dist/layers/rotary_position_embedding.test.d.ts.map +1 -0
- package/dist/layers/rotary_position_embedding.test.js +88 -0
- package/dist/layers/rotary_position_embedding.test.js.map +1 -0
- package/dist/layers/token_and_positional_embedding.d.ts +47 -0
- package/dist/layers/token_and_positional_embedding.d.ts.map +1 -0
- package/{src/layers/token_and_positional_embedding.ts → dist/layers/token_and_positional_embedding.js} +27 -67
- package/dist/layers/token_and_positional_embedding.js.map +1 -0
- package/dist/layers/token_and_positional_embedding.test.d.ts +2 -0
- package/dist/layers/token_and_positional_embedding.test.d.ts.map +1 -0
- package/{src/layers/token_and_positional_embedding.test.ts → dist/layers/token_and_positional_embedding.test.js} +7 -30
- package/dist/layers/token_and_positional_embedding.test.js.map +1 -0
- package/dist/layers/transformer_decoder.d.ts +69 -0
- package/dist/layers/transformer_decoder.d.ts.map +1 -0
- package/dist/layers/transformer_decoder.js +182 -0
- package/dist/layers/transformer_decoder.js.map +1 -0
- package/dist/layers/transformer_decoder.test.d.ts +2 -0
- package/dist/layers/transformer_decoder.test.d.ts.map +1 -0
- package/{src/layers/transformer_decoder.test.ts → dist/layers/transformer_decoder.test.js} +20 -48
- package/dist/layers/transformer_decoder.test.js.map +1 -0
- package/dist/layers/transformer_encoder.d.ts +55 -0
- package/dist/layers/transformer_encoder.d.ts.map +1 -0
- package/{src/layers/transformer_encoder.ts → dist/layers/transformer_encoder.js} +41 -90
- package/dist/layers/transformer_encoder.js.map +1 -0
- package/dist/layers/transformer_encoder.test.d.ts +2 -0
- package/dist/layers/transformer_encoder.test.d.ts.map +1 -0
- package/{src/layers/transformer_encoder.test.ts → dist/layers/transformer_encoder.test.js} +18 -45
- package/dist/layers/transformer_encoder.test.js.map +1 -0
- package/dist/losses/dice.d.ts +30 -0
- package/dist/losses/dice.d.ts.map +1 -0
- package/{src/losses/dice.ts → dist/losses/dice.js} +17 -80
- package/dist/losses/dice.js.map +1 -0
- package/dist/losses/index.d.ts +2 -0
- package/dist/losses/index.d.ts.map +1 -0
- package/dist/losses/index.js +2 -0
- package/dist/losses/index.js.map +1 -0
- package/dist/masks.d.ts +20 -0
- package/dist/masks.d.ts.map +1 -0
- package/{src/packing_mask.ts → dist/masks.js} +16 -7
- package/dist/masks.js.map +1 -0
- package/dist/metrics.d.ts +20 -0
- package/dist/metrics.d.ts.map +1 -0
- package/{src/metrics.ts → dist/metrics.js} +8 -12
- package/dist/metrics.js.map +1 -0
- package/dist/models/gpt_model.d.ts +94 -0
- package/dist/models/gpt_model.d.ts.map +1 -0
- package/{src/models/gpt_model.ts → dist/models/gpt_model.js} +41 -119
- package/dist/models/gpt_model.js.map +1 -0
- package/dist/models/index.d.ts +7 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +13 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/llm_model.d.ts +87 -0
- package/dist/models/llm_model.d.ts.map +1 -0
- package/{src/models/llm_model.ts → dist/models/llm_model.js} +51 -161
- package/dist/models/llm_model.js.map +1 -0
- package/dist/models/u_net.d.ts +40 -0
- package/dist/models/u_net.d.ts.map +1 -0
- package/{src/models/u_net.ts → dist/models/u_net.js} +27 -116
- package/dist/models/u_net.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kv_cache.d.ts +53 -0
- package/dist/src/kv_cache.d.ts.map +1 -0
- package/dist/src/kv_cache.js +135 -0
- package/dist/src/kv_cache.js.map +1 -0
- package/dist/src/layers/cached_rope_multihead_attention.d.ts +31 -0
- package/dist/src/layers/cached_rope_multihead_attention.d.ts.map +1 -0
- package/{src/layers/cached_rope_multihead_attention.ts → dist/src/layers/cached_rope_multihead_attention.js} +25 -62
- package/dist/src/layers/cached_rope_multihead_attention.js.map +1 -0
- package/dist/src/layers/cached_rope_multihead_attention.test.d.ts +2 -0
- package/dist/src/layers/cached_rope_multihead_attention.test.d.ts.map +1 -0
- package/dist/src/layers/cached_rope_multihead_attention.test.js +43 -0
- package/dist/src/layers/cached_rope_multihead_attention.test.js.map +1 -0
- package/dist/src/layers/gpt_decoder_block.d.ts +34 -0
- package/dist/src/layers/gpt_decoder_block.d.ts.map +1 -0
- package/dist/src/layers/gpt_decoder_block.js +51 -0
- package/dist/src/layers/gpt_decoder_block.js.map +1 -0
- package/dist/src/layers/index.d.ts +17 -0
- package/dist/src/layers/index.d.ts.map +1 -0
- package/dist/src/layers/index.js +33 -0
- package/dist/src/layers/index.js.map +1 -0
- package/dist/src/layers/multihead_attention.d.ts +106 -0
- package/dist/src/layers/multihead_attention.d.ts.map +1 -0
- package/dist/src/layers/multihead_attention.js +269 -0
- package/dist/src/layers/multihead_attention.js.map +1 -0
- package/dist/src/layers/multihead_attention.test.d.ts +2 -0
- package/dist/src/layers/multihead_attention.test.d.ts.map +1 -0
- package/dist/src/layers/multihead_attention.test.js +160 -0
- package/dist/src/layers/multihead_attention.test.js.map +1 -0
- package/dist/src/layers/positional_encoding.d.ts +37 -0
- package/dist/src/layers/positional_encoding.d.ts.map +1 -0
- package/dist/src/layers/positional_encoding.js +115 -0
- package/dist/src/layers/positional_encoding.js.map +1 -0
- package/dist/src/layers/positional_encoding.test.d.ts +2 -0
- package/dist/src/layers/positional_encoding.test.d.ts.map +1 -0
- package/dist/src/layers/positional_encoding.test.js +95 -0
- package/dist/src/layers/positional_encoding.test.js.map +1 -0
- package/dist/src/layers/rotary_position_embedding.d.ts +39 -0
- package/dist/src/layers/rotary_position_embedding.d.ts.map +1 -0
- package/dist/src/layers/rotary_position_embedding.js +99 -0
- package/dist/src/layers/rotary_position_embedding.js.map +1 -0
- package/dist/src/layers/rotary_position_embedding.test.d.ts +2 -0
- package/dist/src/layers/rotary_position_embedding.test.d.ts.map +1 -0
- package/dist/src/layers/rotary_position_embedding.test.js +88 -0
- package/dist/src/layers/rotary_position_embedding.test.js.map +1 -0
- package/dist/src/layers/token_and_positional_embedding.d.ts +47 -0
- package/dist/src/layers/token_and_positional_embedding.d.ts.map +1 -0
- package/dist/src/layers/token_and_positional_embedding.js +109 -0
- package/dist/src/layers/token_and_positional_embedding.js.map +1 -0
- package/dist/src/layers/token_and_positional_embedding.test.d.ts +2 -0
- package/dist/src/layers/token_and_positional_embedding.test.d.ts.map +1 -0
- package/dist/src/layers/token_and_positional_embedding.test.js +58 -0
- package/dist/src/layers/token_and_positional_embedding.test.js.map +1 -0
- package/dist/src/layers/transformer_decoder.d.ts +69 -0
- package/dist/src/layers/transformer_decoder.d.ts.map +1 -0
- package/{src/layers/transformer_decoder.ts → dist/src/layers/transformer_decoder.js} +41 -95
- package/dist/src/layers/transformer_decoder.js.map +1 -0
- package/dist/src/layers/transformer_decoder.test.d.ts +2 -0
- package/dist/src/layers/transformer_decoder.test.d.ts.map +1 -0
- package/dist/src/layers/transformer_decoder.test.js +72 -0
- package/dist/src/layers/transformer_decoder.test.js.map +1 -0
- package/dist/src/layers/transformer_encoder.d.ts +55 -0
- package/dist/src/layers/transformer_encoder.d.ts.map +1 -0
- package/dist/src/layers/transformer_encoder.js +175 -0
- package/dist/src/layers/transformer_encoder.js.map +1 -0
- package/dist/src/layers/transformer_encoder.test.d.ts +2 -0
- package/dist/src/layers/transformer_encoder.test.d.ts.map +1 -0
- package/dist/src/layers/transformer_encoder.test.js +58 -0
- package/dist/src/layers/transformer_encoder.test.js.map +1 -0
- package/dist/src/losses/dice.d.ts +30 -0
- package/dist/src/losses/dice.d.ts.map +1 -0
- package/dist/src/losses/dice.js +93 -0
- package/dist/src/losses/dice.js.map +1 -0
- package/dist/src/losses/index.d.ts +2 -0
- package/dist/src/losses/index.d.ts.map +1 -0
- package/dist/src/losses/index.js +2 -0
- package/dist/src/losses/index.js.map +1 -0
- package/dist/src/masks.d.ts +20 -0
- package/dist/src/masks.d.ts.map +1 -0
- package/dist/src/masks.js +37 -0
- package/dist/src/masks.js.map +1 -0
- package/dist/src/metrics.d.ts +20 -0
- package/dist/src/metrics.d.ts.map +1 -0
- package/dist/src/metrics.js +28 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/models/gpt_model.d.ts +94 -0
- package/dist/src/models/gpt_model.d.ts.map +1 -0
- package/dist/src/models/gpt_model.js +154 -0
- package/dist/src/models/gpt_model.js.map +1 -0
- package/dist/src/models/index.d.ts +3 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/{src/models/index.ts → dist/src/models/index.js} +1 -0
- package/dist/src/models/index.js.map +1 -0
- package/dist/src/models/llm_model.d.ts +87 -0
- package/dist/src/models/llm_model.d.ts.map +1 -0
- package/dist/src/models/llm_model.js +245 -0
- package/dist/src/models/llm_model.js.map +1 -0
- package/dist/src/models/u_net.d.ts +40 -0
- package/dist/src/models/u_net.d.ts.map +1 -0
- package/dist/src/models/u_net.js +151 -0
- package/dist/src/models/u_net.js.map +1 -0
- package/{src/tfjs_types.ts → dist/src/tfjs_types.d.ts} +1 -6
- package/dist/src/tfjs_types.d.ts.map +1 -0
- package/dist/src/tfjs_types.js +2 -0
- package/dist/src/tfjs_types.js.map +1 -0
- package/dist/src/utils.d.ts +28 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/{src/utils.ts → dist/src/utils.js} +10 -33
- package/dist/src/utils.js.map +1 -0
- package/dist/src/utils.test.d.ts +2 -0
- package/dist/src/utils.test.d.ts.map +1 -0
- package/{src/utils.test.ts → dist/src/utils.test.js} +22 -50
- package/dist/src/utils.test.js.map +1 -0
- package/dist/tfjs_types.d.ts +10 -0
- package/dist/tfjs_types.d.ts.map +1 -0
- package/dist/tfjs_types.js +2 -0
- package/dist/tfjs_types.js.map +1 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +63 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +73 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +10 -4
- package/src/index.ts +0 -93
- package/src/layers/rotary_position_embedding.test.ts +0 -107
- package/src/losses/index.ts +0 -1
- package/src/testing.ts +0 -1
- package/tsconfig.json +0 -49
|
@@ -1,89 +1,48 @@
|
|
|
1
1
|
import * as tf from "@tensorflow/tfjs";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { LlmModel, type LlmModelArgs } from "@/models/llm_model";
|
|
5
|
-
import { KvCacheContainer } from "@/kv_cache";
|
|
6
|
-
import { type DisposeResult } from "@tensorflow/tfjs-layers/dist/engine/topology";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface GptModelArgs extends LlmModelArgs {
|
|
10
|
-
/**
|
|
11
|
-
* Number of heads per attention layer.
|
|
12
|
-
*/
|
|
13
|
-
numHeads: number;
|
|
14
|
-
/**
|
|
15
|
-
* Number of GPT decoder blocks.
|
|
16
|
-
*/
|
|
17
|
-
numLayers: number;
|
|
18
|
-
/**
|
|
19
|
-
* The embedding size of each token.
|
|
20
|
-
*/
|
|
21
|
-
embedDim: number;
|
|
22
|
-
/**
|
|
23
|
-
* The vocabulary size of the embedding layer and number of units of the output
|
|
24
|
-
* layer. This is also the tokenizer vocabulary size.
|
|
25
|
-
*/
|
|
26
|
-
vocabSize: number;
|
|
27
|
-
/**
|
|
28
|
-
* Pad the embeddings' vocab size and output layer's units to the next nearest
|
|
29
|
-
* multiple of 64 to optimize hardware efficiency. Defaults to `true`.
|
|
30
|
-
*
|
|
31
|
-
* For example: if a tokenizer has 50,257 tokens, the model uses 50,304 for the
|
|
32
|
-
* vocab size and output units count.
|
|
33
|
-
*/
|
|
34
|
-
padToMultipleOf64?: boolean;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
import { LlmModel } from "../models/llm_model";
|
|
3
|
+
import { GPT2DecoderBlock } from "../layers/gpt_decoder_block";
|
|
38
4
|
/**
|
|
39
5
|
* This is a subclass of tf.Sequential that creating a GPT-like model and
|
|
40
6
|
* automatically handles padding (and masking) the vocab size for hardware
|
|
41
7
|
* efficiency.
|
|
42
|
-
*
|
|
8
|
+
*
|
|
43
9
|
* Example:
|
|
44
|
-
*
|
|
10
|
+
*
|
|
45
11
|
* ```javascript
|
|
46
|
-
*
|
|
12
|
+
*
|
|
47
13
|
* const model = new GptModel({ numLayers: 1, numHeads: 1, embedDim: 16, vocabSize: 64 });
|
|
48
14
|
* model.compile({ loss: "sparseCategoricalCrossentropy", optimizer: "adam" });
|
|
49
|
-
*
|
|
15
|
+
*
|
|
50
16
|
* // use fitDataset() instead of fit for masking support
|
|
51
17
|
* model.fitDataset(your_batched_generator_dataset, { epochs: 1 });
|
|
52
|
-
*
|
|
18
|
+
*
|
|
53
19
|
* const kv_cache = new KvCacheContainer(your_preferred_max_sequence_length);
|
|
54
|
-
*
|
|
20
|
+
*
|
|
55
21
|
* // use generate() and predictNextToken() instead of predict() for masking and auto memory cleanup
|
|
56
22
|
* model.generate(tokenized_tensor1d_input, kv_cache, onPredict_callback)
|
|
57
|
-
*
|
|
58
|
-
*
|
|
23
|
+
*
|
|
24
|
+
*
|
|
59
25
|
* ```
|
|
60
26
|
*/
|
|
61
27
|
export class GptModel extends LlmModel {
|
|
62
28
|
static className = "GptModel";
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
protected readonly padToMultipleOf64: boolean;
|
|
69
|
-
|
|
29
|
+
numHeads;
|
|
30
|
+
numLayers;
|
|
31
|
+
embedDim;
|
|
32
|
+
vocabSize;
|
|
33
|
+
padToMultipleOf64;
|
|
70
34
|
// this is kept for reproducibility and model history but is not important since
|
|
71
35
|
// it can be calculated mathematically
|
|
72
|
-
|
|
73
|
-
|
|
36
|
+
vocabSizePadded;
|
|
74
37
|
// the amount to pad the embedding vocab size and dense output units count
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
38
|
+
vocab_padding_mask;
|
|
78
39
|
/**
|
|
79
40
|
* DO NOT add layers in the constructor or it will break tf.loadLayersModel().
|
|
80
41
|
* It should be done in build() instead.
|
|
81
42
|
*/
|
|
82
|
-
constructor(args
|
|
43
|
+
constructor(args) {
|
|
83
44
|
const { numHeads, numLayers, embedDim, vocabSize, padToMultipleOf64 = true, ...rest } = args;
|
|
84
|
-
|
|
85
45
|
super({ name: "model", ...rest });
|
|
86
|
-
|
|
87
46
|
this.numHeads = numHeads;
|
|
88
47
|
this.numLayers = numLayers;
|
|
89
48
|
this.embedDim = embedDim;
|
|
@@ -93,68 +52,47 @@ export class GptModel extends LlmModel {
|
|
|
93
52
|
? Math.ceil(this.vocabSize / 64) * 64
|
|
94
53
|
: this.vocabSize;
|
|
95
54
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
protected override fitBatch(
|
|
99
|
-
xs: tf.Tensor,
|
|
100
|
-
ys: tf.Tensor,
|
|
101
|
-
loss_mask: tf.Tensor | undefined,
|
|
102
|
-
loss_function: LossOrMetricFn,
|
|
103
|
-
other_masks?: { [key: string]: tf.Tensor | undefined }
|
|
104
|
-
) {
|
|
105
|
-
let y_pred: tf.Tensor;
|
|
106
|
-
|
|
55
|
+
fitBatch(xs, ys, loss_mask, loss_function, other_masks) {
|
|
56
|
+
let y_pred;
|
|
107
57
|
// forward pass, calculate loss
|
|
108
58
|
const { value: loss, grads } = tf.variableGrads(() => {
|
|
109
59
|
y_pred = this.apply(xs, {
|
|
110
60
|
training: true,
|
|
111
61
|
...other_masks
|
|
112
|
-
})
|
|
113
|
-
|
|
62
|
+
});
|
|
114
63
|
// apply vocab pad masking
|
|
115
64
|
if (this.vocab_padding_mask) {
|
|
116
65
|
y_pred = y_pred.add(this.vocab_padding_mask);
|
|
117
66
|
}
|
|
118
|
-
|
|
119
67
|
y_pred = tf.softmax(y_pred);
|
|
120
|
-
|
|
121
68
|
// manually dispose later instead of the built-in disposal from variableGrads
|
|
122
69
|
tf.keep(y_pred);
|
|
123
|
-
|
|
124
70
|
const loss = loss_mask
|
|
125
71
|
? loss_function(ys, y_pred).mul(loss_mask)
|
|
126
72
|
: loss_function(ys, y_pred);
|
|
127
|
-
|
|
128
|
-
return loss.mean() as tf.Scalar;
|
|
73
|
+
return loss.mean();
|
|
129
74
|
});
|
|
130
|
-
|
|
131
75
|
// backpropagation
|
|
132
76
|
this.optimizer.applyGradients(grads);
|
|
133
|
-
|
|
134
77
|
return {
|
|
135
|
-
y_pred: y_pred
|
|
78
|
+
y_pred: y_pred,
|
|
136
79
|
loss
|
|
137
80
|
};
|
|
138
81
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
82
|
/**
|
|
142
83
|
* Overrides LlmModel.predictNextToken to add softmax before argMax because the final
|
|
143
84
|
* dense layer doesn't have an activation.
|
|
144
|
-
*
|
|
85
|
+
*
|
|
145
86
|
* TODO: implement temperature and multinomial sampling so that the model has varied outputs
|
|
146
87
|
*/
|
|
147
|
-
|
|
88
|
+
predictNextToken(input, kv_cache) {
|
|
148
89
|
if (input.shape[0] != 1) {
|
|
149
90
|
throw Error(`GptModel.predictNextToken: ${this.name} expects an input with a batch size of 1`);
|
|
150
91
|
}
|
|
151
|
-
|
|
152
92
|
return tf.tidy(() => {
|
|
153
93
|
// comes back as [batch, sequence_length, vocab_size]
|
|
154
|
-
const prediction = this.apply(input, { kvCache: kv_cache })
|
|
155
|
-
|
|
94
|
+
const prediction = this.apply(input, { kvCache: kv_cache });
|
|
156
95
|
const [batch_size, sequence_length, vocab_size] = prediction.shape;
|
|
157
|
-
|
|
158
96
|
// get the last token
|
|
159
97
|
const next_token = this.vocab_padding_mask != undefined
|
|
160
98
|
? prediction
|
|
@@ -166,52 +104,40 @@ export class GptModel extends LlmModel {
|
|
|
166
104
|
.slice([0, sequence_length - 1, 0], [batch_size, 1, vocab_size])
|
|
167
105
|
.softmax()
|
|
168
106
|
.argMax(2);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
})
|
|
107
|
+
return next_token;
|
|
108
|
+
});
|
|
172
109
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
override build(inputShape?: tf.Shape | tf.Shape[]): void {
|
|
110
|
+
build(inputShape) {
|
|
176
111
|
const actual_vocab_size = this.vocabSizePadded
|
|
177
112
|
? this.vocabSizePadded
|
|
178
113
|
: this.padToMultipleOf64
|
|
179
114
|
? Math.ceil(this.vocabSize / 64) * 64
|
|
180
|
-
: this.vocabSize
|
|
181
|
-
|
|
115
|
+
: this.vocabSize;
|
|
182
116
|
if (this.layers.length == 0) {
|
|
183
117
|
[
|
|
184
118
|
tf.layers.embedding({ inputDim: actual_vocab_size, outputDim: this.embedDim, batchInputShape: [null, null] }),
|
|
185
|
-
...Array(this.numLayers).fill(0).map(_ =>
|
|
119
|
+
...Array(this.numLayers).fill(0).map(_ => new GPT2DecoderBlock({ numHeads: this.numHeads, embedDim: this.embedDim })),
|
|
186
120
|
tf.layers.dense({ units: actual_vocab_size })
|
|
187
|
-
].forEach(layer => this.add(layer))
|
|
121
|
+
].forEach(layer => this.add(layer));
|
|
188
122
|
}
|
|
189
|
-
|
|
190
123
|
if (this.vocab_padding_mask) {
|
|
191
124
|
this.vocab_padding_mask.dispose();
|
|
192
125
|
}
|
|
193
|
-
|
|
194
126
|
if (this.padToMultipleOf64 && actual_vocab_size > this.vocabSize) {
|
|
195
|
-
this.vocab_padding_mask = tf.tidy(() => tf.where
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
127
|
+
this.vocab_padding_mask = tf.tidy(() => tf.where(
|
|
128
|
+
// Create a mask of padded vocab length, values after the index "vocabSize"
|
|
129
|
+
// are set to -1e7 to mask out those positions so that softmax will ignore
|
|
130
|
+
// them. This mask is added to the final dense layer's output
|
|
131
|
+
tf.range(0, actual_vocab_size).greaterEqual(this.vocabSize), -1e7, 0).toFloat());
|
|
200
132
|
}
|
|
201
|
-
|
|
202
133
|
super.build(inputShape);
|
|
203
134
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
override dispose(): DisposeResult {
|
|
135
|
+
dispose() {
|
|
207
136
|
this.vocab_padding_mask?.dispose();
|
|
208
137
|
return super.dispose();
|
|
209
138
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
override getConfig() {
|
|
139
|
+
getConfig() {
|
|
213
140
|
const base_config = super.getConfig();
|
|
214
|
-
|
|
215
141
|
const config = {
|
|
216
142
|
numHeads: this.numHeads,
|
|
217
143
|
numLayers: this.numLayers,
|
|
@@ -219,14 +145,10 @@ export class GptModel extends LlmModel {
|
|
|
219
145
|
vocabSize: this.vocabSize,
|
|
220
146
|
vocabSizePadded: this.vocabSizePadded,
|
|
221
147
|
padToMultipleOf64: this.padToMultipleOf64
|
|
222
|
-
}
|
|
223
|
-
|
|
148
|
+
};
|
|
224
149
|
Object.assign(config, base_config);
|
|
225
|
-
|
|
226
150
|
return config;
|
|
227
151
|
}
|
|
228
|
-
|
|
229
152
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
153
|
tf.serialization.registerClass(GptModel);
|
|
154
|
+
//# sourceMappingURL=gpt_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpt_model.js","sourceRoot":"","sources":["../../src/models/gpt_model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LlmModel, type LlmModelArgs } from "./llm_model";
|
|
2
|
+
import { GptModel, type GptModelArgs } from "../models/gpt_model";
|
|
3
|
+
import { type UNetArgs } from "../models/u_net";
|
|
4
|
+
export declare function llmModel(args: LlmModelArgs): LlmModel;
|
|
5
|
+
export declare function gptModel(args: GptModelArgs): GptModel;
|
|
6
|
+
export declare function unetModel(args: UNetArgs): import("@tensorflow/tfjs-layers").LayersModel;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG5D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,YAE1C;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,YAE1C;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,iDAEvC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LlmModel } from "./llm_model";
|
|
2
|
+
import { GptModel } from "../models/gpt_model";
|
|
3
|
+
import { createUNet } from "../models/u_net";
|
|
4
|
+
export function llmModel(args) {
|
|
5
|
+
return new LlmModel(args);
|
|
6
|
+
}
|
|
7
|
+
export function gptModel(args) {
|
|
8
|
+
return new GptModel(args);
|
|
9
|
+
}
|
|
10
|
+
export function unetModel(args) {
|
|
11
|
+
return createUNet(args);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAqB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAG5D,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACvC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAGD,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACvC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as tf from "@tensorflow/tfjs";
|
|
2
|
+
import { Dataset, type LossOrMetricFn } from "../tfjs_types";
|
|
3
|
+
import { KvCacheContainer } from "../kv_cache";
|
|
4
|
+
export interface LlmModelArgs extends tf.SequentialArgs {
|
|
5
|
+
}
|
|
6
|
+
interface DatasetArgs extends tf.TensorContainerObject {
|
|
7
|
+
xs: tf.Tensor;
|
|
8
|
+
ys: tf.Tensor;
|
|
9
|
+
loss_mask?: tf.Tensor;
|
|
10
|
+
packing_mask?: tf.Tensor;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* This class overrides the `fitDataset()` function of tf.Sequential to support loss
|
|
14
|
+
* and packing masking. Use the `generate()` function to autoregressively predict the
|
|
15
|
+
* next, set `stopPredicting=true` to stop.
|
|
16
|
+
*/
|
|
17
|
+
export declare class LlmModel extends tf.Sequential {
|
|
18
|
+
static className: string;
|
|
19
|
+
private stopPredicting_;
|
|
20
|
+
constructor(args: LlmModelArgs);
|
|
21
|
+
/**
|
|
22
|
+
* Returns the metric functions and names so that metrics can be reported
|
|
23
|
+
* as they are in the base version of model.fitDataset
|
|
24
|
+
*
|
|
25
|
+
* e.g. "categoricalAccuracy" should be reported as "acc"
|
|
26
|
+
*/
|
|
27
|
+
protected getMetricFunctions(): {
|
|
28
|
+
metric_fn: import("@tensorflow/tfjs-layers/dist/types").LossOrMetricFn;
|
|
29
|
+
metric_label: string;
|
|
30
|
+
}[];
|
|
31
|
+
/**
|
|
32
|
+
* Get exactly one loss function from the loss function provided in `model.compile()`.
|
|
33
|
+
* If a string identifier was used, convert it to the actual loss function.
|
|
34
|
+
*/
|
|
35
|
+
protected getLossFunction(): LossOrMetricFn;
|
|
36
|
+
/**
|
|
37
|
+
* Train on a `tf.data.generator` dataset. See https://js.tensorflow.org/api/latest/#data.generator.
|
|
38
|
+
*
|
|
39
|
+
* The generator should yield `xs`, `ys`, `loss_mask` (if fine-tuning), and
|
|
40
|
+
* `packing_mask` (if sequence packing was done)
|
|
41
|
+
*
|
|
42
|
+
* @param tfdataset an instance of a `tf.Dataset` generator
|
|
43
|
+
* @param args a ModelFitDatasetArgs
|
|
44
|
+
*/
|
|
45
|
+
fitDataset<T = DatasetArgs>(tfdataset: Dataset<T>, args: tf.ModelFitDatasetArgs<T>): Promise<any>;
|
|
46
|
+
/**
|
|
47
|
+
* Run the core forward and backward propagation on one training batch. This
|
|
48
|
+
* should be called within a `tf.tidy()`.
|
|
49
|
+
*
|
|
50
|
+
* @param xs the sample/input tensor
|
|
51
|
+
* @param ys the label/target tensor
|
|
52
|
+
* @param loss_mask a loss mask to ignore the prediction's non-assistant tokens
|
|
53
|
+
* @param loss_function the model's loss function
|
|
54
|
+
* @param other_masks other masks used by the model's layers e.g. packing mask, causal mask
|
|
55
|
+
*/
|
|
56
|
+
protected fitBatch(xs: tf.Tensor, ys: tf.Tensor, loss_mask: tf.Tensor | undefined, loss_function: LossOrMetricFn, other_masks?: {
|
|
57
|
+
[key: string]: tf.Tensor | undefined;
|
|
58
|
+
}): {
|
|
59
|
+
y_pred: tf.Tensor<tf.Rank>;
|
|
60
|
+
loss: tf.Scalar;
|
|
61
|
+
};
|
|
62
|
+
compile(args: tf.ModelCompileArgs): void;
|
|
63
|
+
/**
|
|
64
|
+
* Autoregressively generate the next token until `model.stopPredicting` is set
|
|
65
|
+
* to `true` or the KV cache reaches its maximum sequence length. For a single chat
|
|
66
|
+
* session, the input should only be the most recent prompt(s). The KV cache stores
|
|
67
|
+
* the prior chat history up until the most recent chat.
|
|
68
|
+
*
|
|
69
|
+
* @param input tokenized input of the newest chat
|
|
70
|
+
* @param kv_cache an instance of a KV cache container
|
|
71
|
+
* @param onPredict callback function to receive the most recent token predicted
|
|
72
|
+
*/
|
|
73
|
+
generate(input: tf.Tensor1D, kv_cache: KvCacheContainer, onPredict: (token: tf.Tensor) => Promise<void>): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Given a tokenized sentence, predict the next token (word).
|
|
76
|
+
* A normal prediction is ran to get an output with the shape
|
|
77
|
+
* `[ batch_size, sentence_length, vocab_size ]` and the `vocab_size`
|
|
78
|
+
* position with the highest scored probability in the last
|
|
79
|
+
* position of `sentence_length` is returned as the next predicted
|
|
80
|
+
* token.
|
|
81
|
+
*/
|
|
82
|
+
predictNextToken(input: tf.Tensor2D, kv_cache: KvCacheContainer): tf.Tensor2D;
|
|
83
|
+
get stopPredicting(): boolean;
|
|
84
|
+
set stopPredicting(stop: boolean);
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=llm_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm_model.d.ts","sourceRoot":"","sources":["../../src/models/llm_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,YAAa,SAAQ,EAAE,CAAC,cAAc;CACtD;AAGD,UAAU,WAAY,SAAQ,EAAE,CAAC,qBAAqB;IAClD,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;IACd,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;CAC5B;AAGD;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,EAAE,CAAC,UAAU;IACvC,MAAM,CAAC,SAAS,SAAc;IAE9B,OAAO,CAAC,eAAe,CAAiB;gBAE5B,IAAI,EAAE,YAAY;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB;;;;IAU5B;;;OAGG;IACH,SAAS,CAAC,eAAe,IAAI,cAAc;IAoC3C;;;;;;;;OAQG;IACY,UAAU,CAAC,CAAC,GAAG,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAqHhH;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAQ,CACd,EAAE,EAAE,EAAE,CAAC,MAAM,EACb,EAAE,EAAE,EAAE,CAAC,MAAM,EACb,SAAS,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,cAAc,EAC7B,WAAW,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,SAAS,CAAA;KAAE,GACvD;QACC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC;KACnB;IA+BQ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,GAAG,IAAI;IASjD;;;;;;;;;OASG;IACU,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IA2BpH;;;;;;;OAOG;IACI,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB;IAmBtE,IAAI,cAAc,IAKO,OAAO,CAH/B;IAGD,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAE/B;CAEJ"}
|