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-arch.h"2 3#include "llama-impl.h"4 5#include <map>6#include <vector>7 8static const std::map<llm_arch, const char *> LLM_ARCH_NAMES = {9 { LLM_ARCH_CLIP, "clip" }, // dummy, only used by llama-quantize10 { LLM_ARCH_LLAMA, "llama" },11 { LLM_ARCH_LLAMA4, "llama4" },12 { LLM_ARCH_DECI, "deci" },13 { LLM_ARCH_FALCON, "falcon" },14 { LLM_ARCH_GROK, "grok" },15 { LLM_ARCH_GPT2, "gpt2" },16 { LLM_ARCH_GPTJ, "gptj" },17 { LLM_ARCH_GPTNEOX, "gptneox" },18 { LLM_ARCH_MPT, "mpt" },19 { LLM_ARCH_BAICHUAN, "baichuan" },20 { LLM_ARCH_STARCODER, "starcoder" },21 { LLM_ARCH_REFACT, "refact" },22 { LLM_ARCH_BERT, "bert" },23 { LLM_ARCH_MODERN_BERT, "modern-bert" },24 { LLM_ARCH_NOMIC_BERT, "nomic-bert" },25 { LLM_ARCH_NOMIC_BERT_MOE, "nomic-bert-moe" },26 { LLM_ARCH_NEO_BERT, "neo-bert" },27 { LLM_ARCH_JINA_BERT_V2, "jina-bert-v2" },28 { LLM_ARCH_JINA_BERT_V3, "jina-bert-v3" },29 { LLM_ARCH_EUROBERT, "eurobert" },30 { LLM_ARCH_BLOOM, "bloom" },31 { LLM_ARCH_STABLELM, "stablelm" },32 { LLM_ARCH_QWEN, "qwen" },33 { LLM_ARCH_QWEN2, "qwen2" },34 { LLM_ARCH_QWEN2MOE, "qwen2moe" },35 { LLM_ARCH_QWEN2VL, "qwen2vl" },36 { LLM_ARCH_QWEN3, "qwen3" },37 { LLM_ARCH_QWEN3MOE, "qwen3moe" },38 { LLM_ARCH_QWEN3NEXT, "qwen3next" },39 { LLM_ARCH_QWEN3VL, "qwen3vl" },40 { LLM_ARCH_QWEN3VLMOE, "qwen3vlmoe" },41 { LLM_ARCH_QWEN35, "qwen35" },42 { LLM_ARCH_QWEN35MOE, "qwen35moe" },43 { LLM_ARCH_PHI2, "phi2" },44 { LLM_ARCH_PHI3, "phi3" },45 { LLM_ARCH_PHIMOE, "phimoe" },46 { LLM_ARCH_PLAMO, "plamo" },47 { LLM_ARCH_PLAMO2, "plamo2" },48 { LLM_ARCH_PLAMO3, "plamo3" },49 { LLM_ARCH_CODESHELL, "codeshell" },50 { LLM_ARCH_ORION, "orion" },51 { LLM_ARCH_INTERNLM2, "internlm2" },52 { LLM_ARCH_MINICPM, "minicpm" },53 { LLM_ARCH_MINICPM3, "minicpm3" },54 { LLM_ARCH_GEMMA, "gemma" },55 { LLM_ARCH_GEMMA2, "gemma2" },56 { LLM_ARCH_GEMMA3, "gemma3" },57 { LLM_ARCH_GEMMA3N, "gemma3n" },58 { LLM_ARCH_GEMMA4, "gemma4" },59 { LLM_ARCH_GEMMA4_ASSISTANT, "gemma4-assistant" },60 { LLM_ARCH_GEMMA_EMBEDDING, "gemma-embedding" },61 { LLM_ARCH_STARCODER2, "starcoder2" },62 { LLM_ARCH_MAMBA, "mamba" },63 { LLM_ARCH_MAMBA2, "mamba2" },64 { LLM_ARCH_JAMBA, "jamba" },65 { LLM_ARCH_FALCON_H1, "falcon-h1" },66 { LLM_ARCH_XVERSE, "xverse" },67 { LLM_ARCH_COMMAND_R, "command-r" },68 { LLM_ARCH_COHERE2, "cohere2" },69 { LLM_ARCH_COHERE2MOE, "cohere2moe" },70 { LLM_ARCH_DBRX, "dbrx" },71 { LLM_ARCH_OLMO, "olmo" },72 { LLM_ARCH_OLMO2, "olmo2" },73 { LLM_ARCH_OLMOE, "olmoe" },74 { LLM_ARCH_MUSE_GLIMMER, "muse-glimmer" },75 { LLM_ARCH_OPENELM, "openelm" },76 { LLM_ARCH_ARCTIC, "arctic" },77 { LLM_ARCH_DEEPSEEK, "deepseek" },78 { LLM_ARCH_DEEPSEEK2, "deepseek2" },79 { LLM_ARCH_DEEPSEEK2OCR, "deepseek2-ocr" },80 { LLM_ARCH_DEEPSEEK32, "deepseek32" },81 { LLM_ARCH_DEEPSEEK4, "deepseek4" },82 { LLM_ARCH_CHATGLM, "chatglm" },83 { LLM_ARCH_GLM4, "glm4" },84 { LLM_ARCH_GLM4_MOE, "glm4moe" },85 { LLM_ARCH_GLM_DSA, "glm-dsa" },86 { LLM_ARCH_BITNET, "bitnet" },87 { LLM_ARCH_T5, "t5" },88 { LLM_ARCH_T5ENCODER, "t5encoder" },89 { LLM_ARCH_JAIS, "jais" },90 { LLM_ARCH_JAIS2, "jais2" },91 { LLM_ARCH_NEMOTRON, "nemotron" },92 { LLM_ARCH_NEMOTRON_H, "nemotron_h" },93 { LLM_ARCH_NEMOTRON_H_MOE, "nemotron_h_moe" },94 { LLM_ARCH_EXAONE, "exaone" },95 { LLM_ARCH_EXAONE4, "exaone4" },96 { LLM_ARCH_EXAONE_MOE, "exaone-moe" },97 { LLM_ARCH_RWKV6, "rwkv6" },98 { LLM_ARCH_RWKV6QWEN2, "rwkv6qwen2" },99 { LLM_ARCH_RWKV7, "rwkv7" },100 { LLM_ARCH_ARWKV7, "arwkv7" },101 { LLM_ARCH_GRANITE, "granite" },102 { LLM_ARCH_GRANITE_MOE, "granitemoe" },103 { LLM_ARCH_GRANITE_HYBRID, "granitehybrid" },104 { LLM_ARCH_GRANITE_SWITCH, "graniteswitch" },105 { LLM_ARCH_CHAMELEON, "chameleon" },106 { LLM_ARCH_WAVTOKENIZER_DEC, "wavtokenizer-dec" },107 { LLM_ARCH_PLM, "plm" },108 { LLM_ARCH_BAILINGMOE, "bailingmoe" },109 { LLM_ARCH_BAILINGMOE2, "bailingmoe2" },110 { LLM_ARCH_DOTS1, "dots1" },111 { LLM_ARCH_ARCEE, "arcee" },112 { LLM_ARCH_AFMOE, "afmoe" },113 { LLM_ARCH_LAGUNA, "laguna" },114 { LLM_ARCH_ERNIE4_5, "ernie4_5" },115 { LLM_ARCH_ERNIE4_5_MOE, "ernie4_5-moe" },116 { LLM_ARCH_HUNYUAN_MOE, "hunyuan-moe" },117 { LLM_ARCH_HUNYUAN_DENSE, "hunyuan-dense" },118 { LLM_ARCH_HUNYUAN_VL, "hunyuan_vl" },119 { LLM_ARCH_HY_V3, "hy_v3" },120 { LLM_ARCH_SMOLLM3, "smollm3" },121 { LLM_ARCH_OPENAI_MOE, "gpt-oss" },122 { LLM_ARCH_LFM2, "lfm2" },123 { LLM_ARCH_LFM2MOE, "lfm2moe" },124 { LLM_ARCH_DREAM, "dream" },125 { LLM_ARCH_SMALLTHINKER, "smallthinker" },126 { LLM_ARCH_LLADA, "llada" },127 { LLM_ARCH_LLADA_MOE, "llada-moe" },128 { LLM_ARCH_SEED_OSS, "seed_oss" },129 { LLM_ARCH_GROVEMOE, "grovemoe" },130 { LLM_ARCH_APERTUS, "apertus" },131 { LLM_ARCH_MINIMAX_M2, "minimax-m2" },132 { LLM_ARCH_MINIMAX_M3, "minimax-m3" },133 { LLM_ARCH_COGVLM, "cogvlm" },134 { LLM_ARCH_RND1, "rnd1" },135 { LLM_ARCH_PANGU_EMBED, "pangu-embedded" },136 { LLM_ARCH_MISTRAL3, "mistral3" },137 { LLM_ARCH_EAGLE3, "eagle3" },138 { LLM_ARCH_DFLASH, "dflash" },139 { LLM_ARCH_MISTRAL4, "mistral4" },140 { LLM_ARCH_PADDLEOCR, "paddleocr" },141 { LLM_ARCH_MIMO2, "mimo2" },142 { LLM_ARCH_STEP35, "step35" },143 { LLM_ARCH_LLAMA_EMBED, "llama-embed" },144 { LLM_ARCH_MAINCODER, "maincoder" },145 { LLM_ARCH_KIMI_LINEAR, "kimi-linear" },146 { LLM_ARCH_TALKIE, "talkie" },147 { LLM_ARCH_MELLUM, "mellum" },148 { LLM_ARCH_NANBEIGE, "nanbeige" },149 { LLM_ARCH_QWEN3TTS, "qwen3tts" },150 { LLM_ARCH_UNKNOWN, "(unknown)" },151};152 153static const std::map<llm_kv, const char *> LLM_KV_NAMES = {154 { LLM_KV_GENERAL_TYPE, "general.type" },155 { LLM_KV_GENERAL_ARCHITECTURE, "general.architecture" },156 { LLM_KV_GENERAL_QUANTIZATION_VERSION, "general.quantization_version" },157 { LLM_KV_GENERAL_ALIGNMENT, "general.alignment" },158 { LLM_KV_GENERAL_FILE_TYPE, "general.file_type" },159 { LLM_KV_GENERAL_SAMPLING_SEQUENCE, "general.sampling.sequence" },160 { LLM_KV_GENERAL_SAMPLING_TOP_K, "general.sampling.top_k" },161 { LLM_KV_GENERAL_SAMPLING_TOP_P, "general.sampling.top_p" },162 { LLM_KV_GENERAL_SAMPLING_MIN_P, "general.sampling.min_p" },163 { LLM_KV_GENERAL_SAMPLING_XTC_PROBABILITY, "general.sampling.xtc_probability" },164 { LLM_KV_GENERAL_SAMPLING_XTC_THRESHOLD, "general.sampling.xtc_threshold" },165 { LLM_KV_GENERAL_SAMPLING_TEMP, "general.sampling.temp" },166 { LLM_KV_GENERAL_SAMPLING_PENALTY_LAST_N, "general.sampling.penalty_last_n" },167 { LLM_KV_GENERAL_SAMPLING_PENALTY_REPEAT, "general.sampling.penalty_repeat" },168 { LLM_KV_GENERAL_SAMPLING_MIROSTAT, "general.sampling.mirostat" },169 { LLM_KV_GENERAL_SAMPLING_MIROSTAT_TAU, "general.sampling.mirostat_tau" },170 { LLM_KV_GENERAL_SAMPLING_MIROSTAT_ETA, "general.sampling.mirostat_eta" },171 { LLM_KV_GENERAL_NAME, "general.name" },172 { LLM_KV_GENERAL_AUTHOR, "general.author" },173 { LLM_KV_GENERAL_VERSION, "general.version" },174 { LLM_KV_GENERAL_URL, "general.url" },175 { LLM_KV_GENERAL_DESCRIPTION, "general.description" },176 { LLM_KV_GENERAL_LICENSE, "general.license" },177 { LLM_KV_GENERAL_SOURCE_URL, "general.source.url" },178 { LLM_KV_GENERAL_SOURCE_HF_REPO, "general.source.huggingface.repository" },179 180 { LLM_KV_VOCAB_SIZE, "%s.vocab_size" },181 { LLM_KV_CONTEXT_LENGTH, "%s.context_length" },182 { LLM_KV_EMBEDDING_LENGTH, "%s.embedding_length" },183 { LLM_KV_EMBEDDING_LENGTH_OUT, "%s.embedding_length_out" },184 { LLM_KV_EMBEDDING_LENGTH_PER_LAYER, "%s.embedding_length_per_layer_input" },185 { LLM_KV_FEATURES_LENGTH, "%s.features_length" },186 { LLM_KV_BLOCK_COUNT, "%s.block_count" },187 { LLM_KV_LEADING_DENSE_BLOCK_COUNT, "%s.leading_dense_block_count" },188 { LLM_KV_FEED_FORWARD_LENGTH, "%s.feed_forward_length" },189 { LLM_KV_EXPERT_FEED_FORWARD_LENGTH, "%s.expert_feed_forward_length" },190 { LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH, "%s.expert_shared_feed_forward_length" },191 { LLM_KV_EXPERT_CHUNK_FEED_FORWARD_LENGTH, "%s.expert_chunk_feed_forward_length" },192 { LLM_KV_SWIGLU_CLAMP_EXP, "%s.swiglu_clamp_exp" },193 { LLM_KV_SWIGLU_CLAMP_SHEXP, "%s.swiglu_clamp_shexp" },194 { LLM_KV_USE_PARALLEL_RESIDUAL, "%s.use_parallel_residual" },195 { LLM_KV_TENSOR_DATA_LAYOUT, "%s.tensor_data_layout" },196 { LLM_KV_EXPERT_COUNT, "%s.expert_count" },197 { LLM_KV_EXPERT_USED_COUNT, "%s.expert_used_count" },198 { LLM_KV_EXPERT_SHARED_COUNT, "%s.expert_shared_count" },199 { LLM_KV_EXPERT_GROUP_COUNT, "%s.expert_group_count" },200 { LLM_KV_EXPERT_GROUP_USED_COUNT, "%s.expert_group_used_count" },201 { LLM_KV_EXPERT_WEIGHTS_SCALE, "%s.expert_weights_scale" },202 { LLM_KV_EXPERT_WEIGHTS_NORM, "%s.expert_weights_norm" },203 { LLM_KV_EXPERT_GATING_FUNC, "%s.expert_gating_func" },204 { LLM_KV_EXPERT_GROUP_SCALE, "%s.expert_group_scale" },205 { LLM_KV_EXPERTS_PER_GROUP, "%s.experts_per_group" },206 { LLM_KV_MOE_EVERY_N_LAYERS, "%s.moe_every_n_layers" },207 { LLM_KV_MOE_LATENT_SIZE, "%s.moe_latent_size" },208 { LLM_KV_NEXTN_PREDICT_LAYERS, "%s.nextn_predict_layers" },209 { LLM_KV_NUM_DEEPSTACK_LAYERS, "%s.n_deepstack_layers" },210 { LLM_KV_DEEPSTACK_MAPPING, "%s.deepstack_mapping" },211 { LLM_KV_HIDDEN_ACT, "%s.hidden_activation" },212 { LLM_KV_POOLING_TYPE, "%s.pooling_type" },213 { LLM_KV_LOGIT_SCALE, "%s.logit_scale" },214 { LLM_KV_DECODER_START_TOKEN_ID, "%s.decoder_start_token_id" },215 { LLM_KV_DECODER_BLOCK_COUNT, "%s.decoder_block_count" },216 { LLM_KV_ATTN_LOGIT_SOFTCAPPING, "%s.attn_logit_softcapping" },217 { LLM_KV_ROUTER_LOGIT_SOFTCAPPING, "%s.router_logit_softcapping" },218 { LLM_KV_FINAL_LOGIT_SOFTCAPPING, "%s.final_logit_softcapping" },219 { LLM_KV_SWIN_NORM, "%s.swin_norm" },220 { LLM_KV_RESCALE_EVERY_N_LAYERS, "%s.rescale_every_n_layers" },221 { LLM_KV_TIME_MIX_EXTRA_DIM, "%s.time_mix_extra_dim" },222 { LLM_KV_TIME_DECAY_EXTRA_DIM, "%s.time_decay_extra_dim" },223 { LLM_KV_RESIDUAL_SCALE, "%s.residual_scale" },224 { LLM_KV_EMBEDDING_SCALE, "%s.embedding_scale" },225 { LLM_KV_ADAPTER_COUNT, "%s.adapters.count" },226 { LLM_KV_ADAPTER_TOKEN_IDS_ACTIVATE, "%s.adapters.token_ids_activate" },227 { LLM_KV_ADAPTER_TOKEN_IDS_SUBSTITUTE, "%s.adapters.token_ids_substitute" },228 { LLM_KV_ADAPTER_LORA_RANK, "%s.adapters.lora_rank" },229 { LLM_KV_ADAPTER_ROUTER_GAIN, "%s.adapters.router_gain" },230 { LLM_KV_TOKEN_SHIFT_COUNT, "%s.token_shift_count" },231 { LLM_KV_INTERLEAVE_MOE_LAYER_STEP, "%s.interleave_moe_layer_step" },232 { LLM_KV_FULL_ATTENTION_INTERVAL, "%s.full_attention_interval" },233 { LLM_KV_NUM_LOOPS, "%s.num_loops" },234 { LLM_KV_SKIP_LOOP_FINAL_NORM, "%s.skip_loop_final_norm" },235 236 { LLM_KV_ATTENTION_HEAD_COUNT, "%s.attention.head_count" },237 { LLM_KV_ATTENTION_HEAD_COUNT_KV, "%s.attention.head_count_kv" },238 { LLM_KV_ATTENTION_MAX_ALIBI_BIAS, "%s.attention.max_alibi_bias" },239 { LLM_KV_ATTENTION_CLAMP_KQV, "%s.attention.clamp_kqv" },240 { LLM_KV_ATTENTION_KEY_LENGTH, "%s.attention.key_length" },241 { LLM_KV_ATTENTION_VALUE_LENGTH, "%s.attention.value_length" },242 { LLM_KV_ATTENTION_LAYERNORM_EPS, "%s.attention.layer_norm_epsilon" },243 { LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, "%s.attention.layer_norm_rms_epsilon" },244 { LLM_KV_ATTENTION_GROUPNORM_EPS, "%s.attention.group_norm_epsilon" },245 { LLM_KV_ATTENTION_GROUPNORM_GROUPS, "%s.attention.group_norm_groups" },246 { LLM_KV_ATTENTION_CAUSAL, "%s.attention.causal" },247 { LLM_KV_ATTENTION_Q_LORA_RANK, "%s.attention.q_lora_rank" },248 { LLM_KV_ATTENTION_KV_LORA_RANK, "%s.attention.kv_lora_rank" },249 { LLM_KV_ATTENTION_DECAY_LORA_RANK, "%s.attention.decay_lora_rank" },250 { LLM_KV_ATTENTION_ICLR_LORA_RANK, "%s.attention.iclr_lora_rank" },251 { LLM_KV_ATTENTION_VALUE_RESIDUAL_MIX_LORA_RANK, "%s.attention.value_residual_mix_lora_rank" },252 { LLM_KV_ATTENTION_GATE_LORA_RANK, "%s.attention.gate_lora_rank" },253 { LLM_KV_ATTENTION_RELATIVE_BUCKETS_COUNT, "%s.attention.relative_buckets_count" },254 { LLM_KV_ATTENTION_SLIDING_WINDOW, "%s.attention.sliding_window" },255 { LLM_KV_ATTENTION_SLIDING_WINDOW_PATTERN, "%s.attention.sliding_window_pattern" },256 { LLM_KV_ATTENTION_SCALE, "%s.attention.scale" },257 { LLM_KV_ATTENTION_OUTPUT_SCALE, "%s.attention.output_scale" },258 { LLM_KV_ATTENTION_VALUE_SCALE, "%s.attention.value_scale" },259 { LLM_KV_ATTENTION_TEMPERATURE_LENGTH, "%s.attention.temperature_length" },260 { LLM_KV_ATTENTION_TEMPERATURE_SCALE, "%s.attention.temperature_scale" },261 { LLM_KV_ATTENTION_KEY_LENGTH_MLA, "%s.attention.key_length_mla" },262 { LLM_KV_ATTENTION_VALUE_LENGTH_MLA, "%s.attention.value_length_mla" },263 { LLM_KV_ATTENTION_KEY_LENGTH_SWA, "%s.attention.key_length_swa" },264 { LLM_KV_ATTENTION_VALUE_LENGTH_SWA, "%s.attention.value_length_swa" },265 { LLM_KV_ATTENTION_INDEXER_HEAD_COUNT, "%s.attention.indexer.head_count" },266 { LLM_KV_ATTENTION_INDEXER_KEY_LENGTH, "%s.attention.indexer.key_length" },267 { LLM_KV_ATTENTION_INDEXER_TOP_K, "%s.attention.indexer.top_k" },268 { LLM_KV_ATTENTION_INDEXER_BLOCK_SIZE, "%s.attention.indexer.block_size" },269 { LLM_KV_ATTENTION_INDEXER_LOCAL_BLOCKS, "%s.attention.indexer.local_blocks" },270 { LLM_KV_ATTENTION_INDEXER_TYPES, "%s.attention.indexer.types" },271 { LLM_KV_ATTENTION_OUTPUT_GROUP_COUNT, "%s.attention.output_group_count" },272 { LLM_KV_ATTENTION_OUTPUT_LORA_RANK, "%s.attention.output_lora_rank" },273 { LLM_KV_ATTENTION_COMPRESS_ROPE_FREQ_BASE, "%s.attention.compress_rope_freq_base" },274 { LLM_KV_ATTENTION_COMPRESS_RATIOS, "%s.attention.compress_ratios" },275 { LLM_KV_ATTENTION_SHARED_KV_LAYERS, "%s.attention.shared_kv_layers" },276 { LLM_KV_ATTENTION_RECURRENT_LAYERS, "%s.attention.recurrent_layers" },277 278 { LLM_KV_HYPER_CONNECTION_COUNT, "%s.hyper_connection.count" },279 { LLM_KV_HYPER_CONNECTION_SINKHORN_ITERATIONS, "%s.hyper_connection.sinkhorn_iterations" },280 { LLM_KV_HYPER_CONNECTION_EPSILON, "%s.hyper_connection.epsilon" },281 282 { LLM_KV_HASH_LAYER_COUNT, "%s.hash_layer_count" },283 284 { LLM_KV_ROPE_DIMENSION_COUNT, "%s.rope.dimension_count" },285 { LLM_KV_ROPE_DIMENSION_COUNT_SWA, "%s.rope.dimension_count_swa" },286 { LLM_KV_ROPE_DIMENSION_SECTIONS, "%s.rope.dimension_sections" },287 { LLM_KV_ROPE_FREQ_BASE, "%s.rope.freq_base" },288 { LLM_KV_ROPE_FREQ_BASE_SWA, "%s.rope.freq_base_swa" },289 { LLM_KV_ROPE_SCALE_LINEAR, "%s.rope.scale_linear" },290 { LLM_KV_ROPE_SCALING_TYPE, "%s.rope.scaling.type" },291 { LLM_KV_ROPE_SCALING_FACTOR, "%s.rope.scaling.factor" },292 { LLM_KV_ROPE_SCALING_ALPHA, "%s.rope.scaling.alpha" },293 { LLM_KV_ROPE_SCALING_ATTN_FACTOR, "%s.rope.scaling.attn_factor" },294 { LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, "%s.rope.scaling.original_context_length" },295 { LLM_KV_ROPE_SCALING_FINETUNED, "%s.rope.scaling.finetuned" },296 { LLM_KV_ROPE_SCALING_YARN_LOG_MUL, "%s.rope.scaling.yarn_log_multiplier" },297 { LLM_KV_ROPE_SCALING_YARN_EXT_FACTOR, "%s.rope.scaling.yarn_ext_factor" },298 { LLM_KV_ROPE_SCALING_YARN_ATTN_FACTOR, "%s.rope.scaling.yarn_attn_factor" },299 { LLM_KV_ROPE_SCALING_YARN_BETA_FAST, "%s.rope.scaling.yarn_beta_fast" },300 { LLM_KV_ROPE_SCALING_YARN_BETA_SLOW, "%s.rope.scaling.yarn_beta_slow" },301 302 { LLM_KV_SPLIT_NO, "split.no" },303 { LLM_KV_SPLIT_COUNT, "split.count" },304 { LLM_KV_SPLIT_TENSORS_COUNT, "split.tensors.count" },305 306 { LLM_KV_SSM_CONV_KERNEL, "%s.ssm.conv_kernel" },307 { LLM_KV_SSM_INNER_SIZE, "%s.ssm.inner_size" },308 { LLM_KV_SSM_STATE_SIZE, "%s.ssm.state_size" },309 { LLM_KV_SSM_TIME_STEP_RANK, "%s.ssm.time_step_rank" },310 { LLM_KV_SSM_GROUP_COUNT, "%s.ssm.group_count" },311 { LLM_KV_SSM_DT_B_C_RMS, "%s.ssm.dt_b_c_rms" },312 313 { LLM_KV_KDA_HEAD_DIM, "%s.kda.head_dim" },314 315 { LLM_KV_WKV_HEAD_SIZE, "%s.wkv.head_size" },316 317 { LLM_KV_POSNET_EMBEDDING_LENGTH, "%s.posnet.embedding_length" },318 { LLM_KV_POSNET_BLOCK_COUNT, "%s.posnet.block_count" },319 320 { LLM_KV_CONVNEXT_EMBEDDING_LENGTH, "%s.convnext.embedding_length" },321 { LLM_KV_CONVNEXT_BLOCK_COUNT, "%s.convnext.block_count" },322 323 { LLM_KV_CLASSIFIER_OUTPUT_LABELS, "%s.classifier.output_labels" },324 325 { LLM_KV_TARGET_LAYERS, "%s.target_layers" },326 { LLM_KV_TARGET_HIDDEN_SIZE, "%s.target_hidden_size" },327 { LLM_KV_NORM_BEFORE_RESIDUAL, "%s.norm_before_residual" },328 { LLM_KV_NORM_BEFORE_FC, "%s.norm_before_fc" },329 330 { LLM_KV_SHORTCONV_L_CACHE, "%s.shortconv.l_cache" },331 // sentence-transformers dense modules feature dims332 { LLM_KV_DENSE_2_FEAT_IN, "%s.dense_2_feat_in" },333 { LLM_KV_DENSE_2_FEAT_OUT, "%s.dense_2_feat_out" },334 { LLM_KV_DENSE_3_FEAT_IN, "%s.dense_3_feat_in" },335 { LLM_KV_DENSE_3_FEAT_OUT, "%s.dense_3_feat_out" },336 337 { LLM_KV_TOKENIZER_MODEL, "tokenizer.ggml.model" },338 { LLM_KV_TOKENIZER_PRE, "tokenizer.ggml.pre" },339 { LLM_KV_TOKENIZER_LIST, "tokenizer.ggml.tokens" },340 { LLM_KV_TOKENIZER_TOKEN_TYPE, "tokenizer.ggml.token_type" },341 { LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, "tokenizer.ggml.token_type_count" },342 { LLM_KV_TOKENIZER_SCORES, "tokenizer.ggml.scores" },343 { LLM_KV_TOKENIZER_MERGES, "tokenizer.ggml.merges" },344 { LLM_KV_TOKENIZER_BOS_ID, "tokenizer.ggml.bos_token_id" },345 { LLM_KV_TOKENIZER_EOS_ID, "tokenizer.ggml.eos_token_id" },346 { LLM_KV_TOKENIZER_EOT_ID, "tokenizer.ggml.eot_token_id" },347 { LLM_KV_TOKENIZER_EOM_ID, "tokenizer.ggml.eom_token_id" },348 { LLM_KV_TOKENIZER_UNK_ID, "tokenizer.ggml.unknown_token_id" },349 { LLM_KV_TOKENIZER_SEP_ID, "tokenizer.ggml.seperator_token_id" },350 { LLM_KV_TOKENIZER_PAD_ID, "tokenizer.ggml.padding_token_id" },351 { LLM_KV_TOKENIZER_CLS_ID, "tokenizer.ggml.cls_token_id" },352 { LLM_KV_TOKENIZER_MASK_ID, "tokenizer.ggml.mask_token_id" },353 { LLM_KV_TOKENIZER_ADD_BOS, "tokenizer.ggml.add_bos_token" },354 { LLM_KV_TOKENIZER_ADD_EOS, "tokenizer.ggml.add_eos_token" },355 { LLM_KV_TOKENIZER_ADD_SEP, "tokenizer.ggml.add_sep_token" },356 { LLM_KV_TOKENIZER_ADD_PREFIX, "tokenizer.ggml.add_space_prefix" },357 { LLM_KV_TOKENIZER_REMOVE_EXTRA_WS, "tokenizer.ggml.remove_extra_whitespaces" },358 { LLM_KV_TOKENIZER_PRECOMPILED_CHARSMAP, "tokenizer.ggml.precompiled_charsmap" },359 { LLM_KV_TOKENIZER_HF_JSON, "tokenizer.huggingface.json" },360 { LLM_KV_TOKENIZER_RWKV, "tokenizer.rwkv.world" },361 { LLM_KV_TOKENIZER_CHAT_TEMPLATE, "tokenizer.chat_template" },362 { LLM_KV_TOKENIZER_NORMALIZER_LOWERCASE, "tokenizer.ggml.normalizer.lowercase" },363 { LLM_KV_TOKENIZER_NORMALIZER_STRIP_ACCENTS, "tokenizer.ggml.normalizer.strip_accents" },364 { LLM_KV_TOKENIZER_FIM_PRE_ID, "tokenizer.ggml.fim_pre_token_id" },365 { LLM_KV_TOKENIZER_FIM_SUF_ID, "tokenizer.ggml.fim_suf_token_id" },366 { LLM_KV_TOKENIZER_FIM_MID_ID, "tokenizer.ggml.fim_mid_token_id" },367 { LLM_KV_TOKENIZER_FIM_PAD_ID, "tokenizer.ggml.fim_pad_token_id" },368 { LLM_KV_TOKENIZER_FIM_REP_ID, "tokenizer.ggml.fim_rep_token_id" },369 { LLM_KV_TOKENIZER_FIM_SEP_ID, "tokenizer.ggml.fim_sep_token_id" },370 { LLM_KV_TOKENIZER_SUPPRESS_TOKENS, "tokenizer.ggml.suppress_tokens" },371 372 { LLM_KV_ADAPTER_TYPE, "adapter.type" },373 { LLM_KV_ADAPTER_LORA_ALPHA, "adapter.lora.alpha" },374 { LLM_KV_ADAPTER_LORA_TASK_NAME, "adapter.lora.task_name" },375 { LLM_KV_ADAPTER_LORA_PROMPT_PREFIX, "adapter.lora.prompt_prefix" },376 { LLM_KV_ADAPTER_ALORA_INVOCATION_TOKENS, "adapter.alora.invocation_tokens" },377 378 { LLM_KV_XIELU_ALPHA_N, "xielu.alpha_n" },379 { LLM_KV_XIELU_ALPHA_P, "xielu.alpha_p" },380 { LLM_KV_XIELU_BETA, "xielu.beta" },381 { LLM_KV_XIELU_EPS, "xielu.eps" },382 383 // deprecated384 { LLM_KV_TOKENIZER_PREFIX_ID, "tokenizer.ggml.prefix_token_id" },385 { LLM_KV_TOKENIZER_SUFFIX_ID, "tokenizer.ggml.suffix_token_id" },386 { LLM_KV_TOKENIZER_MIDDLE_ID, "tokenizer.ggml.middle_token_id" },387};388 389static const std::map<llm_tensor, const char *> LLM_TENSOR_NAMES = {390 { LLM_TENSOR_TOKEN_EMBD, "token_embd" },391 { LLM_TENSOR_OUTPUT_NORM, "output_norm" },392 { LLM_TENSOR_OUTPUT_NORM_LFM2, "token_embd_norm" }, // fix for wrong tensor name393 { LLM_TENSOR_OUTPUT, "output" },394 { LLM_TENSOR_ROPE_FREQS, "rope_freqs" },395 { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" },396 { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" },397 { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" },398 { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" },399 { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" },400 { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" },401 { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" },402 { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" },403 { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" },404 { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" },405 { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" },406 { LLM_TENSOR_FFN_GATE_EXP, "blk.%d.ffn_gate.%d" },407 { LLM_TENSOR_FFN_DOWN_EXP, "blk.%d.ffn_down.%d" },408 { LLM_TENSOR_FFN_UP_EXP, "blk.%d.ffn_up.%d" },409 { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" },410 { LLM_TENSOR_FFN_GATE_UP_EXPS, "blk.%d.ffn_gate_up_exps" },411 { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" },412 { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" },413 { LLM_TENSOR_ATTN_POST_NORM, "blk.%d.post_attention_norm" },414 { LLM_TENSOR_ATTN_Q_NORM, "blk.%d.attn_q_norm" },415 { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm" },416 { LLM_TENSOR_ATTN_GATE, "blk.%d.attn_gate" },417 { LLM_TENSOR_FFN_POST_NORM, "blk.%d.post_ffw_norm" },418 { LLM_TENSOR_FFN_POST_NORM_1, "blk.%d.post_ffw_norm_1" },419 { LLM_TENSOR_FFN_POST_NORM_2, "blk.%d.post_ffw_norm_2" },420 { LLM_TENSOR_FFN_PRE_NORM_2, "blk.%d.pre_ffw_norm_2" },421 { LLM_TENSOR_FFN_GATE_SHEXP, "blk.%d.ffn_gate_shexp" },422 { LLM_TENSOR_FFN_UP_SHEXP, "blk.%d.ffn_up_shexp" },423 { LLM_TENSOR_FFN_DOWN_SHEXP, "blk.%d.ffn_down_shexp" },424 { LLM_TENSOR_FFN_EXP_PROBS_B, "blk.%d.exp_probs_b" },425 { LLM_TENSOR_FFN_LATENT_DOWN, "blk.%d.ffn_latent_down" },426 { LLM_TENSOR_FFN_LATENT_UP, "blk.%d.ffn_latent_up" },427 { LLM_TENSOR_ATTN_NORM_2, "blk.%d.attn_norm_2" },428 { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" },429 { LLM_TENSOR_LAYER_OUT_NORM, "blk.%d.layer_output_norm" },430 { LLM_TENSOR_LAYER_OUT_SCALE, "blk.%d.layer_output_scale" },431 { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" },432 { LLM_TENSOR_POS_EMBD, "position_embd" },433 { LLM_TENSOR_FFN_ACT, "blk.%d.ffn.act" },434 { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" },435 { LLM_TENSOR_TOKEN_TYPES, "token_types" },436 { LLM_TENSOR_CLS, "cls" },437 { LLM_TENSOR_CLS_OUT, "cls.output" },438 { LLM_TENSOR_CLS_NORM, "cls.norm" },439 { LLM_TENSOR_ENC_OUTPUT_NORM, "enc.output_norm" },440 { LLM_TENSOR_FFN_GATE_INP_SHEXP, "blk.%d.ffn_gate_inp_shexp" },441 { LLM_TENSOR_SSM_A_NOSCAN, "blk.%d.ssm_a" },442 { LLM_TENSOR_SSM_CONV1D, "blk.%d.ssm_conv1d" },443 { LLM_TENSOR_SSM_DT, "blk.%d.ssm_dt" },444 { LLM_TENSOR_SSM_BETA_ALPHA, "blk.%d.ssm_ba" },445 { LLM_TENSOR_SSM_ALPHA, "blk.%d.ssm_alpha" },446 { LLM_TENSOR_SSM_IN, "blk.%d.ssm_in" },447 { LLM_TENSOR_SSM_NORM, "blk.%d.ssm_norm" },448 { LLM_TENSOR_SSM_OUT, "blk.%d.ssm_out" },449 { LLM_TENSOR_ROPE_FACTORS_LONG, "rope_factors_long" },450 { LLM_TENSOR_ROPE_FACTORS_SHORT, "rope_factors_short" },451 { LLM_TENSOR_SSM_X, "blk.%d.ssm_x" },452 { LLM_TENSOR_SSM_A, "blk.%d.ssm_a" },453 { LLM_TENSOR_SSM_D, "blk.%d.ssm_d" },454 { LLM_TENSOR_SSM_DT_NORM, "blk.%d.ssm_dt_norm" },455 { LLM_TENSOR_SSM_B_NORM, "blk.%d.ssm_b_norm" },456 { LLM_TENSOR_SSM_C_NORM, "blk.%d.ssm_c_norm" },457 { LLM_TENSOR_SSM_CONV1D_Q, "blk.%d.ssm_conv1d_q" },458 { LLM_TENSOR_SSM_CONV1D_K, "blk.%d.ssm_conv1d_k" },459 { LLM_TENSOR_SSM_CONV1D_V, "blk.%d.ssm_conv1d_v" },460 { LLM_TENSOR_SSM_F_A, "blk.%d.ssm_f_a" },461 { LLM_TENSOR_SSM_F_B, "blk.%d.ssm_f_b" },462 { LLM_TENSOR_SSM_BETA, "blk.%d.ssm_beta" },463 { LLM_TENSOR_SSM_G_A, "blk.%d.ssm_g_a" },464 { LLM_TENSOR_SSM_G_B, "blk.%d.ssm_g_b" },465 { LLM_TENSOR_SSM_NORM, "blk.%d.ssm_norm" },466 { LLM_TENSOR_ATTN_Q_A_NORM, "blk.%d.attn_q_a_norm" },467 { LLM_TENSOR_ATTN_KV_A_NORM, "blk.%d.attn_kv_a_norm" },468 { LLM_TENSOR_ATTN_Q_A, "blk.%d.attn_q_a" },469 { LLM_TENSOR_ATTN_Q_B, "blk.%d.attn_q_b" },470 { LLM_TENSOR_ATTN_KV_A_MQA, "blk.%d.attn_kv_a_mqa" },471 { LLM_TENSOR_ATTN_KV_B, "blk.%d.attn_kv_b" },472 { LLM_TENSOR_ATTN_KV, "blk.%d.attn_kv" },473 { LLM_TENSOR_ATTN_KV_NORM, "blk.%d.attn_kv_a_norm" },474 { LLM_TENSOR_ATTN_OUT_A, "blk.%d.attn_output_a" },475 { LLM_TENSOR_ATTN_OUT_B, "blk.%d.attn_output_b" },476 { LLM_TENSOR_HC_HEAD_FN, "output_hc_fn" },477 { LLM_TENSOR_HC_HEAD_BASE, "output_hc_base" },478 { LLM_TENSOR_HC_HEAD_SCALE, "output_hc_scale" },479 { LLM_TENSOR_HC_ATTN_FN, "blk.%d.hc_attn_fn" },480 { LLM_TENSOR_HC_ATTN_BASE, "blk.%d.hc_attn_base" },481 { LLM_TENSOR_HC_ATTN_SCALE, "blk.%d.hc_attn_scale" },482 { LLM_TENSOR_HC_FFN_FN, "blk.%d.hc_ffn_fn" },483 { LLM_TENSOR_HC_FFN_BASE, "blk.%d.hc_ffn_base" },484 { LLM_TENSOR_HC_FFN_SCALE, "blk.%d.hc_ffn_scale" },485 { LLM_TENSOR_ATTN_COMPRESSOR_WKV, "blk.%d.attn_compressor_kv" },486 { LLM_TENSOR_ATTN_COMPRESSOR_WGATE, "blk.%d.attn_compressor_gate" },487 { LLM_TENSOR_ATTN_COMPRESSOR_APE, "blk.%d.attn_compressor_ape" },488 { LLM_TENSOR_ATTN_COMPRESSOR_NORM, "blk.%d.attn_compressor_norm" },489 { LLM_TENSOR_PER_LAYER_TOKEN_EMBD, "per_layer_token_embd" },490 { LLM_TENSOR_PER_LAYER_MODEL_PROJ, "per_layer_model_proj" },491 { LLM_TENSOR_PER_LAYER_PROJ_NORM, "per_layer_proj_norm" },492 { LLM_TENSOR_ALTUP_UNEMBD_PROJ, "altup_unembd_proj" },493 { LLM_TENSOR_ALTUP_PROJ, "altup_proj" },494 { LLM_TENSOR_PER_LAYER_INP_GATE, "blk.%d.inp_gate" },495 { LLM_TENSOR_PER_LAYER_PROJ, "blk.%d.proj" },496 { LLM_TENSOR_PER_LAYER_POST_NORM, "blk.%d.post_norm" },497 { LLM_TENSOR_ALTUP_CORRECT_COEF, "blk.%d.altup_correct_coef" },498 { LLM_TENSOR_ALTUP_CORRECT_SCALE, "blk.%d.altup_correct_scale" },499 { LLM_TENSOR_ALTUP_PREDICT_COEF, "blk.%d.altup_predict_coef" },500 { LLM_TENSOR_ALTUP_ROUTER, "blk.%d.altup_router" },501 { LLM_TENSOR_ALTUP_ROUTER_NORM, "blk.%d.altup_router_norm" },502 { LLM_TENSOR_LAUREL_L, "blk.%d.laurel_l" },503 { LLM_TENSOR_LAUREL_R, "blk.%d.laurel_r" },504 { LLM_TENSOR_LAUREL_POST_NORM, "blk.%d.laurel_post_norm" },505 { LLM_TENSOR_DENSE_2_OUT, "dense_2" },506 { LLM_TENSOR_DENSE_3_OUT, "dense_3" },507 { LLM_TENSOR_FFN_NORM_EXPS, "blk.%d.ffn_norm_exps" },508 { LLM_TENSOR_ATTN_K_B, "blk.%d.attn_k_b" },509 { LLM_TENSOR_ATTN_V_B, "blk.%d.attn_v_b" },510 { LLM_TENSOR_NEXTN_PROJ_PRE, "nextn.pre_projection" },511 { LLM_TENSOR_NEXTN_PROJ_POST, "nextn.post_projection" },512 { LLM_TENSOR_NEXTN_EH_PROJ, "blk.%d.nextn.eh_proj" },513 { LLM_TENSOR_NEXTN_EMBED_TOKENS, "blk.%d.nextn.embed_tokens" },514 { LLM_TENSOR_NEXTN_ENORM, "blk.%d.nextn.enorm" },515 { LLM_TENSOR_NEXTN_HNORM, "blk.%d.nextn.hnorm" },516 { LLM_TENSOR_NEXTN_SHARED_HEAD_HEAD, "blk.%d.nextn.shared_head_head" },517 { LLM_TENSOR_NEXTN_SHARED_HEAD_NORM, "blk.%d.nextn.shared_head_norm" },518 { LLM_TENSOR_ATTN_SUB_NORM, "blk.%d.attn_sub_norm" },519 { LLM_TENSOR_FFN_SUB_NORM, "blk.%d.ffn_sub_norm" },520 { LLM_TENSOR_DEC_OUTPUT_NORM, "dec.output_norm" },521 { LLM_TENSOR_DEC_ATTN_NORM, "dec.blk.%d.attn_norm" },522 { LLM_TENSOR_DEC_ATTN_Q, "dec.blk.%d.attn_q" },523 { LLM_TENSOR_DEC_ATTN_K, "dec.blk.%d.attn_k" },524 { LLM_TENSOR_DEC_ATTN_V, "dec.blk.%d.attn_v" },525 { LLM_TENSOR_DEC_ATTN_OUT, "dec.blk.%d.attn_o" },526 { LLM_TENSOR_DEC_ATTN_REL_B, "dec.blk.%d.attn_rel_b" },527 { LLM_TENSOR_DEC_CROSS_ATTN_NORM, "dec.blk.%d.cross_attn_norm" },528 { LLM_TENSOR_DEC_CROSS_ATTN_Q, "dec.blk.%d.cross_attn_q" },529 { LLM_TENSOR_DEC_CROSS_ATTN_K, "dec.blk.%d.cross_attn_k" },530 { LLM_TENSOR_DEC_CROSS_ATTN_V, "dec.blk.%d.cross_attn_v" },531 { LLM_TENSOR_DEC_CROSS_ATTN_OUT, "dec.blk.%d.cross_attn_o" },532 { LLM_TENSOR_DEC_CROSS_ATTN_REL_B, "dec.blk.%d.cross_attn_rel_b" },533 { LLM_TENSOR_DEC_FFN_NORM, "dec.blk.%d.ffn_norm" },534 { LLM_TENSOR_DEC_FFN_GATE, "dec.blk.%d.ffn_gate" },535 { LLM_TENSOR_DEC_FFN_DOWN, "dec.blk.%d.ffn_down" },536 { LLM_TENSOR_DEC_FFN_UP, "dec.blk.%d.ffn_up" },537 { LLM_TENSOR_ENC_ATTN_NORM, "enc.blk.%d.attn_norm" },538 { LLM_TENSOR_ENC_ATTN_Q, "enc.blk.%d.attn_q" },539 { LLM_TENSOR_ENC_ATTN_K, "enc.blk.%d.attn_k" },540 { LLM_TENSOR_ENC_ATTN_V, "enc.blk.%d.attn_v" },541 { LLM_TENSOR_ENC_ATTN_OUT, "enc.blk.%d.attn_o" },542 { LLM_TENSOR_ENC_ATTN_REL_B, "enc.blk.%d.attn_rel_b" },543 { LLM_TENSOR_ENC_FFN_NORM, "enc.blk.%d.ffn_norm" },544 { LLM_TENSOR_ENC_FFN_GATE, "enc.blk.%d.ffn_gate" },545 { LLM_TENSOR_ENC_FFN_DOWN, "enc.blk.%d.ffn_down" },546 { LLM_TENSOR_ENC_FFN_UP, "enc.blk.%d.ffn_up" },547 { LLM_TENSOR_TIME_MIX_W1, "blk.%d.time_mix_w1" },548 { LLM_TENSOR_TIME_MIX_W2, "blk.%d.time_mix_w2" },549 { LLM_TENSOR_TIME_MIX_LERP_X, "blk.%d.time_mix_lerp_x" },550 { LLM_TENSOR_TIME_MIX_LERP_W, "blk.%d.time_mix_lerp_w" },551 { LLM_TENSOR_TIME_MIX_LERP_K, "blk.%d.time_mix_lerp_k" },552 { LLM_TENSOR_TIME_MIX_LERP_V, "blk.%d.time_mix_lerp_v" },553 { LLM_TENSOR_TIME_MIX_LERP_R, "blk.%d.time_mix_lerp_r" },554 { LLM_TENSOR_TIME_MIX_LERP_G, "blk.%d.time_mix_lerp_g" },555 { LLM_TENSOR_TIME_MIX_LERP_FUSED, "blk.%d.time_mix_lerp_fused" },556 { LLM_TENSOR_TIME_MIX_FIRST, "blk.%d.time_mix_first" },557 { LLM_TENSOR_TIME_MIX_DECAY, "blk.%d.time_mix_decay" },558 { LLM_TENSOR_TIME_MIX_DECAY_W1, "blk.%d.time_mix_decay_w1" },559 { LLM_TENSOR_TIME_MIX_DECAY_W2, "blk.%d.time_mix_decay_w2" },560 { LLM_TENSOR_TIME_MIX_KEY, "blk.%d.time_mix_key" },561 { LLM_TENSOR_TIME_MIX_VALUE, "blk.%d.time_mix_value" },562 { LLM_TENSOR_TIME_MIX_RECEPTANCE, "blk.%d.time_mix_receptance" },563 { LLM_TENSOR_TIME_MIX_GATE, "blk.%d.time_mix_gate" },564 { LLM_TENSOR_TIME_MIX_LN, "blk.%d.time_mix_ln" },565 { LLM_TENSOR_TIME_MIX_OUTPUT, "blk.%d.time_mix_output" },566 { LLM_TENSOR_CHANNEL_MIX_LERP_K, "blk.%d.channel_mix_lerp_k" },567 { LLM_TENSOR_CHANNEL_MIX_LERP_R, "blk.%d.channel_mix_lerp_r" },568 { LLM_TENSOR_CHANNEL_MIX_KEY, "blk.%d.channel_mix_key" },569 { LLM_TENSOR_CHANNEL_MIX_VALUE, "blk.%d.channel_mix_value" },570 { LLM_TENSOR_CHANNEL_MIX_RECEPTANCE, "blk.%d.channel_mix_receptance" },571 { LLM_TENSOR_TIME_MIX_W0, "blk.%d.time_mix_w0" },572 { LLM_TENSOR_TIME_MIX_A0, "blk.%d.time_mix_a0" },573 { LLM_TENSOR_TIME_MIX_A1, "blk.%d.time_mix_a1" },574 { LLM_TENSOR_TIME_MIX_A2, "blk.%d.time_mix_a2" },575 { LLM_TENSOR_TIME_MIX_V0, "blk.%d.time_mix_v0" },576 { LLM_TENSOR_TIME_MIX_V1, "blk.%d.time_mix_v1" },577 { LLM_TENSOR_TIME_MIX_V2, "blk.%d.time_mix_v2" },578 { LLM_TENSOR_TIME_MIX_G1, "blk.%d.time_mix_g1" },579 { LLM_TENSOR_TIME_MIX_G2, "blk.%d.time_mix_g2" },580 { LLM_TENSOR_TIME_MIX_K_K, "blk.%d.time_mix_k_k" },581 { LLM_TENSOR_TIME_MIX_K_A, "blk.%d.time_mix_k_a" },582 { LLM_TENSOR_TIME_MIX_R_K, "blk.%d.time_mix_r_k" },583 { LLM_TENSOR_CONV1D, "conv1d" },584 { LLM_TENSOR_CONVNEXT_DW, "convnext.%d.dw" },585 { LLM_TENSOR_CONVNEXT_NORM, "convnext.%d.norm" },586 { LLM_TENSOR_CONVNEXT_PW1, "convnext.%d.pw1" },587 { LLM_TENSOR_CONVNEXT_PW2, "convnext.%d.pw2" },588 { LLM_TENSOR_CONVNEXT_GAMMA, "convnext.%d.gamma" },589 { LLM_TENSOR_POS_NET_CONV1, "posnet.%d.conv1" },590 { LLM_TENSOR_POS_NET_CONV2, "posnet.%d.conv2" },591 { LLM_TENSOR_POS_NET_NORM, "posnet.%d.norm" },592 { LLM_TENSOR_POS_NET_NORM1, "posnet.%d.norm1" },593 { LLM_TENSOR_POS_NET_NORM2, "posnet.%d.norm2" },594 { LLM_TENSOR_POS_NET_ATTN_NORM, "posnet.%d.attn_norm" },595 { LLM_TENSOR_POS_NET_ATTN_Q, "posnet.%d.attn_q" },596 { LLM_TENSOR_POS_NET_ATTN_K, "posnet.%d.attn_k" },597 { LLM_TENSOR_POS_NET_ATTN_V, "posnet.%d.attn_v" },598 { LLM_TENSOR_POS_NET_ATTN_OUT, "posnet.%d.attn_output" },599 { LLM_TENSOR_ATTN_SINKS, "blk.%d.attn_sinks" },600 { LLM_TENSOR_SHORTCONV_CONV, "blk.%d.shortconv.conv" },601 { LLM_TENSOR_SHORTCONV_INPROJ, "blk.%d.shortconv.in_proj" },602 { LLM_TENSOR_SHORTCONV_OUTPROJ, "blk.%d.shortconv.out_proj" },603 { LLM_TENSOR_FFN_GATE_CHEXPS, "blk.%d.ffn_gate_chexps" },604 { LLM_TENSOR_FFN_DOWN_CHEXPS, "blk.%d.ffn_down_chexps" },605 { LLM_TENSOR_FFN_UP_CHEXPS, "blk.%d.ffn_up_chexps" },606 { LLM_TENSOR_VISEXP_ATTN_QKV, "blk.%d.vis_attn_qkv" },607 { LLM_TENSOR_VISEXP_ATTN_OUT, "blk.%d.vis_attn_output" },608 { LLM_TENSOR_VISEXP_FFN_GATE, "blk.%d.vis_gate" },609 { LLM_TENSOR_VISEXP_FFN_DOWN, "blk.%d.vis_down" },610 { LLM_TENSOR_VISEXP_FFN_UP, "blk.%d.vis_up" },611 { LLM_TENSOR_INDEXER_K_NORM, "blk.%d.indexer.k_norm" },612 { LLM_TENSOR_INDEXER_PROJ, "blk.%d.indexer.proj" },613 { LLM_TENSOR_INDEXER_ATTN_K, "blk.%d.indexer.attn_k" },614 { LLM_TENSOR_INDEXER_ATTN_Q_B, "blk.%d.indexer.attn_q_b" },615 { LLM_TENSOR_INDEXER_Q_PROJ, "blk.%d.indexer.q_proj" },616 { LLM_TENSOR_INDEXER_K_PROJ, "blk.%d.indexer.k_proj" },617 { LLM_TENSOR_INDEXER_Q_NORM, "blk.%d.indexer.q_norm" },618 { LLM_TENSOR_INDEXER_COMPRESSOR_WKV, "blk.%d.indexer_compressor_kv" },619 { LLM_TENSOR_INDEXER_COMPRESSOR_WGATE, "blk.%d.indexer_compressor_gate" },620 { LLM_TENSOR_INDEXER_COMPRESSOR_APE, "blk.%d.indexer_compressor_ape" },621 { LLM_TENSOR_INDEXER_COMPRESSOR_NORM, "blk.%d.indexer_compressor_norm" },622 { LLM_TENSOR_FFN_GATE_TID2EID, "blk.%d.ffn_gate_tid2eid" },623 { LLM_TENSOR_MASKED_EMBD_CENTROIDS, "masked_embd_centroids" },624 { LLM_TENSOR_MASKED_EMBD_ORDERING, "masked_embd_ordering" },625 { LLM_TENSOR_FC, "fc" },626 { LLM_TENSOR_D2T, "d2t" },627 { LLM_TENSOR_DSPARK_MARKOV_W1, "markov_w1" },628 { LLM_TENSOR_DSPARK_MARKOV_W2, "markov_w2" },629 { LLM_TENSOR_DSPARK_CONF_PROJ, "conf_proj" },630};631 632// declare information about the model weight tensors:633// - the layer in which the tensor is going to be used. this is needed in order to assign the correct buffer type for the weight634// - the operator which is going to use the weight. this is needed to determine if the respective backend supports the operator635//636// for example, input layers are usually assigned to CPU/host buffer types637//638// a mismatch between the declared information and the actual layer/op in which the tensor is used can lead to sub-optimal639// assignment of the buffer types and extra overhead during computation640// example: https://github.com/ggml-org/llama.cpp/pull/17548641//642static const std::map<llm_tensor, llm_tensor_info> LLM_TENSOR_INFOS = {643 {LLM_TENSOR_TOKEN_EMBD, {LLM_TENSOR_LAYER_INPUT, GGML_OP_GET_ROWS}},644 {LLM_TENSOR_POS_EMBD, {LLM_TENSOR_LAYER_INPUT, GGML_OP_GET_ROWS}},645 {LLM_TENSOR_TOKEN_TYPES, {LLM_TENSOR_LAYER_INPUT, GGML_OP_GET_ROWS}},646 {LLM_TENSOR_TOKEN_EMBD_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}}, // do the norms on the first layer (not the input layer)647 {LLM_TENSOR_OUTPUT, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},648 {LLM_TENSOR_CLS, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},649 {LLM_TENSOR_CLS_OUT, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},650 {LLM_TENSOR_CLS_NORM, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},651 {LLM_TENSOR_DENSE_2_OUT, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}}, // Dense layer output652 {LLM_TENSOR_DENSE_3_OUT, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}}, // Dense layer output653 {LLM_TENSOR_OUTPUT_NORM, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},654 {LLM_TENSOR_OUTPUT_NORM_LFM2, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},655 {LLM_TENSOR_DEC_OUTPUT_NORM, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},656 {LLM_TENSOR_ENC_OUTPUT_NORM, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},657 {LLM_TENSOR_ROPE_FREQS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ROPE}},658 {LLM_TENSOR_ROPE_FACTORS_LONG, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ROPE}},659 {LLM_TENSOR_ROPE_FACTORS_SHORT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ROPE}},660 {LLM_TENSOR_ATTN_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},661 {LLM_TENSOR_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},662 {LLM_TENSOR_ATTN_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},663 {LLM_TENSOR_ATTN_QKV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},664 {LLM_TENSOR_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},665 {LLM_TENSOR_ATTN_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},666 {LLM_TENSOR_FFN_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},667 {LLM_TENSOR_FFN_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},668 {LLM_TENSOR_FFN_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},669 {LLM_TENSOR_FFN_DOWN_SHEXP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},670 {LLM_TENSOR_FFN_GATE_SHEXP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},671 {LLM_TENSOR_FFN_UP_SHEXP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},672 {LLM_TENSOR_ATTN_Q_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},673 {LLM_TENSOR_ATTN_Q_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},674 {LLM_TENSOR_ATTN_KV_A_MQA, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},675 {LLM_TENSOR_ATTN_KV_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},676 {LLM_TENSOR_ATTN_KV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},677 {LLM_TENSOR_ATTN_KV_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},678 {LLM_TENSOR_ATTN_OUT_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},679 {LLM_TENSOR_ATTN_OUT_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},680 {LLM_TENSOR_HC_HEAD_FN, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},681 {LLM_TENSOR_HC_HEAD_BASE, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_ADD}},682 {LLM_TENSOR_HC_HEAD_SCALE, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL}},683 {LLM_TENSOR_HC_ATTN_FN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},684 {LLM_TENSOR_HC_ATTN_BASE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},685 {LLM_TENSOR_HC_ATTN_SCALE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},686 {LLM_TENSOR_HC_FFN_FN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},687 {LLM_TENSOR_HC_FFN_BASE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},688 {LLM_TENSOR_HC_FFN_SCALE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},689 {LLM_TENSOR_ATTN_COMPRESSOR_WKV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},690 {LLM_TENSOR_ATTN_COMPRESSOR_WGATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},691 {LLM_TENSOR_ATTN_COMPRESSOR_APE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},692 {LLM_TENSOR_ATTN_COMPRESSOR_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},693 {LLM_TENSOR_ATTN_K_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},694 {LLM_TENSOR_ATTN_V_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},695 {LLM_TENSOR_ATTN_SINKS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_SCALE}},696 {LLM_TENSOR_DEC_ATTN_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},697 {LLM_TENSOR_DEC_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},698 {LLM_TENSOR_DEC_ATTN_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},699 {LLM_TENSOR_DEC_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},700 {LLM_TENSOR_DEC_CROSS_ATTN_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},701 {LLM_TENSOR_DEC_CROSS_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},702 {LLM_TENSOR_DEC_CROSS_ATTN_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},703 {LLM_TENSOR_DEC_CROSS_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},704 {LLM_TENSOR_DEC_FFN_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},705 {LLM_TENSOR_DEC_FFN_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},706 {LLM_TENSOR_DEC_FFN_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},707 {LLM_TENSOR_ENC_ATTN_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},708 {LLM_TENSOR_ENC_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},709 {LLM_TENSOR_ENC_ATTN_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},710 {LLM_TENSOR_ENC_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},711 {LLM_TENSOR_ENC_FFN_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},712 {LLM_TENSOR_ENC_FFN_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},713 {LLM_TENSOR_ENC_FFN_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},714 {LLM_TENSOR_FFN_GATE_INP_SHEXP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},715 {LLM_TENSOR_FFN_GATE_INP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},716 {LLM_TENSOR_SSM_IN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},717 {LLM_TENSOR_SSM_X, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},718 {LLM_TENSOR_SSM_DT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},719 {LLM_TENSOR_SSM_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},720 {LLM_TENSOR_SSM_ALPHA, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},721 {LLM_TENSOR_SSM_BETA_ALPHA, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},722 {LLM_TENSOR_TIME_MIX_W1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},723 {LLM_TENSOR_TIME_MIX_W2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},724 {LLM_TENSOR_TIME_MIX_A1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},725 {LLM_TENSOR_TIME_MIX_A2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},726 {LLM_TENSOR_TIME_MIX_V1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},727 {LLM_TENSOR_TIME_MIX_V2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},728 {LLM_TENSOR_TIME_MIX_G1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},729 {LLM_TENSOR_TIME_MIX_G2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},730 {LLM_TENSOR_TIME_MIX_DECAY_W1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},731 {LLM_TENSOR_TIME_MIX_DECAY_W2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},732 {LLM_TENSOR_TIME_MIX_KEY, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},733 {LLM_TENSOR_TIME_MIX_VALUE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},734 {LLM_TENSOR_TIME_MIX_RECEPTANCE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},735 {LLM_TENSOR_TIME_MIX_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},736 {LLM_TENSOR_TIME_MIX_OUTPUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},737 {LLM_TENSOR_CHANNEL_MIX_KEY, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},738 {LLM_TENSOR_CHANNEL_MIX_RECEPTANCE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},739 {LLM_TENSOR_CHANNEL_MIX_VALUE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},740 {LLM_TENSOR_FFN_ACT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_DIV}},741 {LLM_TENSOR_SSM_CONV1D, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_SSM_CONV}},742 {LLM_TENSOR_SSM_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_SSM_SCAN}},743 {LLM_TENSOR_SSM_A_NOSCAN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}}, // a version of SSM_A used for MUL instead of SSM_SCAN744 {LLM_TENSOR_SSM_DT_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},745 {LLM_TENSOR_SSM_B_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},746 {LLM_TENSOR_SSM_C_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},747 {LLM_TENSOR_SSM_D, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},748 {LLM_TENSOR_SSM_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},749 // Kimi KDA - Conv tensors are 4D [d_conv, 1, d_inner, 1], reshaped to 2D at runtime750 {LLM_TENSOR_SSM_CONV1D_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},751 {LLM_TENSOR_SSM_CONV1D_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},752 {LLM_TENSOR_SSM_CONV1D_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},753 {LLM_TENSOR_SSM_F_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},754 {LLM_TENSOR_SSM_F_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},755 {LLM_TENSOR_SSM_BETA, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},756 {LLM_TENSOR_SSM_G_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},757 {LLM_TENSOR_SSM_G_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},758 {LLM_TENSOR_TIME_MIX_LERP_X, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},759 {LLM_TENSOR_TIME_MIX_LN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},760 {LLM_TENSOR_CHANNEL_MIX_LERP_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},761 {LLM_TENSOR_CHANNEL_MIX_LERP_R, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},762 {LLM_TENSOR_TIME_MIX_K_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},763 {LLM_TENSOR_TIME_MIX_K_A, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},764 {LLM_TENSOR_TIME_MIX_R_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},765 {LLM_TENSOR_TIME_MIX_LERP_W, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},766 {LLM_TENSOR_TIME_MIX_LERP_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},767 {LLM_TENSOR_TIME_MIX_LERP_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},768 {LLM_TENSOR_TIME_MIX_LERP_R, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},769 {LLM_TENSOR_TIME_MIX_LERP_G, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},770 {LLM_TENSOR_TIME_MIX_LERP_FUSED, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},771 {LLM_TENSOR_TIME_MIX_DECAY, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},772 {LLM_TENSOR_TIME_MIX_W0, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},773 {LLM_TENSOR_TIME_MIX_A0, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},774 {LLM_TENSOR_TIME_MIX_V0, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},775 {LLM_TENSOR_TIME_MIX_FIRST, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_RWKV_WKV6}},776 {LLM_TENSOR_ATTN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},777 {LLM_TENSOR_ATTN_NORM_2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},778 {LLM_TENSOR_ATTN_OUT_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},779 {LLM_TENSOR_ATTN_POST_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},780 {LLM_TENSOR_FFN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},781 {LLM_TENSOR_FFN_PRE_NORM_2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},782 {LLM_TENSOR_FFN_POST_NORM_1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},783 {LLM_TENSOR_FFN_POST_NORM_2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},784 {LLM_TENSOR_FFN_POST_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},785 {LLM_TENSOR_FFN_NORM_EXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},786 {LLM_TENSOR_ATTN_Q_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},787 {LLM_TENSOR_ATTN_K_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},788 {LLM_TENSOR_LAYER_OUT_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},789 {LLM_TENSOR_LAYER_OUT_SCALE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},790 {LLM_TENSOR_ATTN_Q_A_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},791 {LLM_TENSOR_ATTN_KV_A_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},792 {LLM_TENSOR_ATTN_SUB_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},793 {LLM_TENSOR_FFN_SUB_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},794 {LLM_TENSOR_DEC_ATTN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},795 {LLM_TENSOR_DEC_CROSS_ATTN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},796 {LLM_TENSOR_DEC_FFN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},797 {LLM_TENSOR_ENC_ATTN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},798 {LLM_TENSOR_ENC_FFN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},799 {LLM_TENSOR_DEC_ATTN_REL_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},800 {LLM_TENSOR_ENC_ATTN_REL_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},801 {LLM_TENSOR_FFN_DOWN_EXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},802 {LLM_TENSOR_FFN_GATE_EXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},803 {LLM_TENSOR_FFN_UP_EXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},804 {LLM_TENSOR_FFN_GATE_UP_EXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},805 {LLM_TENSOR_FFN_DOWN_CHEXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},806 {LLM_TENSOR_FFN_GATE_CHEXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},807 {LLM_TENSOR_FFN_UP_CHEXPS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT_ID}},808 {LLM_TENSOR_FFN_EXP_PROBS_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_ADD}},809 // altup / laurel (gemma 3n)810 {LLM_TENSOR_PER_LAYER_TOKEN_EMBD, {LLM_TENSOR_LAYER_INPUT, GGML_OP_GET_ROWS}},811 {LLM_TENSOR_PER_LAYER_MODEL_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},812 {LLM_TENSOR_PER_LAYER_PROJ_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},813 {LLM_TENSOR_ALTUP_PROJ, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},814 {LLM_TENSOR_ALTUP_UNEMBD_PROJ, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},815 {LLM_TENSOR_PER_LAYER_INP_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},816 {LLM_TENSOR_PER_LAYER_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},817 {LLM_TENSOR_PER_LAYER_POST_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},818 {LLM_TENSOR_ALTUP_CORRECT_COEF, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},819 {LLM_TENSOR_ALTUP_CORRECT_SCALE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},820 {LLM_TENSOR_ALTUP_PREDICT_COEF, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},821 {LLM_TENSOR_ALTUP_ROUTER, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},822 {LLM_TENSOR_ALTUP_ROUTER_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},823 {LLM_TENSOR_LAUREL_L, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},824 {LLM_TENSOR_LAUREL_R, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},825 {LLM_TENSOR_LAUREL_POST_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},826 // this tensor is loaded for T5, but never used827 {LLM_TENSOR_DEC_CROSS_ATTN_REL_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_NONE}},828 {LLM_TENSOR_CONV1D, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_IM2COL}},829 {LLM_TENSOR_POS_NET_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},830 {LLM_TENSOR_POS_NET_NORM1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},831 {LLM_TENSOR_POS_NET_NORM2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},832 {LLM_TENSOR_POS_NET_CONV1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_IM2COL}},833 {LLM_TENSOR_POS_NET_CONV2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_IM2COL}},834 {LLM_TENSOR_POS_NET_ATTN_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},835 {LLM_TENSOR_POS_NET_ATTN_Q, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},836 {LLM_TENSOR_POS_NET_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},837 {LLM_TENSOR_POS_NET_ATTN_V, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},838 {LLM_TENSOR_POS_NET_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},839 {LLM_TENSOR_CONVNEXT_DW, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_IM2COL}},840 {LLM_TENSOR_CONVNEXT_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},841 {LLM_TENSOR_CONVNEXT_PW1, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},842 {LLM_TENSOR_CONVNEXT_PW2, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},843 {LLM_TENSOR_CONVNEXT_GAMMA, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},844 {LLM_TENSOR_SHORTCONV_CONV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_SSM_CONV}},845 {LLM_TENSOR_SHORTCONV_INPROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},846 {LLM_TENSOR_SHORTCONV_OUTPROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},847 {LLM_TENSOR_VISEXP_ATTN_QKV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},848 {LLM_TENSOR_VISEXP_ATTN_OUT, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},849 {LLM_TENSOR_VISEXP_FFN_GATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},850 {LLM_TENSOR_VISEXP_FFN_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},851 {LLM_TENSOR_VISEXP_FFN_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},852 {LLM_TENSOR_INDEXER_K_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},853 {LLM_TENSOR_INDEXER_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},854 {LLM_TENSOR_INDEXER_ATTN_K, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},855 {LLM_TENSOR_INDEXER_ATTN_Q_B, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},856 {LLM_TENSOR_INDEXER_Q_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},857 {LLM_TENSOR_INDEXER_K_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},858 {LLM_TENSOR_INDEXER_Q_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},859 {LLM_TENSOR_INDEXER_COMPRESSOR_WKV, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},860 {LLM_TENSOR_INDEXER_COMPRESSOR_WGATE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},861 {LLM_TENSOR_INDEXER_COMPRESSOR_APE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},862 {LLM_TENSOR_INDEXER_COMPRESSOR_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},863 {LLM_TENSOR_FFN_GATE_TID2EID, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},864 {LLM_TENSOR_NEXTN_PROJ_PRE, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},865 {LLM_TENSOR_NEXTN_PROJ_POST, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},866 // NextN/MTP tensors are stored per-block (blk.%d.nextn.*) even though only the867 // last nextn_predict_layers blocks carry them. Classify as LAYER_REPEATING so868 // the model loader doesn't fault on the block index.869 {LLM_TENSOR_NEXTN_EH_PROJ, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},870 {LLM_TENSOR_NEXTN_EMBED_TOKENS, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_GET_ROWS}},871 {LLM_TENSOR_NEXTN_ENORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},872 {LLM_TENSOR_NEXTN_HNORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},873 {LLM_TENSOR_NEXTN_SHARED_HEAD_HEAD, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},874 {LLM_TENSOR_NEXTN_SHARED_HEAD_NORM, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL}},875 // Nemotron 3 Super876 // latent projections feed ggml_mul_mat, the buft probe must use MUL_MAT to keep them on GPU877 {LLM_TENSOR_FFN_LATENT_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},878 {LLM_TENSOR_FFN_LATENT_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}},879 {LLM_TENSOR_MASKED_EMBD_CENTROIDS, {LLM_TENSOR_LAYER_INPUT, GGML_OP_NONE}},880 {LLM_TENSOR_MASKED_EMBD_ORDERING, {LLM_TENSOR_LAYER_INPUT, GGML_OP_NONE}},881 // eagle3882 {LLM_TENSOR_FC, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},883 {LLM_TENSOR_D2T, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_GET_ROWS}},884 // dspark885 {LLM_TENSOR_DSPARK_MARKOV_W1, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_GET_ROWS}},886 {LLM_TENSOR_DSPARK_MARKOV_W2, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},887 {LLM_TENSOR_DSPARK_CONF_PROJ, {LLM_TENSOR_LAYER_OUTPUT, GGML_OP_MUL_MAT}},888};889 890LLM_KV::LLM_KV(llm_arch arch, const char * suffix) : arch(arch), suffix(suffix) {}891 892std::string LLM_KV::operator()(llm_kv kv) const {893 std::string name = ::format(LLM_KV_NAMES.at(kv), LLM_ARCH_NAMES.at(arch));894 895 if (suffix != nullptr) {896 name += ".";897 name += suffix;898 }899 900 return name;901}902 903LLM_TN_IMPL::LLM_TN_IMPL(llm_arch arch, llm_tensor tensor, const char * suffix, int bid, int xid)904 : arch(arch), tensor(tensor), suffix(suffix), bid(bid), xid(xid) {}905 906std::string LLM_TN_IMPL::str() const {907 if (LLM_TENSOR_NAMES.find(tensor) == LLM_TENSOR_NAMES.end()) {908 GGML_ABORT("unknown tensor name for tensor id %d", static_cast<int>(tensor));909 }910 911 std::string name = ::format(LLM_TENSOR_NAMES.at(tensor), bid, xid);912 if (suffix != nullptr) {913 name += ".";914 name += suffix;915 }916 917 return name;918}919 920std::vector<llm_arch> llm_arch_all() {921 std::vector<llm_arch> ret;922 ret.reserve(LLM_ARCH_NAMES.size());923 for (const auto & [arch, _] : LLM_ARCH_NAMES) {924 ret.push_back(arch);925 }926 return ret;927}928 929const char * llm_arch_name(llm_arch arch) {930 auto it = LLM_ARCH_NAMES.find(arch);931 if (it == LLM_ARCH_NAMES.end()) {932 return "unknown";933 }934 return it->second;935}936 937llm_arch llm_arch_from_string(const std::string & name) {938 for (const auto & kv : LLM_ARCH_NAMES) { // NOLINT939 if (kv.second == name) {940 return kv.first;941 }942 }943 944 return LLM_ARCH_UNKNOWN;945}946 947const llm_tensor_info & llm_tensor_info_for(llm_tensor tensor) {948 return LLM_TENSOR_INFOS.at(tensor);949}950 951bool llm_arch_is_recurrent(const llm_arch & arch) {952 switch (arch) {953 case LLM_ARCH_MAMBA:954 case LLM_ARCH_MAMBA2:955 case LLM_ARCH_RWKV6:956 case LLM_ARCH_RWKV6QWEN2:957 case LLM_ARCH_RWKV7:958 case LLM_ARCH_ARWKV7:959 return true;960 default:961 return false;962 }963}964 965bool llm_arch_is_hybrid(const llm_arch & arch) {966 switch (arch) {967 case LLM_ARCH_JAMBA:968 case LLM_ARCH_FALCON_H1:969 case LLM_ARCH_PLAMO2:970 case LLM_ARCH_GRANITE_HYBRID:971 case LLM_ARCH_LFM2:972 case LLM_ARCH_LFM2MOE:973 case LLM_ARCH_NEMOTRON_H:974 case LLM_ARCH_NEMOTRON_H_MOE:975 case LLM_ARCH_QWEN3NEXT:976 case LLM_ARCH_KIMI_LINEAR:977 case LLM_ARCH_QWEN35:978 case LLM_ARCH_QWEN35MOE:979 case LLM_ARCH_DEEPSEEK4:980 return true;981 default:982 return false;983 }984}985 986bool llm_arch_is_diffusion(const llm_arch & arch) {987 switch (arch) {988 case LLM_ARCH_DREAM:989 case LLM_ARCH_LLADA:990 case LLM_ARCH_LLADA_MOE:991 case LLM_ARCH_RND1:992 return true;993 default:994 return false;995 }996}997 998bool llm_arch_supports_rs_rollback(const llm_arch & arch) {999 switch (arch) {1000 case LLM_ARCH_QWEN35:1001 case LLM_ARCH_QWEN35MOE:1002 case LLM_ARCH_DEEPSEEK4:1003 return true;1004 default:1005 return false;1006 }1007}1008 1009bool llm_arch_supports_sm_tensor(const llm_arch & arch) {1010 switch (arch) {1011 case LLM_ARCH_GROK:1012 case LLM_ARCH_MPT:1013 case LLM_ARCH_PLAMO2:1014 case LLM_ARCH_MINICPM3:1015 case LLM_ARCH_GEMMA3N:1016 case LLM_ARCH_MAMBA:1017 case LLM_ARCH_MAMBA2:1018 case LLM_ARCH_JAMBA:1019 case LLM_ARCH_FALCON_H1:1020 case LLM_ARCH_OLMO2:1021 case LLM_ARCH_OLMOE:1022 case LLM_ARCH_DEEPSEEK2:1023 case LLM_ARCH_DEEPSEEK32:1024 case LLM_ARCH_DEEPSEEK4:1025 case LLM_ARCH_GLM_DSA:1026 case LLM_ARCH_BITNET:1027 case LLM_ARCH_T5:1028 case LLM_ARCH_NEMOTRON_H:1029 case LLM_ARCH_NEMOTRON_H_MOE:1030 case LLM_ARCH_GRANITE_HYBRID:1031 case LLM_ARCH_LFM2:1032 case LLM_ARCH_LFM2MOE:1033 case LLM_ARCH_MINIMAX_M2:1034 case LLM_ARCH_MINIMAX_M3:1035 case LLM_ARCH_MISTRAL4:1036 case LLM_ARCH_KIMI_LINEAR:1037 case LLM_ARCH_QWEN3TTS:1038 return false;1039 default:1040 return true;1041 }1042}1043 