MCPcopy Create free account
hub / github.com/Tiiny-AI/PowerInfer / llm_load_hparams

Function llm_load_hparams

llama.cpp:2281–2467  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2279}
2280
2281static void llm_load_hparams(
2282 llama_model_loader & ml,
2283 llama_model & model) {
2284 struct gguf_context * ctx = ml.ctx_gguf;
2285
2286 const auto kv = LLM_KV(model.arch);
2287
2288 auto & hparams = model.hparams;
2289
2290 // get general kv
2291 GGUF_GET_KEY(ctx, model.name, gguf_get_val_str, GGUF_TYPE_STRING, false, kv(LLM_KV_GENERAL_NAME));
2292
2293 // get hparams kv
2294 GGUF_GET_KEY(ctx, hparams.n_vocab, gguf_get_arr_n, GGUF_TYPE_ARRAY, true, kv(LLM_KV_TOKENIZER_LIST));
2295 GGUF_GET_KEY(ctx, hparams.n_ctx_train, gguf_get_val_u32, GGUF_TYPE_UINT32, true, kv(LLM_KV_CONTEXT_LENGTH));
2296 GGUF_GET_KEY(ctx, hparams.n_embd, gguf_get_val_u32, GGUF_TYPE_UINT32, true, kv(LLM_KV_EMBEDDING_LENGTH));
2297 GGUF_GET_KEY(ctx, hparams.n_ff, gguf_get_val_u32, GGUF_TYPE_UINT32, true, kv(LLM_KV_FEED_FORWARD_LENGTH));
2298 GGUF_GET_KEY(ctx, hparams.n_head, gguf_get_val_u32, GGUF_TYPE_UINT32, true, kv(LLM_KV_ATTENTION_HEAD_COUNT));
2299 GGUF_GET_KEY(ctx, hparams.n_layer, gguf_get_val_u32, GGUF_TYPE_UINT32, true, kv(LLM_KV_BLOCK_COUNT));
2300
2301 // n_head_kv is optional, default to n_head
2302 hparams.n_head_kv = hparams.n_head;
2303 GGUF_GET_KEY(ctx, hparams.n_head_kv, gguf_get_val_u32, GGUF_TYPE_UINT32, false, kv(LLM_KV_ATTENTION_HEAD_COUNT_KV));
2304
2305 hparams.rope_finetuned = false;
2306 GGUF_GET_KEY(ctx, hparams.rope_finetuned, gguf_get_val_bool, GGUF_TYPE_BOOL, false,
2307 kv(LLM_KV_ROPE_SCALING_FINETUNED));
2308
2309 hparams.n_yarn_orig_ctx = hparams.n_ctx_train;
2310 GGUF_GET_KEY(ctx, hparams.n_yarn_orig_ctx, gguf_get_val_u32, GGUF_TYPE_UINT32, false,
2311 kv(LLM_KV_ROPE_SCALING_ORIG_CTX_LEN));
2312
2313 // rope_freq_base (optional)
2314 hparams.rope_freq_base_train = 10000.0f;
2315 GGUF_GET_KEY(ctx, hparams.rope_freq_base_train, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_FREQ_BASE));
2316
2317 std::string rope_scaling("linear");
2318 GGUF_GET_KEY(ctx, rope_scaling, gguf_get_val_str, GGUF_TYPE_STRING, false, kv(LLM_KV_ROPE_SCALING_TYPE));
2319 hparams.rope_scaling_type_train = llama_rope_scaling_type_from_string(rope_scaling);
2320 GGML_ASSERT(hparams.rope_scaling_type_train != LLAMA_ROPE_SCALING_UNSPECIFIED);
2321
2322 // rope_freq_scale (inverse of the kv) is optional
2323 float ropescale = 0.0f;
2324 GGUF_GET_KEY(ctx, ropescale, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_SCALING_FACTOR));
2325 if (ropescale == 0.0f) { // try the old key name
2326 GGUF_GET_KEY(ctx, ropescale, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_SCALE_LINEAR));
2327 }
2328 hparams.rope_freq_scale_train = ropescale == 0.0f ? 1.0f : 1.0f/ropescale;
2329
2330 // sanity check for n_rot (optional)
2331 {
2332 hparams.n_rot = hparams.n_embd / hparams.n_head;
2333
2334 GGUF_GET_KEY(ctx, hparams.n_rot, gguf_get_val_u32, GGUF_TYPE_UINT32, false, kv(LLM_KV_ROPE_DIMENSION_COUNT));
2335
2336 if (model.arch == LLM_ARCH_LLAMA || model.arch == LLM_ARCH_FALCON) {
2337 if (hparams.n_rot != hparams.n_embd / hparams.n_head) {
2338 throw std::runtime_error(format("invalid n_rot: %u, expected %u", hparams.n_rot, hparams.n_embd / hparams.n_head));

Callers 2

llama_model_loadFunction · 0.85

Calls 4

gguf_get_sparse_derivFunction · 0.85
LLM_KVClass · 0.70
formatFunction · 0.70

Tested by

no test coverage detected