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