Brunobkr/llama.cpp_AlgMor24_github
ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.
03k
1#include "llama-model-saver.h"2 3#include "ggml.h"4#include "gguf.h"5 6#include "llama-arch.h"7#include "llama.h"8#include "llama-hparams.h"9#include "llama-model.h"10#include "llama-vocab.h"11 12#include <cstdint>13#include <string>14 15bool llama_model_saver_supports_arch(llm_arch arch) {16 switch (arch) {17 case LLM_ARCH_PLAMO3:18 case LLM_ARCH_GEMMA3:19 case LLM_ARCH_GEMMA3N:20 case LLM_ARCH_COHERE2:21 case LLM_ARCH_COHERE2MOE:22 case LLM_ARCH_OLMO2:23 case LLM_ARCH_BITNET:24 case LLM_ARCH_T5:25 case LLM_ARCH_EXAONE_MOE:26 case LLM_ARCH_AFMOE:27 case LLM_ARCH_APERTUS:28 case LLM_ARCH_MIMO2:29 case LLM_ARCH_STEP35:30 case LLM_ARCH_MUSE_GLIMMER:31 case LLM_ARCH_MELLUM:32 case LLM_ARCH_LAGUNA:33 return false;34 default:35 return true;36 }37}38 39llama_model_saver::llama_model_saver(const struct llama_model * model) :40 gguf_ctx(gguf_init_empty()), gguf_ctx_owned(true), model(model), llm_kv(model->arch) {41 GGML_ASSERT(llama_model_saver_supports_arch(model->arch));42}43 44llama_model_saver::llama_model_saver(enum llm_arch arch, struct gguf_context * gguf_ctx) :45 gguf_ctx(gguf_ctx == nullptr ? gguf_init_empty() : gguf_ctx), gguf_ctx_owned(gguf_ctx == nullptr), model(nullptr), llm_kv(arch) {}46 47llama_model_saver::~llama_model_saver() {48 if (gguf_ctx_owned) {49 gguf_free(gguf_ctx);50 }51}52 53void llama_model_saver::add_kv(const enum llm_kv key, const uint32_t value) {54 gguf_set_val_u32(gguf_ctx, llm_kv(key).c_str(), value);55}56 57void llama_model_saver::add_kv(const enum llm_kv key, const int32_t value) {58 gguf_set_val_i32(gguf_ctx, llm_kv(key).c_str(), value);59}60 61void llama_model_saver::add_kv(const enum llm_kv key, const float value) {62 gguf_set_val_f32(gguf_ctx, llm_kv(key).c_str(), value);63}64 65void llama_model_saver::add_kv(const enum llm_kv key, const bool value) {66 gguf_set_val_bool(gguf_ctx, llm_kv(key).c_str(), value);67}68 69void llama_model_saver::add_kv(const enum llm_kv key, const char * value) {70 gguf_set_val_str(gguf_ctx, llm_kv(key).c_str(), value);71}72 73[[noreturn]]74void llama_model_saver::add_kv(const enum llm_kv key, const char value) {75 GGML_UNUSED(key);76 GGML_UNUSED(value);77 GGML_ABORT("fatal error"); // this should never be called, only needed to make the template below compile78}79 80template <typename Container>81void llama_model_saver::add_kv(const enum llm_kv key, const Container & value, const bool per_layer) {82 GGML_ASSERT(model != nullptr || !per_layer);83 const size_t n_values = per_layer ? size_t(model->hparams.n_layer()) : value.size();84 GGML_ASSERT(n_values <= value.size());85 86 if (n_values == 0) {87 return;88 }89 90 if (per_layer) {91 bool all_values_the_same = true;92 for (size_t i = 1; i < n_values; ++i) {93 if (value[i] != value[0]) {94 all_values_the_same = false;95 break;96 }97 }98 if (all_values_the_same) {99 add_kv(key, value[0]);100 return;101 }102 }103 104 if (std::is_same<typename Container::value_type, uint8_t>::value) {105 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_UINT8, value.data(), n_values);106 } else if (std::is_same<typename Container::value_type, int8_t>::value) {107 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_INT8, value.data(), n_values);108 } else if (std::is_same<typename Container::value_type, uint32_t>::value) {109 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_UINT32, value.data(), n_values);110 } else if (std::is_same<typename Container::value_type, bool>::value) {111 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_BOOL, value.data(), n_values);112 } else if (std::is_same<typename Container::value_type, int32_t>::value) {113 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_INT32, value.data(), n_values);114 } else if (std::is_same<typename Container::value_type, float>::value) {115 gguf_set_arr_data(gguf_ctx, llm_kv(key).c_str(), GGUF_TYPE_FLOAT32, value.data(), n_values);116 } else if (std::is_same<Container, std::string>::value) {117 gguf_set_val_str(gguf_ctx, llm_kv(key).c_str(), reinterpret_cast<const char *>(value.data()));118 } else {119 GGML_ABORT("fatal error");120 }121}122// instantiate for external usage:123template void llama_model_saver::add_kv<std::vector<uint32_t>>(const enum llm_kv, const std::vector<uint32_t> &, const bool);124 125void llama_model_saver::add_kv(const enum llm_kv key, const std::vector<std::string> & value) {126 std::vector<const char *> tmp(value.size());127 for (size_t i = 0; i < value.size(); ++i) {128 tmp[i] = value[i].c_str();129 }130 gguf_set_arr_str(gguf_ctx, llm_kv(key).c_str(), tmp.data(), tmp.size());131}132 133void llama_model_saver::add_tensor(const struct ggml_tensor * tensor) {134 if (!tensor) {135 return;136 }137 if (gguf_find_tensor(gguf_ctx, tensor->name) >= 0) {138 const std::string tensor_name = tensor->name;139 GGML_ASSERT(140 tensor_name == "rope_freqs.weight" || tensor_name == "rope_factors_long.weight" ||141 tensor_name == "rope_factors_short.weight"); // FIXME142 return;143 }144 gguf_add_tensor(gguf_ctx, tensor);145}146 147void llama_model_saver::add_kv_from_model() {148 const llama_hparams & hparams = model->hparams;149 const llama_vocab & vocab = model->vocab;150 151 const int32_t n_vocab = vocab.n_tokens();152 std::vector<std::string> tokens(n_vocab);153 std::vector<float> scores(n_vocab);154 std::vector<int32_t> token_types(n_vocab);155 156 if (vocab.get_type() != LLAMA_VOCAB_TYPE_NONE) {157 for (int32_t id = 0; id < n_vocab; ++id) {158 const llama_vocab::token_data & token_data = vocab.get_token_data(id);159 160 tokens[id] = token_data.text;161 scores[id] = token_data.score;162 163 // FIXME should this be treated as flags?164 switch(token_data.attr) {165 case LLAMA_TOKEN_ATTR_UNKNOWN: token_types[id] = LLAMA_TOKEN_TYPE_UNKNOWN; break;166 case LLAMA_TOKEN_ATTR_UNUSED: token_types[id] = LLAMA_TOKEN_TYPE_UNUSED; break;167 case LLAMA_TOKEN_ATTR_NORMAL: token_types[id] = LLAMA_TOKEN_TYPE_NORMAL; break;168 case LLAMA_TOKEN_ATTR_CONTROL: token_types[id] = LLAMA_TOKEN_TYPE_CONTROL; break;169 case LLAMA_TOKEN_ATTR_USER_DEFINED: token_types[id] = LLAMA_TOKEN_TYPE_USER_DEFINED; break;170 case LLAMA_TOKEN_ATTR_BYTE: token_types[id] = LLAMA_TOKEN_TYPE_BYTE; break;171 // case LLAMA_TOKEN_ATTR_NORMALIZED: ???172 // case LLAMA_TOKEN_ATTR_LSTRIP: ???173 // case LLAMA_TOKEN_ATTR_RSTRIP: ???174 case LLAMA_TOKEN_ATTR_UNDEFINED:175 default: token_types[id] = LLAMA_TOKEN_TYPE_UNDEFINED; break;176 }177 }178 }179 180 // add_kv(LLM_KV_GENERAL_TYPE, ???);181 add_kv(LLM_KV_GENERAL_ARCHITECTURE, model->arch_name());182 // add_kv(LLM_KV_GENERAL_QUANTIZATION_VERSION, ???);183 // add_kv(LLM_KV_GENERAL_ALIGNMENT, ???);184 // add_kv(LLM_KV_GENERAL_FILE_TYPE, ???);185 // add_kv(LLM_KV_GENERAL_SAMPLING_SEQUENCE, ???);186 // add_kv(LLM_KV_GENERAL_SAMPLING_TOP_K, ???);187 // add_kv(LLM_KV_GENERAL_SAMPLING_TOP_P, ???);188 // add_kv(LLM_KV_GENERAL_SAMPLING_MIN_P, ???);189 // add_kv(LLM_KV_GENERAL_SAMPLING_XTC_PROBABILITY, ???);190 // add_kv(LLM_KV_GENERAL_SAMPLING_XTC_THRESHOLD, ???);191 // add_kv(LLM_KV_GENERAL_SAMPLING_TEMP, ???);192 // add_kv(LLM_KV_GENERAL_SAMPLING_PENALTY_LAST_N, ???);193 // add_kv(LLM_KV_GENERAL_SAMPLING_PENALTY_REPEAT, ???);194 // add_kv(LLM_KV_GENERAL_SAMPLING_MIROSTAT, ???);195 // add_kv(LLM_KV_GENERAL_SAMPLING_MIROSTAT_TAU, ???);196 // add_kv(LLM_KV_GENERAL_SAMPLING_MIROSTAT_ETA, ???);197 add_kv(LLM_KV_GENERAL_NAME, model->name);198 // add_kv(LLM_KV_GENERAL_AUTHOR, ???);199 // add_kv(LLM_KV_GENERAL_VERSION, ???);200 // add_kv(LLM_KV_GENERAL_URL, ???);201 // add_kv(LLM_KV_GENERAL_DESCRIPTION, ???);202 // add_kv(LLM_KV_GENERAL_LICENSE, ???);203 // add_kv(LLM_KV_GENERAL_SOURCE_URL, ???);204 // add_kv(LLM_KV_GENERAL_SOURCE_HF_REPO, ???);205 206 add_kv(LLM_KV_VOCAB_SIZE, vocab.n_tokens());207 add_kv(LLM_KV_CONTEXT_LENGTH, hparams.n_ctx_train);208 add_kv(LLM_KV_EMBEDDING_LENGTH, hparams.n_embd);209 if (hparams.n_embd_out_impl > 0) {210 add_kv(LLM_KV_EMBEDDING_LENGTH_OUT, hparams.n_embd_out_impl);211 }212 add_kv(LLM_KV_BLOCK_COUNT, hparams.n_layer_all);213 add_kv(LLM_KV_LEADING_DENSE_BLOCK_COUNT, hparams.n_layer_dense_lead);214 add_kv(LLM_KV_FEED_FORWARD_LENGTH, hparams.n_ff_arr, true);215 add_kv(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp);216 add_kv(LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH, hparams.n_ff_shexp);217 add_kv(LLM_KV_EXPERT_CHUNK_FEED_FORWARD_LENGTH, hparams.n_ff_chexp);218 add_kv(LLM_KV_SWIGLU_CLAMP_EXP, hparams.swiglu_clamp_exp);219 add_kv(LLM_KV_SWIGLU_CLAMP_SHEXP, hparams.swiglu_clamp_shexp);220 add_kv(LLM_KV_USE_PARALLEL_RESIDUAL, hparams.use_par_res);221 // add_kv(LLM_KV_TENSOR_DATA_LAYOUT, ???);222 add_kv(LLM_KV_EXPERT_COUNT, hparams.n_expert);223 add_kv(LLM_KV_EXPERT_USED_COUNT, hparams.n_expert_used);224 add_kv(LLM_KV_EXPERT_SHARED_COUNT, hparams.n_expert_shared);225 add_kv(LLM_KV_EXPERT_GROUP_COUNT, hparams.n_expert_groups);226 add_kv(LLM_KV_EXPERT_GROUP_USED_COUNT, hparams.n_group_used);227 add_kv(LLM_KV_EXPERT_WEIGHTS_SCALE, hparams.expert_weights_scale);228 add_kv(LLM_KV_EXPERT_WEIGHTS_NORM, hparams.expert_weights_norm);229 add_kv(LLM_KV_EXPERT_GATING_FUNC, hparams.expert_gating_func);230 add_kv(LLM_KV_EXPERT_GROUP_SCALE, hparams.expert_group_scale);231 add_kv(LLM_KV_EXPERTS_PER_GROUP, hparams.n_group_experts);232 add_kv(LLM_KV_MOE_EVERY_N_LAYERS, hparams.moe_every_n_layers);233 add_kv(LLM_KV_NEXTN_PREDICT_LAYERS, hparams.n_layer_nextn);234 add_kv(LLM_KV_NUM_DEEPSTACK_LAYERS, hparams.n_deepstack_layers);235 add_kv(LLM_KV_DEEPSTACK_MAPPING, hparams.deepstack_mapping_arr);236 add_kv(LLM_KV_POOLING_TYPE, uint32_t(hparams.pooling_type));237 add_kv(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale);238 add_kv(LLM_KV_DECODER_START_TOKEN_ID, hparams.dec_start_token_id);239 add_kv(LLM_KV_DECODER_BLOCK_COUNT, hparams.dec_n_layer);240 add_kv(LLM_KV_ATTN_LOGIT_SOFTCAPPING, hparams.f_attn_logit_softcapping);241 add_kv(LLM_KV_ROUTER_LOGIT_SOFTCAPPING, hparams.f_router_logit_softcapping);242 add_kv(LLM_KV_FINAL_LOGIT_SOFTCAPPING, hparams.f_final_logit_softcapping);243 add_kv(LLM_KV_SWIN_NORM, hparams.swin_norm);244 add_kv(LLM_KV_RESCALE_EVERY_N_LAYERS, hparams.rescale_every_n_layers);245 add_kv(LLM_KV_TIME_MIX_EXTRA_DIM, hparams.time_mix_extra_dim);246 add_kv(LLM_KV_TIME_DECAY_EXTRA_DIM, hparams.time_decay_extra_dim);247 add_kv(LLM_KV_RESIDUAL_SCALE, hparams.f_residual_scale);248 add_kv(LLM_KV_EMBEDDING_SCALE, hparams.f_embedding_scale);249 add_kv(LLM_KV_TOKEN_SHIFT_COUNT, hparams.token_shift_count);250 add_kv(LLM_KV_INTERLEAVE_MOE_LAYER_STEP, hparams.n_moe_layer_step);251 // add_kv(LLM_KV_FULL_ATTENTION_INTERVAL, ???); // saved as LLM_KV_ATTENTION_RECURRENT_LAYERS instead252 253 add_kv(LLM_KV_ATTENTION_HEAD_COUNT, hparams.n_head_arr, true);254 add_kv(LLM_KV_ATTENTION_HEAD_COUNT_KV, hparams.n_head_kv_arr, true);255 add_kv(LLM_KV_ATTENTION_MAX_ALIBI_BIAS, hparams.f_max_alibi_bias);256 add_kv(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv);257 add_kv(LLM_KV_ATTENTION_KEY_LENGTH, hparams.n_embd_head_k_full);258 add_kv(LLM_KV_ATTENTION_VALUE_LENGTH, hparams.n_embd_head_v_full);259 add_kv(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);260 add_kv(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);261 add_kv(LLM_KV_ATTENTION_GROUPNORM_EPS, hparams.f_norm_group_eps);262 add_kv(LLM_KV_ATTENTION_GROUPNORM_GROUPS, hparams.n_norm_groups);263 add_kv(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn);264 add_kv(LLM_KV_ATTENTION_Q_LORA_RANK, hparams.n_lora_q);265 add_kv(LLM_KV_ATTENTION_KV_LORA_RANK, hparams.n_lora_kv);266 add_kv(LLM_KV_ATTENTION_DECAY_LORA_RANK, hparams.n_lora_decay);267 add_kv(LLM_KV_ATTENTION_ICLR_LORA_RANK, hparams.n_lora_iclr);268 add_kv(LLM_KV_ATTENTION_VALUE_RESIDUAL_MIX_LORA_RANK, hparams.n_lora_value_res_mix);269 add_kv(LLM_KV_ATTENTION_GATE_LORA_RANK, hparams.n_lora_gate);270 add_kv(LLM_KV_ATTENTION_RELATIVE_BUCKETS_COUNT, hparams.n_rel_attn_bkts);271 add_kv(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa);272 // add_kv(LLM_KV_ATTENTION_SLIDING_WINDOW_PATTERN, ???);273 add_kv(LLM_KV_ATTENTION_SCALE, hparams.f_attention_scale);274 add_kv(LLM_KV_ATTENTION_OUTPUT_SCALE, hparams.f_attn_out_scale);275 add_kv(LLM_KV_ATTENTION_VALUE_SCALE, hparams.f_attn_value_scale);276 add_kv(LLM_KV_ATTENTION_TEMPERATURE_LENGTH, hparams.attn_temp_length);277 add_kv(LLM_KV_ATTENTION_TEMPERATURE_SCALE, hparams.f_attn_temp_scale);278 add_kv(LLM_KV_ATTENTION_KEY_LENGTH_MLA, hparams.n_embd_head_k_mla_impl);279 add_kv(LLM_KV_ATTENTION_VALUE_LENGTH_MLA, hparams.n_embd_head_v_mla_impl);280 add_kv(LLM_KV_ATTENTION_KEY_LENGTH_SWA, hparams.n_embd_head_k_swa);281 add_kv(LLM_KV_ATTENTION_VALUE_LENGTH_SWA, hparams.n_embd_head_v_swa);282 add_kv(LLM_KV_ATTENTION_INDEXER_HEAD_COUNT, hparams.indexer_n_head);283 add_kv(LLM_KV_ATTENTION_INDEXER_KEY_LENGTH, hparams.indexer_head_size);284 add_kv(LLM_KV_ATTENTION_INDEXER_TOP_K, hparams.indexer_top_k);285 add_kv(LLM_KV_ATTENTION_INDEXER_BLOCK_SIZE, hparams.indexer_block_size);286 add_kv(LLM_KV_ATTENTION_INDEXER_LOCAL_BLOCKS, hparams.indexer_local_blocks);287 add_kv(LLM_KV_ATTENTION_INDEXER_TYPES, hparams.is_indexer_full_impl, true);288 add_kv(LLM_KV_ATTENTION_RECURRENT_LAYERS, hparams.is_recr_impl, true);289 290 const float rope_scaling_factor = hparams.rope_freq_scale_train == 1.0f ? 0.0f : 1.0f/hparams.rope_freq_scale_train;291 292 add_kv(LLM_KV_ROPE_DIMENSION_COUNT, hparams.n_rot_full);293 add_kv(LLM_KV_ROPE_DIMENSION_COUNT_SWA, hparams.n_rot_swa);294 add_kv(LLM_KV_ROPE_DIMENSION_SECTIONS, hparams.rope_sections);295 add_kv(LLM_KV_ROPE_FREQ_BASE, hparams.rope_freq_base_train);296 add_kv(LLM_KV_ROPE_FREQ_BASE_SWA, hparams.rope_freq_base_train_swa);297 // add_kv(LLM_KV_ROPE_SCALE_LINEAR, rope_scaling_factor); // old name298 add_kv(LLM_KV_ROPE_SCALING_TYPE, llama_rope_scaling_type_name(hparams.rope_scaling_type_train));299 add_kv(LLM_KV_ROPE_SCALING_FACTOR, rope_scaling_factor);300 add_kv(LLM_KV_ROPE_SCALING_ATTN_FACTOR, hparams.rope_attn_factor);301 add_kv(LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, hparams.n_ctx_orig_yarn);302 add_kv(LLM_KV_ROPE_SCALING_FINETUNED, hparams.rope_finetuned);303 add_kv(LLM_KV_ROPE_SCALING_YARN_LOG_MUL, hparams.rope_yarn_log_mul);304 add_kv(LLM_KV_ROPE_SCALING_YARN_EXT_FACTOR, hparams.yarn_ext_factor);305 add_kv(LLM_KV_ROPE_SCALING_YARN_ATTN_FACTOR, hparams.yarn_attn_factor);306 add_kv(LLM_KV_ROPE_SCALING_YARN_BETA_FAST, hparams.yarn_beta_fast);307 add_kv(LLM_KV_ROPE_SCALING_YARN_BETA_SLOW, hparams.yarn_beta_slow);308 309 // TODO: implement split file support310 // add_kv(LLM_KV_SPLIT_NO, ???);311 // add_kv(LLM_KV_SPLIT_COUNT, ???);312 // add_kv(LLM_KV_SPLIT_TENSORS_COUNT, ???);313 314 add_kv(LLM_KV_SSM_INNER_SIZE, hparams.ssm_d_inner);315 add_kv(LLM_KV_SSM_CONV_KERNEL, hparams.ssm_d_conv);316 add_kv(LLM_KV_SSM_STATE_SIZE, hparams.ssm_d_state);317 add_kv(LLM_KV_SSM_TIME_STEP_RANK, hparams.ssm_dt_rank);318 add_kv(LLM_KV_SSM_GROUP_COUNT, hparams.ssm_n_group);319 add_kv(LLM_KV_SSM_DT_B_C_RMS, hparams.ssm_dt_b_c_rms);320 321 add_kv(LLM_KV_KDA_HEAD_DIM, hparams.n_embd_head_kda);322 323 add_kv(LLM_KV_WKV_HEAD_SIZE, hparams.wkv_head_size);324 325 add_kv(LLM_KV_TOKENIZER_MODEL, vocab.get_tokenizer_model());326 add_kv(LLM_KV_TOKENIZER_PRE, vocab.get_tokenizer_pre());327 add_kv(LLM_KV_TOKENIZER_LIST, tokens);328 add_kv(LLM_KV_TOKENIZER_TOKEN_TYPE, token_types);329 add_kv(LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, vocab.n_token_types());330 add_kv(LLM_KV_TOKENIZER_SCORES, scores);331 add_kv(LLM_KV_TOKENIZER_MERGES, vocab.get_bpe_merges());332 // FIXME llama_token is type i32 but when reading in a GGUF file u32 is expected, not an issue for writing though333 add_kv(LLM_KV_TOKENIZER_BOS_ID, uint32_t(vocab.token_bos()));334 add_kv(LLM_KV_TOKENIZER_EOS_ID, uint32_t(vocab.token_eos()));335 add_kv(LLM_KV_TOKENIZER_EOT_ID, uint32_t(vocab.token_eot()));336 add_kv(LLM_KV_TOKENIZER_EOM_ID, uint32_t(vocab.token_eom()));337 add_kv(LLM_KV_TOKENIZER_UNK_ID, uint32_t(vocab.token_unk()));338 add_kv(LLM_KV_TOKENIZER_SEP_ID, uint32_t(vocab.token_sep()));339 add_kv(LLM_KV_TOKENIZER_PAD_ID, uint32_t(vocab.token_pad()));340 // add_kv(LLM_KV_TOKENIZER_CLS_ID, uint32_t(vocab.token_bos())); // deprecated341 // add_kv(LLM_KV_TOKENIZER_MASK_ID, ???);342 add_kv(LLM_KV_TOKENIZER_ADD_BOS, vocab.get_add_bos());343 add_kv(LLM_KV_TOKENIZER_ADD_EOS, vocab.get_add_eos());344 add_kv(LLM_KV_TOKENIZER_ADD_SEP, vocab.get_add_sep());345 add_kv(LLM_KV_TOKENIZER_ADD_PREFIX, vocab.get_add_space_prefix());346 add_kv(LLM_KV_TOKENIZER_REMOVE_EXTRA_WS, vocab.get_remove_extra_whitespaces());347 add_kv(LLM_KV_TOKENIZER_PRECOMPILED_CHARSMAP, vocab.get_precompiled_charsmap());348 // add_kv(LLM_KV_TOKENIZER_HF_JSON, ???);349 // add_kv(LLM_KV_TOKENIZER_RWKV, ???);350 add_kv(LLM_KV_TOKENIZER_FIM_PRE_ID, uint32_t(vocab.token_fim_pre()));351 add_kv(LLM_KV_TOKENIZER_FIM_SUF_ID, uint32_t(vocab.token_fim_suf()));352 add_kv(LLM_KV_TOKENIZER_FIM_MID_ID, uint32_t(vocab.token_fim_mid()));353 add_kv(LLM_KV_TOKENIZER_FIM_PAD_ID, uint32_t(vocab.token_fim_pad()));354 add_kv(LLM_KV_TOKENIZER_FIM_REP_ID, uint32_t(vocab.token_fim_rep()));355 add_kv(LLM_KV_TOKENIZER_FIM_SEP_ID, uint32_t(vocab.token_fim_sep()));356 357 // TODO: implement LoRA support358 // add_kv(LLM_KV_ADAPTER_TYPE, ???);359 // add_kv(LLM_KV_ADAPTER_LORA_ALPHA, ???);360 // add_kv(LLM_KV_ADAPTER_LORA_TASK_NAME, ???);361 // add_kv(LLM_KV_ADAPTER_LORA_PROMPT_PREFIX, ???);362 // add_kv(LLM_KV_ADAPTER_ALORA_INVOCATION_TOKENS, ???);363 364 add_kv(LLM_KV_POSNET_EMBEDDING_LENGTH, hparams.posnet.n_embd);365 add_kv(LLM_KV_POSNET_BLOCK_COUNT, hparams.posnet.n_layer);366 367 add_kv(LLM_KV_CONVNEXT_EMBEDDING_LENGTH, hparams.convnext.n_embd);368 add_kv(LLM_KV_CONVNEXT_BLOCK_COUNT, hparams.convnext.n_layer);369 370 add_kv(LLM_KV_CLASSIFIER_OUTPUT_LABELS, model->classifier_labels);371 372 add_kv(LLM_KV_SHORTCONV_L_CACHE, hparams.n_shortconv_l_cache);373 374 add_kv(LLM_KV_XIELU_ALPHA_N, hparams.xielu_alpha_n);375 add_kv(LLM_KV_XIELU_ALPHA_P, hparams.xielu_alpha_p);376 add_kv(LLM_KV_XIELU_BETA, hparams.xielu_beta);377 add_kv(LLM_KV_XIELU_EPS, hparams.xielu_eps);378 379 // deprecated380 // add_kv(LLM_KV_TOKENIZER_PREFIX_ID, ???);381 // add_kv(LLM_KV_TOKENIZER_SUFFIX_ID, ???);382 // add_kv(LLM_KV_TOKENIZER_MIDDLE_ID, ???);383 384 add_kv(LLM_KV_DENSE_2_FEAT_IN, hparams.dense_2_feat_in);385 add_kv(LLM_KV_DENSE_2_FEAT_OUT, hparams.dense_2_feat_out);386 add_kv(LLM_KV_DENSE_3_FEAT_IN, hparams.dense_3_feat_in);387 add_kv(LLM_KV_DENSE_3_FEAT_OUT, hparams.dense_3_feat_out);388}389 390void llama_model_saver::add_tensors_from_model() {391 if (model->output != nullptr &&392 std::string(model->output->name) != std::string(model->tok_embd->name)) {393 add_tensor(model->tok_embd); // some models use the same tensor for tok_embd and output394 }395 add_tensor(model->type_embd);396 add_tensor(model->pos_embd);397 add_tensor(model->tok_norm);398 add_tensor(model->tok_norm_b);399 add_tensor(model->output_norm);400 add_tensor(model->output_norm_b);401 add_tensor(model->output);402 add_tensor(model->output_b);403 add_tensor(model->output_norm_enc);404 add_tensor(model->output_s);405 add_tensor(model->output_in_s);406 add_tensor(model->cls);407 add_tensor(model->cls_b);408 add_tensor(model->cls_out);409 add_tensor(model->cls_out_b);410 add_tensor(model->cls_norm);411 412 for (const struct llama_layer & layer : model->layers) {413 for (size_t i = 0; i < sizeof(layer)/sizeof(struct ggml_tensor *); ++i) {414 add_tensor(reinterpret_cast<const struct ggml_tensor * const *>(&layer)[i]);415 }416 }417}418 419void llama_model_saver::save(const std::string & path_model) {420 gguf_write_to_file(gguf_ctx, path_model.c_str(), false);421}422 423void llama_model_saver::save(FILE * file) {424 gguf_write_to_file_ptr(gguf_ctx, file, false);425}426 