cui-llama.rn 1.4.0 → 1.4.2

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.
Files changed (108) hide show
  1. package/README.md +4 -23
  2. package/android/build.gradle +12 -3
  3. package/android/src/main/CMakeLists.txt +13 -7
  4. package/android/src/main/java/com/rnllama/LlamaContext.java +27 -20
  5. package/android/src/main/java/com/rnllama/RNLlama.java +5 -1
  6. package/android/src/main/jni.cpp +15 -12
  7. package/android/src/main/jniLibs/arm64-v8a/librnllama.so +0 -0
  8. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8.so +0 -0
  9. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2.so +0 -0
  10. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_dotprod.so +0 -0
  11. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_dotprod_i8mm.so +0 -0
  12. package/android/src/main/jniLibs/arm64-v8a/librnllama_v8_2_i8mm.so +0 -0
  13. package/android/src/main/jniLibs/x86_64/librnllama.so +0 -0
  14. package/android/src/main/jniLibs/x86_64/librnllama_x86_64.so +0 -0
  15. package/cpp/README.md +1 -1
  16. package/cpp/common.cpp +158 -267
  17. package/cpp/common.h +46 -12
  18. package/cpp/ggml-alloc.c +1042 -1037
  19. package/cpp/ggml-backend-impl.h +255 -256
  20. package/cpp/ggml-backend-reg.cpp +582 -582
  21. package/cpp/ggml-backend.cpp +2002 -2002
  22. package/cpp/ggml-backend.h +354 -352
  23. package/cpp/ggml-common.h +1853 -1853
  24. package/cpp/ggml-cpp.h +39 -39
  25. package/cpp/ggml-cpu-aarch64.cpp +4247 -4247
  26. package/cpp/ggml-cpu-aarch64.h +8 -8
  27. package/cpp/ggml-cpu-impl.h +386 -386
  28. package/cpp/ggml-cpu-quants.c +10920 -10839
  29. package/cpp/ggml-cpu-traits.cpp +36 -36
  30. package/cpp/ggml-cpu-traits.h +38 -38
  31. package/cpp/ggml-cpu.c +329 -60
  32. package/cpp/ggml-cpu.cpp +10 -2
  33. package/cpp/ggml-cpu.h +135 -135
  34. package/cpp/ggml-impl.h +567 -567
  35. package/cpp/ggml-metal-impl.h +17 -17
  36. package/cpp/ggml-metal.m +4884 -4884
  37. package/cpp/ggml-quants.c +5238 -5238
  38. package/cpp/ggml-threading.h +14 -14
  39. package/cpp/ggml.c +6514 -6448
  40. package/cpp/ggml.h +2194 -2163
  41. package/cpp/gguf.cpp +1329 -1325
  42. package/cpp/gguf.h +202 -202
  43. package/cpp/json-schema-to-grammar.cpp +1045 -1045
  44. package/cpp/json-schema-to-grammar.h +8 -8
  45. package/cpp/json.hpp +24766 -24766
  46. package/cpp/llama-adapter.cpp +347 -346
  47. package/cpp/llama-adapter.h +74 -73
  48. package/cpp/llama-arch.cpp +1487 -1434
  49. package/cpp/llama-arch.h +400 -395
  50. package/cpp/llama-batch.cpp +368 -368
  51. package/cpp/llama-batch.h +88 -88
  52. package/cpp/llama-chat.cpp +578 -567
  53. package/cpp/llama-chat.h +52 -51
  54. package/cpp/llama-context.cpp +1775 -1771
  55. package/cpp/llama-context.h +128 -128
  56. package/cpp/llama-cparams.cpp +1 -1
  57. package/cpp/llama-cparams.h +37 -37
  58. package/cpp/llama-cpp.h +30 -30
  59. package/cpp/llama-grammar.cpp +1139 -1139
  60. package/cpp/llama-grammar.h +143 -143
  61. package/cpp/llama-hparams.cpp +71 -71
  62. package/cpp/llama-hparams.h +139 -140
  63. package/cpp/llama-impl.cpp +167 -167
  64. package/cpp/llama-impl.h +61 -61
  65. package/cpp/llama-kv-cache.cpp +718 -718
  66. package/cpp/llama-kv-cache.h +218 -218
  67. package/cpp/llama-mmap.cpp +2 -1
  68. package/cpp/llama-mmap.h +67 -67
  69. package/cpp/llama-model-loader.cpp +1124 -1011
  70. package/cpp/llama-model-loader.h +167 -158
  71. package/cpp/llama-model.cpp +3997 -2202
  72. package/cpp/llama-model.h +370 -391
  73. package/cpp/llama-sampling.cpp +2408 -2406
  74. package/cpp/llama-sampling.h +32 -48
  75. package/cpp/llama-vocab.cpp +3247 -1982
  76. package/cpp/llama-vocab.h +125 -182
  77. package/cpp/llama.cpp +416 -2886
  78. package/cpp/llama.h +1323 -1285
  79. package/cpp/log.cpp +401 -401
  80. package/cpp/log.h +121 -121
  81. package/cpp/rn-llama.cpp +822 -0
  82. package/cpp/rn-llama.h +123 -0
  83. package/cpp/rn-llama.hpp +18 -12
  84. package/cpp/sampling.cpp +505 -500
  85. package/cpp/sgemm.cpp +2597 -2597
  86. package/cpp/speculative.cpp +277 -274
  87. package/cpp/speculative.h +28 -28
  88. package/cpp/unicode.cpp +2 -3
  89. package/ios/CMakeLists.txt +99 -0
  90. package/ios/RNLlama.h +5 -1
  91. package/ios/RNLlama.mm +2 -2
  92. package/ios/RNLlamaContext.h +8 -1
  93. package/ios/RNLlamaContext.mm +15 -11
  94. package/ios/rnllama.xcframework/Info.plist +74 -0
  95. package/jest/mock.js +3 -2
  96. package/lib/commonjs/NativeRNLlama.js.map +1 -1
  97. package/lib/commonjs/index.js +4 -2
  98. package/lib/commonjs/index.js.map +1 -1
  99. package/lib/module/NativeRNLlama.js.map +1 -1
  100. package/lib/module/index.js +4 -2
  101. package/lib/module/index.js.map +1 -1
  102. package/lib/typescript/NativeRNLlama.d.ts +5 -1
  103. package/lib/typescript/NativeRNLlama.d.ts.map +1 -1
  104. package/lib/typescript/index.d.ts.map +1 -1
  105. package/llama-rn.podspec +8 -2
  106. package/package.json +5 -2
  107. package/src/NativeRNLlama.ts +5 -1
  108. package/src/index.ts +9 -2
package/cpp/llama-model.h CHANGED
@@ -1,391 +1,370 @@
1
- #pragma once
2
-
3
- #include "llama.h"
4
- #include "llama-arch.h"
5
- #include "llama-hparams.h"
6
- #include "llama-vocab.h"
7
- #include "llama-mmap.h"
8
-
9
- #include "ggml-cpp.h"
10
-
11
- #include <vector>
12
-
13
- // available models
14
- // TODO: this enum does not follow the enum naming convention
15
- enum llm_type {
16
- MODEL_UNKNOWN,
17
- MODEL_14M,
18
- MODEL_17M,
19
- MODEL_22M,
20
- MODEL_33M,
21
- MODEL_60M,
22
- MODEL_70M,
23
- MODEL_80M,
24
- MODEL_109M,
25
- MODEL_137M,
26
- MODEL_160M,
27
- MODEL_220M,
28
- MODEL_250M,
29
- MODEL_270M,
30
- MODEL_335M,
31
- MODEL_410M,
32
- MODEL_450M,
33
- MODEL_770M,
34
- MODEL_780M,
35
- MODEL_0_5B,
36
- MODEL_1B,
37
- MODEL_1_3B,
38
- MODEL_1_4B,
39
- MODEL_1_5B,
40
- MODEL_1_6B,
41
- MODEL_2B,
42
- MODEL_2_8B,
43
- MODEL_3B,
44
- MODEL_4B,
45
- MODEL_6B,
46
- MODEL_6_9B,
47
- MODEL_7B,
48
- MODEL_8B,
49
- MODEL_9B,
50
- MODEL_11B,
51
- MODEL_12B,
52
- MODEL_13B,
53
- MODEL_14B,
54
- MODEL_15B,
55
- MODEL_16B,
56
- MODEL_20B,
57
- MODEL_30B,
58
- MODEL_32B,
59
- MODEL_34B,
60
- MODEL_35B,
61
- MODEL_40B,
62
- MODEL_65B,
63
- MODEL_70B,
64
- MODEL_236B,
65
- MODEL_314B,
66
- MODEL_671B,
67
- MODEL_SMALL,
68
- MODEL_MEDIUM,
69
- MODEL_LARGE,
70
- MODEL_XL,
71
- MODEL_A1_7B,
72
- MODEL_A2_7B,
73
- MODEL_8x7B,
74
- MODEL_8x22B,
75
- MODEL_16x12B,
76
- MODEL_10B_128x3_66B,
77
- MODEL_57B_A14B,
78
- MODEL_27B,
79
- };
80
-
81
- struct llama_layer_posnet {
82
- // resnet
83
- struct lm_ggml_tensor * norm1 = nullptr;
84
- struct lm_ggml_tensor * norm1_b = nullptr;
85
-
86
- struct lm_ggml_tensor * conv1 = nullptr;
87
- struct lm_ggml_tensor * conv1_b = nullptr;
88
-
89
- struct lm_ggml_tensor * norm2 = nullptr;
90
- struct lm_ggml_tensor * norm2_b = nullptr;
91
-
92
- struct lm_ggml_tensor * conv2 = nullptr;
93
- struct lm_ggml_tensor * conv2_b = nullptr;
94
-
95
- // attention
96
- struct lm_ggml_tensor * attn_norm = nullptr;
97
- struct lm_ggml_tensor * attn_norm_b = nullptr;
98
-
99
- struct lm_ggml_tensor * attn_q = nullptr;
100
- struct lm_ggml_tensor * attn_q_b = nullptr;
101
-
102
- struct lm_ggml_tensor * attn_k = nullptr;
103
- struct lm_ggml_tensor * attn_k_b = nullptr;
104
-
105
- struct lm_ggml_tensor * attn_v = nullptr;
106
- struct lm_ggml_tensor * attn_v_b = nullptr;
107
-
108
- struct lm_ggml_tensor * attn_o = nullptr;
109
- struct lm_ggml_tensor * attn_o_b = nullptr;
110
-
111
- // normalize
112
- struct lm_ggml_tensor * norm = nullptr;
113
- struct lm_ggml_tensor * norm_b = nullptr;
114
- };
115
-
116
- struct llama_layer_convnext {
117
- struct lm_ggml_tensor * dw = nullptr;
118
- struct lm_ggml_tensor * dw_b = nullptr;
119
-
120
- struct lm_ggml_tensor * norm = nullptr;
121
- struct lm_ggml_tensor * norm_b = nullptr;
122
-
123
- struct lm_ggml_tensor * pw1 = nullptr;
124
- struct lm_ggml_tensor * pw1_b = nullptr;
125
-
126
- struct lm_ggml_tensor * pw2 = nullptr;
127
- struct lm_ggml_tensor * pw2_b = nullptr;
128
-
129
- struct lm_ggml_tensor * gamma = nullptr;
130
- };
131
-
132
- struct llama_layer {
133
- // normalization
134
- struct lm_ggml_tensor * attn_norm = nullptr;
135
- struct lm_ggml_tensor * attn_norm_b = nullptr;
136
- struct lm_ggml_tensor * attn_norm_2 = nullptr;
137
- struct lm_ggml_tensor * attn_norm_2_b = nullptr;
138
- struct lm_ggml_tensor * attn_q_norm = nullptr;
139
- struct lm_ggml_tensor * attn_q_norm_b = nullptr;
140
- struct lm_ggml_tensor * attn_k_norm = nullptr;
141
- struct lm_ggml_tensor * attn_k_norm_b = nullptr;
142
- struct lm_ggml_tensor * attn_out_norm = nullptr;
143
- struct lm_ggml_tensor * attn_out_norm_b = nullptr;
144
- struct lm_ggml_tensor * attn_q_a_norm = nullptr;
145
- struct lm_ggml_tensor * attn_kv_a_norm = nullptr;
146
- struct lm_ggml_tensor * attn_sub_norm = nullptr;
147
- struct lm_ggml_tensor * attn_post_norm = nullptr;
148
- struct lm_ggml_tensor * ffn_sub_norm = nullptr;
149
- struct lm_ggml_tensor * attn_norm_cross = nullptr;
150
- struct lm_ggml_tensor * attn_norm_enc = nullptr;
151
-
152
- // attention
153
- struct lm_ggml_tensor * wq = nullptr;
154
- struct lm_ggml_tensor * wk = nullptr;
155
- struct lm_ggml_tensor * wv = nullptr;
156
- struct lm_ggml_tensor * wo = nullptr;
157
- struct lm_ggml_tensor * wqkv = nullptr;
158
- struct lm_ggml_tensor * wq_a = nullptr;
159
- struct lm_ggml_tensor * wq_b = nullptr;
160
- struct lm_ggml_tensor * wkv_a_mqa = nullptr;
161
- struct lm_ggml_tensor * wkv_b = nullptr;
162
- struct lm_ggml_tensor * wq_cross = nullptr;
163
- struct lm_ggml_tensor * wk_cross = nullptr;
164
- struct lm_ggml_tensor * wv_cross = nullptr;
165
- struct lm_ggml_tensor * wo_cross = nullptr;
166
- struct lm_ggml_tensor * wq_enc = nullptr;
167
- struct lm_ggml_tensor * wk_enc = nullptr;
168
- struct lm_ggml_tensor * wv_enc = nullptr;
169
- struct lm_ggml_tensor * wo_enc = nullptr;
170
-
171
- // attention bias
172
- struct lm_ggml_tensor * bq = nullptr;
173
- struct lm_ggml_tensor * bk = nullptr;
174
- struct lm_ggml_tensor * bv = nullptr;
175
- struct lm_ggml_tensor * bo = nullptr;
176
- struct lm_ggml_tensor * bqkv = nullptr;
177
-
178
- // relative position bias
179
- struct lm_ggml_tensor * attn_rel_b = nullptr;
180
- struct lm_ggml_tensor * attn_rel_b_enc = nullptr;
181
- struct lm_ggml_tensor * attn_rel_b_cross = nullptr;
182
-
183
- // normalization
184
- struct lm_ggml_tensor * ffn_norm = nullptr;
185
- struct lm_ggml_tensor * ffn_norm_b = nullptr;
186
- struct lm_ggml_tensor * ffn_post_norm = nullptr;
187
- struct lm_ggml_tensor * layer_out_norm = nullptr;
188
- struct lm_ggml_tensor * layer_out_norm_b = nullptr;
189
- struct lm_ggml_tensor * ffn_norm_exps = nullptr;
190
- struct lm_ggml_tensor * ffn_norm_enc = nullptr;
191
-
192
- // ff
193
- struct lm_ggml_tensor * ffn_gate = nullptr; // w1
194
- struct lm_ggml_tensor * ffn_down = nullptr; // w2
195
- struct lm_ggml_tensor * ffn_up = nullptr; // w3
196
- struct lm_ggml_tensor * ffn_gate_enc = nullptr;
197
- struct lm_ggml_tensor * ffn_down_enc = nullptr;
198
- struct lm_ggml_tensor * ffn_up_enc = nullptr;
199
-
200
- // ff MoE
201
- struct lm_ggml_tensor * ffn_gate_inp = nullptr;
202
- struct lm_ggml_tensor * ffn_gate_exps = nullptr;
203
- struct lm_ggml_tensor * ffn_down_exps = nullptr;
204
- struct lm_ggml_tensor * ffn_up_exps = nullptr;
205
-
206
- // ff shared expert (shexp)
207
- struct lm_ggml_tensor * ffn_gate_inp_shexp = nullptr;
208
- struct lm_ggml_tensor * ffn_gate_shexp = nullptr;
209
- struct lm_ggml_tensor * ffn_down_shexp = nullptr;
210
- struct lm_ggml_tensor * ffn_up_shexp = nullptr;
211
-
212
- // ff bias
213
- struct lm_ggml_tensor * ffn_gate_b = nullptr;
214
- struct lm_ggml_tensor * ffn_down_b = nullptr; // b2
215
- struct lm_ggml_tensor * ffn_up_b = nullptr; // b3
216
- struct lm_ggml_tensor * ffn_act = nullptr;
217
- struct lm_ggml_tensor * ffn_exp_probs_b = nullptr;
218
-
219
- // mamba proj
220
- struct lm_ggml_tensor * ssm_in = nullptr;
221
- struct lm_ggml_tensor * ssm_x = nullptr;
222
- struct lm_ggml_tensor * ssm_dt = nullptr;
223
- struct lm_ggml_tensor * ssm_out = nullptr;
224
-
225
- // mamba
226
- struct lm_ggml_tensor * ssm_conv1d = nullptr;
227
- struct lm_ggml_tensor * ssm_a = nullptr;
228
- struct lm_ggml_tensor * ssm_d = nullptr;
229
-
230
- // mamba bias
231
- struct lm_ggml_tensor * ssm_conv1d_b = nullptr;
232
- struct lm_ggml_tensor * ssm_dt_b = nullptr;
233
-
234
- // rwkv
235
- struct lm_ggml_tensor * time_mix_w1 = nullptr;
236
- struct lm_ggml_tensor * time_mix_w2 = nullptr;
237
- struct lm_ggml_tensor * time_mix_lerp_x = nullptr;
238
- struct lm_ggml_tensor * time_mix_lerp_w = nullptr;
239
- struct lm_ggml_tensor * time_mix_lerp_k = nullptr;
240
- struct lm_ggml_tensor * time_mix_lerp_v = nullptr;
241
- struct lm_ggml_tensor * time_mix_lerp_r = nullptr;
242
- struct lm_ggml_tensor * time_mix_lerp_g = nullptr;
243
-
244
- struct lm_ggml_tensor * time_mix_first = nullptr;
245
- struct lm_ggml_tensor * time_mix_decay = nullptr;
246
- struct lm_ggml_tensor * time_mix_decay_w1 = nullptr;
247
- struct lm_ggml_tensor * time_mix_decay_w2 = nullptr;
248
- struct lm_ggml_tensor * time_mix_key = nullptr;
249
- struct lm_ggml_tensor * time_mix_value = nullptr;
250
- struct lm_ggml_tensor * time_mix_receptance = nullptr;
251
- struct lm_ggml_tensor * time_mix_gate = nullptr;
252
-
253
- struct lm_ggml_tensor * time_mix_ln = nullptr;
254
- struct lm_ggml_tensor * time_mix_ln_b = nullptr;
255
- struct lm_ggml_tensor * time_mix_output = nullptr;
256
-
257
- struct lm_ggml_tensor * channel_mix_lerp_k = nullptr;
258
- struct lm_ggml_tensor * channel_mix_lerp_r = nullptr;
259
-
260
- struct lm_ggml_tensor * channel_mix_key = nullptr;
261
- struct lm_ggml_tensor * channel_mix_receptance = nullptr;
262
- struct lm_ggml_tensor * channel_mix_value = nullptr;
263
-
264
- // long rope factors
265
- struct lm_ggml_tensor * rope_long = nullptr;
266
- struct lm_ggml_tensor * rope_short = nullptr;
267
- struct lm_ggml_tensor * rope_freqs = nullptr;
268
-
269
- // bitnet scale
270
- struct lm_ggml_tensor * wq_scale = nullptr;
271
- struct lm_ggml_tensor * wk_scale = nullptr;
272
- struct lm_ggml_tensor * wv_scale = nullptr;
273
- struct lm_ggml_tensor * wo_scale = nullptr;
274
- struct lm_ggml_tensor * ffn_gate_scale = nullptr;
275
- struct lm_ggml_tensor * ffn_up_scale = nullptr;
276
- struct lm_ggml_tensor * ffn_down_scale = nullptr;
277
-
278
- struct llama_layer_posnet posnet;
279
-
280
- struct llama_layer_convnext convnext;
281
- };
282
-
283
- struct llama_model {
284
- llm_type type = MODEL_UNKNOWN;
285
- llm_arch arch = LLM_ARCH_UNKNOWN;
286
-
287
- llama_ftype ftype = LLAMA_FTYPE_ALL_F32;
288
-
289
- std::string name = "n/a";
290
-
291
- llama_hparams hparams = {};
292
- llama_vocab vocab;
293
-
294
- struct lm_ggml_tensor * tok_embd = nullptr;
295
- struct lm_ggml_tensor * type_embd = nullptr;
296
- struct lm_ggml_tensor * pos_embd = nullptr;
297
- struct lm_ggml_tensor * tok_norm = nullptr;
298
- struct lm_ggml_tensor * tok_norm_b = nullptr;
299
-
300
- struct lm_ggml_tensor * output_norm = nullptr;
301
- struct lm_ggml_tensor * output_norm_b = nullptr;
302
- struct lm_ggml_tensor * output = nullptr;
303
- struct lm_ggml_tensor * output_b = nullptr;
304
- struct lm_ggml_tensor * output_norm_enc = nullptr;
305
-
306
- // classifier
307
- struct lm_ggml_tensor * cls = nullptr;
308
- struct lm_ggml_tensor * cls_b = nullptr;
309
- struct lm_ggml_tensor * cls_out = nullptr;
310
- struct lm_ggml_tensor * cls_out_b = nullptr;
311
-
312
- struct lm_ggml_tensor * conv1d = nullptr;
313
- struct lm_ggml_tensor * conv1d_b = nullptr;
314
-
315
- std::vector<llama_layer> layers;
316
-
317
- // gguf metadata
318
- std::unordered_map<std::string, std::string> lm_gguf_kv;
319
-
320
- llama_split_mode split_mode;
321
- int main_gpu;
322
- int n_gpu_layers;
323
-
324
- std::vector<std::string> rpc_servers;
325
-
326
- // list of devices used in this model
327
- std::vector<lm_ggml_backend_dev_t> devices;
328
-
329
-
330
- // lists of buffer types used for each layer
331
- using buft_list_t = std::vector<std::pair<lm_ggml_backend_dev_t, lm_ggml_backend_buffer_type_t>>;
332
- buft_list_t cpu_buft_list;
333
- std::map<lm_ggml_backend_dev_t, buft_list_t> gpu_buft_list;
334
-
335
- struct layer_dev {
336
- lm_ggml_backend_dev_t dev;
337
- buft_list_t * buft_list;
338
- };
339
-
340
- layer_dev dev_input = {};
341
- layer_dev dev_output = {};
342
- std::vector<layer_dev> dev_layer;
343
-
344
- // contexts where the model tensors metadata is stored
345
- std::vector<lm_ggml_context_ptr> ctxs;
346
-
347
- // the model memory buffers for the tensor data
348
- std::vector<lm_ggml_backend_buffer_ptr> bufs;
349
-
350
- // model memory mapped files
351
- llama_mmaps mappings;
352
-
353
- // objects representing data potentially being locked in memory
354
- llama_mlocks mlock_bufs;
355
- llama_mlocks mlock_mmaps;
356
-
357
- // for quantize-stats only
358
- std::vector<std::pair<std::string, struct lm_ggml_tensor *>> tensors_by_name;
359
-
360
- int64_t t_load_us = 0;
361
- int64_t t_start_us = 0;
362
-
363
- // total number of parameters in the model
364
- uint64_t n_elements = 0;
365
-
366
- // total size of all the tensors in the model in bytes
367
- size_t n_bytes = 0;
368
- };
369
-
370
- const char * llm_type_name(llm_type type);
371
-
372
- std::string llama_model_arch_name (const llama_model & model);
373
- std::string llama_model_type_name (const llama_model & model);
374
- std::string llama_model_ftype_name(const llama_model & model);
375
-
376
- // used by llama_adapter_cvec
377
- lm_ggml_backend_buffer_type_t llama_model_select_buft(const llama_model & model, int il);
378
-
379
- // used by llama_adapter_lora
380
- struct lm_ggml_tensor * llama_model_get_tensor(const struct llama_model & model, const char * name);
381
-
382
- size_t llama_model_max_nodes(const llama_model & model);
383
-
384
- struct llama_model_loader;
385
-
386
- // TODO: become llama_model methods
387
- void llm_load_stats (llama_model_loader & ml, llama_model & model);
388
- void llm_load_arch (llama_model_loader & ml, llama_model & model);
389
- void llm_load_hparams (llama_model_loader & ml, llama_model & model);
390
- void llm_load_vocab (llama_model_loader & ml, llama_model & model);
391
- void llm_load_print_meta(llama_model_loader & ml, llama_model & model);
1
+ #pragma once
2
+
3
+ #include "llama.h"
4
+ #include "llama-arch.h"
5
+ #include "llama-hparams.h"
6
+ #include "llama-vocab.h"
7
+
8
+ #include <memory>
9
+ #include <string>
10
+ #include <unordered_map>
11
+ #include <vector>
12
+
13
+ struct llama_model_loader;
14
+
15
+ // available models
16
+ enum llm_type {
17
+ LLM_TYPE_UNKNOWN,
18
+ LLM_TYPE_14M,
19
+ LLM_TYPE_17M,
20
+ LLM_TYPE_22M,
21
+ LLM_TYPE_33M,
22
+ LLM_TYPE_60M,
23
+ LLM_TYPE_70M,
24
+ LLM_TYPE_80M,
25
+ LLM_TYPE_109M,
26
+ LLM_TYPE_137M,
27
+ LLM_TYPE_160M,
28
+ LLM_TYPE_220M,
29
+ LLM_TYPE_250M,
30
+ LLM_TYPE_270M,
31
+ LLM_TYPE_335M,
32
+ LLM_TYPE_410M,
33
+ LLM_TYPE_450M,
34
+ LLM_TYPE_770M,
35
+ LLM_TYPE_780M,
36
+ LLM_TYPE_0_5B,
37
+ LLM_TYPE_1B,
38
+ LLM_TYPE_1_3B,
39
+ LLM_TYPE_1_4B,
40
+ LLM_TYPE_1_5B,
41
+ LLM_TYPE_1_6B,
42
+ LLM_TYPE_2B,
43
+ LLM_TYPE_2_8B,
44
+ LLM_TYPE_3B,
45
+ LLM_TYPE_4B,
46
+ LLM_TYPE_6B,
47
+ LLM_TYPE_6_9B,
48
+ LLM_TYPE_7B,
49
+ LLM_TYPE_8B,
50
+ LLM_TYPE_9B,
51
+ LLM_TYPE_11B,
52
+ LLM_TYPE_12B,
53
+ LLM_TYPE_13B,
54
+ LLM_TYPE_14B,
55
+ LLM_TYPE_15B,
56
+ LLM_TYPE_16B,
57
+ LLM_TYPE_20B,
58
+ LLM_TYPE_30B,
59
+ LLM_TYPE_32B,
60
+ LLM_TYPE_34B,
61
+ LLM_TYPE_35B,
62
+ LLM_TYPE_40B,
63
+ LLM_TYPE_65B,
64
+ LLM_TYPE_70B,
65
+ LLM_TYPE_236B,
66
+ LLM_TYPE_314B,
67
+ LLM_TYPE_671B,
68
+ LLM_TYPE_SMALL,
69
+ LLM_TYPE_MEDIUM,
70
+ LLM_TYPE_LARGE,
71
+ LLM_TYPE_XL,
72
+ LLM_TYPE_A1_7B,
73
+ LLM_TYPE_A2_7B,
74
+ LLM_TYPE_8x7B,
75
+ LLM_TYPE_8x22B,
76
+ LLM_TYPE_16x12B,
77
+ LLM_TYPE_16x3_8B,
78
+ LLM_TYPE_10B_128x3_66B,
79
+ LLM_TYPE_57B_A14B,
80
+ LLM_TYPE_27B,
81
+ };
82
+
83
+ struct llama_layer_posnet {
84
+ // resnet
85
+ struct lm_ggml_tensor * norm1 = nullptr;
86
+ struct lm_ggml_tensor * norm1_b = nullptr;
87
+
88
+ struct lm_ggml_tensor * conv1 = nullptr;
89
+ struct lm_ggml_tensor * conv1_b = nullptr;
90
+
91
+ struct lm_ggml_tensor * norm2 = nullptr;
92
+ struct lm_ggml_tensor * norm2_b = nullptr;
93
+
94
+ struct lm_ggml_tensor * conv2 = nullptr;
95
+ struct lm_ggml_tensor * conv2_b = nullptr;
96
+
97
+ // attention
98
+ struct lm_ggml_tensor * attn_norm = nullptr;
99
+ struct lm_ggml_tensor * attn_norm_b = nullptr;
100
+
101
+ struct lm_ggml_tensor * attn_q = nullptr;
102
+ struct lm_ggml_tensor * attn_q_b = nullptr;
103
+
104
+ struct lm_ggml_tensor * attn_k = nullptr;
105
+ struct lm_ggml_tensor * attn_k_b = nullptr;
106
+
107
+ struct lm_ggml_tensor * attn_v = nullptr;
108
+ struct lm_ggml_tensor * attn_v_b = nullptr;
109
+
110
+ struct lm_ggml_tensor * attn_o = nullptr;
111
+ struct lm_ggml_tensor * attn_o_b = nullptr;
112
+
113
+ // normalize
114
+ struct lm_ggml_tensor * norm = nullptr;
115
+ struct lm_ggml_tensor * norm_b = nullptr;
116
+ };
117
+
118
+ struct llama_layer_convnext {
119
+ struct lm_ggml_tensor * dw = nullptr;
120
+ struct lm_ggml_tensor * dw_b = nullptr;
121
+
122
+ struct lm_ggml_tensor * norm = nullptr;
123
+ struct lm_ggml_tensor * norm_b = nullptr;
124
+
125
+ struct lm_ggml_tensor * pw1 = nullptr;
126
+ struct lm_ggml_tensor * pw1_b = nullptr;
127
+
128
+ struct lm_ggml_tensor * pw2 = nullptr;
129
+ struct lm_ggml_tensor * pw2_b = nullptr;
130
+
131
+ struct lm_ggml_tensor * gamma = nullptr;
132
+ };
133
+
134
+ struct llama_layer {
135
+ // normalization
136
+ struct lm_ggml_tensor * attn_norm = nullptr;
137
+ struct lm_ggml_tensor * attn_norm_b = nullptr;
138
+ struct lm_ggml_tensor * attn_norm_2 = nullptr;
139
+ struct lm_ggml_tensor * attn_norm_2_b = nullptr;
140
+ struct lm_ggml_tensor * attn_q_norm = nullptr;
141
+ struct lm_ggml_tensor * attn_q_norm_b = nullptr;
142
+ struct lm_ggml_tensor * attn_k_norm = nullptr;
143
+ struct lm_ggml_tensor * attn_k_norm_b = nullptr;
144
+ struct lm_ggml_tensor * attn_out_norm = nullptr;
145
+ struct lm_ggml_tensor * attn_out_norm_b = nullptr;
146
+ struct lm_ggml_tensor * attn_q_a_norm = nullptr;
147
+ struct lm_ggml_tensor * attn_kv_a_norm = nullptr;
148
+ struct lm_ggml_tensor * attn_sub_norm = nullptr;
149
+ struct lm_ggml_tensor * attn_post_norm = nullptr;
150
+ struct lm_ggml_tensor * ffn_sub_norm = nullptr;
151
+ struct lm_ggml_tensor * attn_norm_cross = nullptr;
152
+ struct lm_ggml_tensor * attn_norm_enc = nullptr;
153
+
154
+ // attention
155
+ struct lm_ggml_tensor * wq = nullptr;
156
+ struct lm_ggml_tensor * wk = nullptr;
157
+ struct lm_ggml_tensor * wv = nullptr;
158
+ struct lm_ggml_tensor * wo = nullptr;
159
+ struct lm_ggml_tensor * wqkv = nullptr;
160
+ struct lm_ggml_tensor * wq_a = nullptr;
161
+ struct lm_ggml_tensor * wq_b = nullptr;
162
+ struct lm_ggml_tensor * wkv_a_mqa = nullptr;
163
+ struct lm_ggml_tensor * wkv_b = nullptr;
164
+ struct lm_ggml_tensor * wq_cross = nullptr;
165
+ struct lm_ggml_tensor * wk_cross = nullptr;
166
+ struct lm_ggml_tensor * wv_cross = nullptr;
167
+ struct lm_ggml_tensor * wo_cross = nullptr;
168
+ struct lm_ggml_tensor * wq_enc = nullptr;
169
+ struct lm_ggml_tensor * wk_enc = nullptr;
170
+ struct lm_ggml_tensor * wv_enc = nullptr;
171
+ struct lm_ggml_tensor * wo_enc = nullptr;
172
+
173
+ // attention bias
174
+ struct lm_ggml_tensor * bq = nullptr;
175
+ struct lm_ggml_tensor * bk = nullptr;
176
+ struct lm_ggml_tensor * bv = nullptr;
177
+ struct lm_ggml_tensor * bo = nullptr;
178
+ struct lm_ggml_tensor * bqkv = nullptr;
179
+
180
+ // relative position bias
181
+ struct lm_ggml_tensor * attn_rel_b = nullptr;
182
+ struct lm_ggml_tensor * attn_rel_b_enc = nullptr;
183
+ struct lm_ggml_tensor * attn_rel_b_cross = nullptr;
184
+
185
+ // normalization
186
+ struct lm_ggml_tensor * ffn_norm = nullptr;
187
+ struct lm_ggml_tensor * ffn_norm_b = nullptr;
188
+ struct lm_ggml_tensor * ffn_post_norm = nullptr;
189
+ struct lm_ggml_tensor * layer_out_norm = nullptr;
190
+ struct lm_ggml_tensor * layer_out_norm_b = nullptr;
191
+ struct lm_ggml_tensor * ffn_norm_exps = nullptr;
192
+ struct lm_ggml_tensor * ffn_norm_enc = nullptr;
193
+
194
+ // ff
195
+ struct lm_ggml_tensor * ffn_gate = nullptr; // w1
196
+ struct lm_ggml_tensor * ffn_down = nullptr; // w2
197
+ struct lm_ggml_tensor * ffn_up = nullptr; // w3
198
+ struct lm_ggml_tensor * ffn_gate_enc = nullptr;
199
+ struct lm_ggml_tensor * ffn_down_enc = nullptr;
200
+ struct lm_ggml_tensor * ffn_up_enc = nullptr;
201
+
202
+ // ff MoE
203
+ struct lm_ggml_tensor * ffn_gate_inp = nullptr;
204
+ struct lm_ggml_tensor * ffn_gate_exps = nullptr;
205
+ struct lm_ggml_tensor * ffn_down_exps = nullptr;
206
+ struct lm_ggml_tensor * ffn_up_exps = nullptr;
207
+
208
+ // ff shared expert (shexp)
209
+ struct lm_ggml_tensor * ffn_gate_inp_shexp = nullptr;
210
+ struct lm_ggml_tensor * ffn_gate_shexp = nullptr;
211
+ struct lm_ggml_tensor * ffn_down_shexp = nullptr;
212
+ struct lm_ggml_tensor * ffn_up_shexp = nullptr;
213
+
214
+ // ff bias
215
+ struct lm_ggml_tensor * ffn_gate_b = nullptr;
216
+ struct lm_ggml_tensor * ffn_down_b = nullptr; // b2
217
+ struct lm_ggml_tensor * ffn_up_b = nullptr; // b3
218
+ struct lm_ggml_tensor * ffn_act = nullptr;
219
+ struct lm_ggml_tensor * ffn_exp_probs_b = nullptr;
220
+
221
+ // mamba proj
222
+ struct lm_ggml_tensor * ssm_in = nullptr;
223
+ struct lm_ggml_tensor * ssm_x = nullptr;
224
+ struct lm_ggml_tensor * ssm_dt = nullptr;
225
+ struct lm_ggml_tensor * ssm_out = nullptr;
226
+
227
+ // mamba
228
+ struct lm_ggml_tensor * ssm_conv1d = nullptr;
229
+ struct lm_ggml_tensor * ssm_a = nullptr;
230
+ struct lm_ggml_tensor * ssm_d = nullptr;
231
+
232
+ // mamba bias
233
+ struct lm_ggml_tensor * ssm_conv1d_b = nullptr;
234
+ struct lm_ggml_tensor * ssm_dt_b = nullptr;
235
+
236
+ // rwkv
237
+ struct lm_ggml_tensor * time_mix_w1 = nullptr;
238
+ struct lm_ggml_tensor * time_mix_w2 = nullptr;
239
+ struct lm_ggml_tensor * time_mix_lerp_x = nullptr;
240
+ struct lm_ggml_tensor * time_mix_lerp_w = nullptr;
241
+ struct lm_ggml_tensor * time_mix_lerp_k = nullptr;
242
+ struct lm_ggml_tensor * time_mix_lerp_v = nullptr;
243
+ struct lm_ggml_tensor * time_mix_lerp_r = nullptr;
244
+ struct lm_ggml_tensor * time_mix_lerp_g = nullptr;
245
+ struct lm_ggml_tensor * time_mix_lerp_fused = nullptr;
246
+
247
+ struct lm_ggml_tensor * time_mix_first = nullptr;
248
+ struct lm_ggml_tensor * time_mix_decay = nullptr;
249
+ struct lm_ggml_tensor * time_mix_decay_w1 = nullptr;
250
+ struct lm_ggml_tensor * time_mix_decay_w2 = nullptr;
251
+ struct lm_ggml_tensor * time_mix_key = nullptr;
252
+ struct lm_ggml_tensor * time_mix_key_b = nullptr;
253
+ struct lm_ggml_tensor * time_mix_value = nullptr;
254
+ struct lm_ggml_tensor * time_mix_value_b = nullptr;
255
+ struct lm_ggml_tensor * time_mix_receptance = nullptr;
256
+ struct lm_ggml_tensor * time_mix_receptance_b = nullptr;
257
+ struct lm_ggml_tensor * time_mix_gate = nullptr;
258
+
259
+ struct lm_ggml_tensor * time_mix_ln = nullptr;
260
+ struct lm_ggml_tensor * time_mix_ln_b = nullptr;
261
+ struct lm_ggml_tensor * time_mix_output = nullptr;
262
+
263
+ struct lm_ggml_tensor * channel_mix_lerp_k = nullptr;
264
+ struct lm_ggml_tensor * channel_mix_lerp_r = nullptr;
265
+
266
+ struct lm_ggml_tensor * channel_mix_key = nullptr;
267
+ struct lm_ggml_tensor * channel_mix_receptance = nullptr;
268
+ struct lm_ggml_tensor * channel_mix_value = nullptr;
269
+
270
+ // long rope factors
271
+ struct lm_ggml_tensor * rope_long = nullptr;
272
+ struct lm_ggml_tensor * rope_short = nullptr;
273
+ struct lm_ggml_tensor * rope_freqs = nullptr;
274
+
275
+ // bitnet scale
276
+ struct lm_ggml_tensor * wq_scale = nullptr;
277
+ struct lm_ggml_tensor * wk_scale = nullptr;
278
+ struct lm_ggml_tensor * wv_scale = nullptr;
279
+ struct lm_ggml_tensor * wo_scale = nullptr;
280
+ struct lm_ggml_tensor * ffn_gate_scale = nullptr;
281
+ struct lm_ggml_tensor * ffn_up_scale = nullptr;
282
+ struct lm_ggml_tensor * ffn_down_scale = nullptr;
283
+
284
+ struct llama_layer_posnet posnet;
285
+
286
+ struct llama_layer_convnext convnext;
287
+ };
288
+
289
+ struct llama_model {
290
+ llm_type type = LLM_TYPE_UNKNOWN;
291
+ llm_arch arch = LLM_ARCH_UNKNOWN;
292
+
293
+ std::string name = "n/a";
294
+
295
+ llama_hparams hparams = {};
296
+ llama_vocab vocab;
297
+
298
+ struct lm_ggml_tensor * tok_embd = nullptr;
299
+ struct lm_ggml_tensor * type_embd = nullptr;
300
+ struct lm_ggml_tensor * pos_embd = nullptr;
301
+ struct lm_ggml_tensor * tok_norm = nullptr;
302
+ struct lm_ggml_tensor * tok_norm_b = nullptr;
303
+
304
+ struct lm_ggml_tensor * output_norm = nullptr;
305
+ struct lm_ggml_tensor * output_norm_b = nullptr;
306
+ struct lm_ggml_tensor * output = nullptr;
307
+ struct lm_ggml_tensor * output_b = nullptr;
308
+ struct lm_ggml_tensor * output_norm_enc = nullptr;
309
+
310
+ // classifier
311
+ struct lm_ggml_tensor * cls = nullptr;
312
+ struct lm_ggml_tensor * cls_b = nullptr;
313
+ struct lm_ggml_tensor * cls_out = nullptr;
314
+ struct lm_ggml_tensor * cls_out_b = nullptr;
315
+
316
+ struct lm_ggml_tensor * conv1d = nullptr;
317
+ struct lm_ggml_tensor * conv1d_b = nullptr;
318
+
319
+ std::vector<llama_layer> layers;
320
+
321
+ llama_model_params params;
322
+
323
+ // gguf metadata
324
+ std::unordered_map<std::string, std::string> lm_gguf_kv;
325
+
326
+ // list of devices used in this model
327
+ std::vector<lm_ggml_backend_dev_t> devices;
328
+
329
+ // for quantize-stats only
330
+ std::vector<std::pair<std::string, struct lm_ggml_tensor *>> tensors_by_name;
331
+
332
+ int64_t t_load_us = 0;
333
+ int64_t t_start_us = 0;
334
+
335
+ explicit llama_model(const struct llama_model_params & params);
336
+ ~llama_model();
337
+
338
+ void load_stats (llama_model_loader & ml);
339
+ void load_arch (llama_model_loader & ml);
340
+ void load_hparams(llama_model_loader & ml);
341
+ void load_vocab (llama_model_loader & ml);
342
+ bool load_tensors(llama_model_loader & ml); // returns false if cancelled by progress_callback
343
+
344
+ std::string arch_name() const;
345
+ std::string type_name() const;
346
+
347
+ std::string desc() const;
348
+
349
+ size_t size() const;
350
+ size_t max_nodes() const;
351
+ size_t n_devices() const;
352
+
353
+ // total number of parameters in the model
354
+ uint64_t n_elements() const;
355
+
356
+ void print_info() const;
357
+
358
+ lm_ggml_backend_dev_t dev_layer(int il) const;
359
+ lm_ggml_backend_dev_t dev_output() const;
360
+
361
+ lm_ggml_backend_buffer_type_t select_buft(int il) const;
362
+
363
+ const struct lm_ggml_tensor * get_tensor(const char * name) const;
364
+
365
+ private:
366
+ struct impl;
367
+ std::unique_ptr<impl> pimpl;
368
+ };
369
+
370
+ const char * llm_type_name(llm_type type);