echodict/llama.cpp
version https://git-lfs.github.com/spec/v1 oid sha256:cfc44b7ba25614df70e6b65e3341cae0310163bd32fd31a6b928a542df433faf size 30786
0773
1#include "arg.h"2#include "common.h"3#include "log.h"4#include "llama.h"5 6#include <clocale>7#include <cmath>8#include <cstdio>9#include <cstring>10#include <ctime>11#include <vector>12 13#if defined(_MSC_VER)14#pragma warning(disable: 4244 4267) // possible loss of data15#endif16 17int main(int argc, char ** argv) {18 std::setlocale(LC_NUMERIC, "C");19 20 common_params params;21 params.escape = false;22 23 common_init();24 25 if (!common_params_parse(argc, argv, params, LLAMA_EXAMPLE_FINETUNE)) {26 return 1;27 }28 29 if (params.use_mmap) {30 LOG_INF("%s: force disabling memory mapping because it would result in-read-only pointers to the weights\n",31 __func__);32 params.use_mmap = false;33 }34 if (params.cache_type_k != GGML_TYPE_F32) {35 LOG_INF("%s: force changing k cache type to f32 due to a lack of f16 support for OUT_PROD\n", __func__);36 params.cache_type_k = GGML_TYPE_F32;37 }38 if (params.cache_type_v != GGML_TYPE_F32) {39 LOG_INF("%s: force changing v cache type to f32 due to a lack of f16 support for OUT_PROD\n", __func__);40 params.cache_type_v = GGML_TYPE_F32;41 }42 43 llama_backend_init();44 llama_numa_init(params.numa);45 // load the model and apply lora adapter, if any46 auto llama_init = common_init_from_params(params);47 48 auto * model = llama_init->model();49 auto * ctx = llama_init->context();50 51 if (model == NULL) {52 LOG_ERR("%s: unable to load model\n", __func__);53 return 1;54 }55 56 // print system information57 {58 LOG_INF("\n");59 LOG_INF("%s\n", common_params_get_system_info(params).c_str());60 }61 62 std::vector<llama_token> tokens = common_tokenize(ctx, params.prompt, true);63 ggml_opt_dataset_t dataset = common_opt_dataset_init(ctx, tokens, llama_n_ctx(ctx) / 2);64 65 struct lr_opt & lr = params.lr;66 LOG_INF("-optimizer %s -lr0 %.2g -wd %.2g -lr-min %.2g -min-epochs %.2g -epochs %d -period %.2g -val %.2g\n",67 ggml_opt_optimizer_name(params.optimizer), (double) lr.lr0, (double) lr.wd, (double) lr.lr_min, (double) lr.decay_epochs,68 (unsigned) lr.epochs, (double) params.n_batch / params.n_ubatch, (double) params.val_split);69 70 struct llama_opt_params lopt_params{71 /*n_ctx_train =*/0,72 /*param_filter =*/llama_opt_param_filter_all,73 /*param_filter_ud =*/nullptr,74 /*get_opt_pars =*/common_opt_lr_pars,75 /*get_opt_pars_ud =*/¶ms.lr,76 /*optimizer_type =*/params.optimizer,77 };78 llama_opt_init(ctx, model, lopt_params);79 80 const int64_t idata_split = ggml_opt_dataset_ndata(dataset) * (1.0f - params.val_split);81 82 ggml_opt_result_t result_train = ggml_opt_result_init();83 ggml_opt_result_t result_eval = ggml_opt_result_init();84 85 for (lr.epoch = 0; lr.epoch < lr.epochs; ++lr.epoch) {86 llama_opt_epoch(ctx, dataset, result_train, result_eval, idata_split,87 ggml_opt_epoch_callback_progress_bar, ggml_opt_epoch_callback_progress_bar);88 fprintf(stderr, "\n");89 90 ggml_opt_result_reset(result_train);91 ggml_opt_result_reset(result_eval);92 }93 ggml_opt_result_free(result_train);94 ggml_opt_result_free(result_eval);95 96 llama_model_save_to_file(model, params.out_file.c_str());97 98 llama_backend_free();99 100 return 0;101}102 