| 455 | } |
| 456 | |
| 457 | void llama_model::load_hparams(llama_model_loader & ml) { |
| 458 | const gguf_context * ctx = ml.meta.get(); |
| 459 | |
| 460 | // get metadata as string |
| 461 | for (int i = 0; i < gguf_get_n_kv(ctx); i++) { |
| 462 | gguf_type type = gguf_get_kv_type(ctx, i); |
| 463 | if (type == GGUF_TYPE_ARRAY) { |
| 464 | continue; |
| 465 | } |
| 466 | const char * name = gguf_get_key(ctx, i); |
| 467 | const std::string value = gguf_kv_to_str(ctx, i); |
| 468 | gguf_kv.emplace(name, value); |
| 469 | } |
| 470 | |
| 471 | // get general kv |
| 472 | ml.get_key(LLM_KV_GENERAL_NAME, name, false); |
| 473 | |
| 474 | // everything past this point is not vocab-related |
| 475 | if (hparams.vocab_only) { |
| 476 | return; |
| 477 | } |
| 478 | |
| 479 | ml.get_key(LLM_KV_CONTEXT_LENGTH, hparams.n_ctx_train); |
| 480 | ml.get_key(LLM_KV_EMBEDDING_LENGTH, hparams.n_embd); |
| 481 | ml.get_key(LLM_KV_BLOCK_COUNT, hparams.n_layer); |
| 482 | ml.get_key(LLM_KV_EXPERT_COUNT, hparams.n_expert, false); |
| 483 | ml.get_key(LLM_KV_EXPERT_USED_COUNT, hparams.n_expert_used, false); |
| 484 | |
| 485 | if (arch == LLM_ARCH_WAVTOKENIZER_DEC) { |
| 486 | ml.get_key(LLM_KV_FEATURES_LENGTH, hparams.n_embd_features); |
| 487 | |
| 488 | ml.get_key(LLM_KV_POSNET_EMBEDDING_LENGTH, hparams.posnet.n_embd); |
| 489 | ml.get_key(LLM_KV_POSNET_BLOCK_COUNT, hparams.posnet.n_layer); |
| 490 | |
| 491 | ml.get_key(LLM_KV_CONVNEXT_EMBEDDING_LENGTH, hparams.convnext.n_embd); |
| 492 | ml.get_key(LLM_KV_CONVNEXT_BLOCK_COUNT, hparams.convnext.n_layer); |
| 493 | } |
| 494 | |
| 495 | GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS); |
| 496 | GGML_ASSERT(hparams.n_expert_used <= hparams.n_expert); |
| 497 | if (hparams.n_expert > 0) { |
| 498 | GGML_ASSERT(hparams.n_expert_used > 0); |
| 499 | } else { |
| 500 | GGML_ASSERT(hparams.n_expert_used == 0); |
| 501 | } |
| 502 | |
| 503 | std::fill(hparams.n_head_arr.begin(), hparams.n_head_arr.end(), 0); |
| 504 | std::fill(hparams.n_head_kv_arr.begin(), hparams.n_head_kv_arr.end(), 0); |
| 505 | std::fill(hparams.n_ff_arr.begin(), hparams.n_ff_arr.end(), 0); |
| 506 | |
| 507 | std::fill(hparams.rope_sections.begin(), hparams.rope_sections.end(), 0); |
| 508 | |
| 509 | std::fill(hparams.swa_layers.begin(), hparams.swa_layers.end(), 0); |
| 510 | |
| 511 | ml.get_key_or_arr(LLM_KV_FEED_FORWARD_LENGTH, hparams.n_ff_arr, hparams.n_layer, false); |
| 512 | ml.get_key_or_arr(LLM_KV_ATTENTION_HEAD_COUNT, hparams.n_head_arr, hparams.n_layer, false); |
| 513 | |
| 514 | // n_head_kv is optional, default to n_head |
no test coverage detected