| 594 | } |
| 595 | |
| 596 | void save_opt_context_gguf(struct gguf_context * fctx, struct ggml_opt_context * opt) { |
| 597 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_FILE_VERSION, 0); |
| 598 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_CONVERGENCE_PAST_COUNT, opt->params.past); |
| 599 | gguf_set_val_u64(fctx, LLM_KV_OPTIMIZER_PARAMETER_COUNT, (uint64_t) opt->nx); |
| 600 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_ITERATION_COUNT, opt->iter); |
| 601 | gguf_set_val_bool(fctx, LLM_KV_OPTIMIZER_JUST_INITIALIZED, opt->just_initialized); |
| 602 | |
| 603 | switch (opt->params.type) { |
| 604 | case GGML_OPT_ADAM: |
| 605 | { |
| 606 | gguf_set_val_str(fctx, LLM_KV_OPTIMIZER_TYPE, LLM_KV_OPTIMIZER_TYPE_ADAM); |
| 607 | gguf_set_val_f32(fctx, LLM_KV_OPTIMIZER_ADAM_BEST_LOSS, opt->adam.fx_best); |
| 608 | gguf_set_val_f32(fctx, LLM_KV_OPTIMIZER_ADAM_PREVIOUS_LOSS, opt->adam.fx_prev); |
| 609 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_ADAM_NO_IMPROVEMENT_COUNT, opt->adam.n_no_improvement); |
| 610 | |
| 611 | ggml_set_name(opt->adam.m, LLM_TENSOR_OPTIMIZER_ADAM_FIRST_MOMENTS); |
| 612 | ggml_set_name(opt->adam.v, LLM_TENSOR_OPTIMIZER_ADAM_SECOND_MOMENTS); |
| 613 | if (opt->adam.pf) { |
| 614 | ggml_set_name(opt->adam.pf, LLM_TENSOR_OPTIMIZER_ADAM_PAST_LOSS_VALUES); |
| 615 | } |
| 616 | |
| 617 | gguf_add_tensor(fctx, opt->adam.m); |
| 618 | gguf_add_tensor(fctx, opt->adam.v); |
| 619 | if (opt->adam.pf) { |
| 620 | gguf_add_tensor(fctx, opt->adam.pf); |
| 621 | } |
| 622 | } break; |
| 623 | case GGML_OPT_LBFGS: |
| 624 | { |
| 625 | gguf_set_val_str(fctx, LLM_KV_OPTIMIZER_TYPE, LLM_KV_OPTIMIZER_TYPE_LBFGS); |
| 626 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_LBFGS_APPROX_HESSIAN_COUNT, opt->params.lbfgs.m); |
| 627 | gguf_set_val_f32(fctx, LLM_KV_OPTIMIZER_LBFGS_BEST_LOSS, opt->lbfgs.fx_best); |
| 628 | gguf_set_val_f32(fctx, LLM_KV_OPTIMIZER_LBFGS_LINE_SEARCH_STEP, opt->lbfgs.step); |
| 629 | gguf_set_val_i32(fctx, LLM_KV_OPTIMIZER_LBFGS_LINE_SEARCH_J, opt->lbfgs.j); |
| 630 | gguf_set_val_i32(fctx, LLM_KV_OPTIMIZER_LBFGS_LINE_SEARCH_K, opt->lbfgs.k); |
| 631 | gguf_set_val_i32(fctx, LLM_KV_OPTIMIZER_LBFGS_LINE_SEARCH_END, opt->lbfgs.end); |
| 632 | gguf_set_val_u32(fctx, LLM_KV_OPTIMIZER_LBFGS_NO_IMPROVEMENT_COUNT, opt->lbfgs.n_no_improvement); |
| 633 | |
| 634 | ggml_set_name(opt->lbfgs.x, LLM_TENSOR_OPTIMIZER_LBFGS_CURRENT_PARAMETERS); |
| 635 | ggml_set_name(opt->lbfgs.xp, LLM_TENSOR_OPTIMIZER_LBFGS_PREVIOUS_PARAMETERS); |
| 636 | ggml_set_name(opt->lbfgs.g, LLM_TENSOR_OPTIMIZER_LBFGS_CURRENT_GRADIENTS); |
| 637 | ggml_set_name(opt->lbfgs.gp, LLM_TENSOR_OPTIMIZER_LBFGS_PREVIOUS_GRADIENTS); |
| 638 | ggml_set_name(opt->lbfgs.d, LLM_TENSOR_OPTIMIZER_LBFGS_SEARCH_DIRECTION); |
| 639 | if (opt->lbfgs.pf) { |
| 640 | ggml_set_name(opt->lbfgs.pf, LLM_TENSOR_OPTIMIZER_LBFGS_PAST_LOSS_VALUES); |
| 641 | } |
| 642 | ggml_set_name(opt->lbfgs.lmal, LLM_TENSOR_OPTIMIZER_LBFGS_MEMORY_ALPHA); |
| 643 | ggml_set_name(opt->lbfgs.lmys, LLM_TENSOR_OPTIMIZER_LBFGS_MEMORY_YS); |
| 644 | ggml_set_name(opt->lbfgs.lms, LLM_TENSOR_OPTIMIZER_LBFGS_MEMORY_S); |
| 645 | ggml_set_name(opt->lbfgs.lmy, LLM_TENSOR_OPTIMIZER_LBFGS_MEMORY_Y); |
| 646 | |
| 647 | gguf_add_tensor(fctx, opt->lbfgs.x); |
| 648 | gguf_add_tensor(fctx, opt->lbfgs.xp); |
| 649 | gguf_add_tensor(fctx, opt->lbfgs.g); |
| 650 | gguf_add_tensor(fctx, opt->lbfgs.gp); |
| 651 | gguf_add_tensor(fctx, opt->lbfgs.d); |
| 652 | if (opt->lbfgs.pf) { |
| 653 | gguf_add_tensor(fctx, opt->lbfgs.pf); |
no test coverage detected