char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
e6dd0e29a
char/aliceai-t5-moe
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 data 15#endif 16 17int main (int argc ,char ** argv ) { 18 std::setlocale (LC_NUMERIC ,"C" ); 19 20common_params params ; 21params .escape = false; 22 23common_init (); 24 25if (!common_params_parse (argc ,argv ,params ,LLAMA_EXAMPLE_FINETUNE )) { 26return 1 ; 27 } 28 29if (params .load_mode != LLAMA_LOAD_MODE_NONE ) { 30LOG_INF ("%s: forcing load_mode = none to enable writable pointers to the weights\n" ,__func__ ); 31params .load_mode = LLAMA_LOAD_MODE_NONE ; 32 } 33if (params .cache_type_k != GGML_TYPE_F32 ) { 34LOG_INF ("%s: force changing k cache type to f32 due to a lack of f16 support for OUT_PROD\n" ,__func__ ); 35params .cache_type_k = GGML_TYPE_F32 ; 36 } 37if (params .cache_type_v != GGML_TYPE_F32 ) { 38LOG_INF ("%s: force changing v cache type to f32 due to a lack of f16 support for OUT_PROD\n" ,__func__ ); 39params .cache_type_v = GGML_TYPE_F32 ; 40 } 41 42llama_backend_init (); 43llama_numa_init (params .numa ); 44// load the model and apply lora adapter, if any 45auto llama_init = common_init_from_params (params ); 46 47auto * model = llama_init -> model (); 48auto * ctx = llama_init -> context (); 49 50if (model == NULL ) { 51LOG_ERR ("%s: unable to load model\n" ,__func__ ); 52return 1 ; 53 } 54 55// print system information 56 { 57LOG_INF ("\n" ); 58LOG_INF ("%s\n" ,common_params_get_system_info (params ).c_str ()); 59 } 60 61 std::vector < llama_token > tokens = common_tokenize (ctx ,params .prompt , true); 62ggml_opt_dataset_t dataset = common_opt_dataset_init (ctx ,tokens ,llama_n_ctx (ctx ) /2 ); 63 64struct lr_opt & lr = params .lr ; 65LOG_INF ("-optimizer %s -lr0 %.2g -wd %.2g -lr-min %.2g -min-epochs %.2g -epochs %d -period %.2g -val %.2g\n" , 66ggml_opt_optimizer_name (params .optimizer ), (double )lr .lr0 , (double )lr .wd , (double )lr .lr_min , (double )lr .decay_epochs , 67 (unsigned )lr .epochs , (double )params .n_batch /params .n_ubatch , (double )params .val_split ); 68 69struct llama_opt_params lopt_params { 70/*n_ctx_train =*/ 0 , 71/*param_filter =*/ llama_opt_param_filter_all , 72/*param_filter_ud =*/ nullptr , 73/*get_opt_pars =*/ common_opt_lr_pars , 74/*get_opt_pars_ud =*/ & params .lr , 75/*optimizer_type =*/ params .optimizer , 76 }; 77llama_opt_init (ctx ,model ,lopt_params ); 78 79const int64_t idata_split = ggml_opt_dataset_ndata (dataset )* (1.0f - params .val_split ); 80 81ggml_opt_result_t result_train = ggml_opt_result_init (); 82ggml_opt_result_t result_eval = ggml_opt_result_init (); 83 84for (lr .epoch = 0 ;lr .epoch < lr .epochs ;++ lr .epoch ) { 85llama_opt_epoch (ctx ,dataset ,result_train ,result_eval ,idata_split , 86ggml_opt_epoch_callback_progress_bar ,ggml_opt_epoch_callback_progress_bar ); 87fprintf (stderr ,"\n" ); 88 89ggml_opt_result_reset (result_train ); 90ggml_opt_result_reset (result_eval ); 91 } 92ggml_opt_result_free (result_train ); 93ggml_opt_result_free (result_eval ); 94 95llama_model_save_to_file (model ,params .out_file .c_str ()); 96 97llama_backend_free (); 98 99return 0 ; 100}