@@ -79,24 +79,35 @@ int main(int argc, char ** argv) {
7979 constexpr float val_split = 0 .05f ;
8080
8181 std::vector<llama_token> tokens = common_tokenize (ctx, params.prompt , true );
82- ggml_opt_dataset_t dataset = llama_opt_dataset_init (ctx, tokens.data (), tokens.size (), llama_n_ctx (ctx)/2 );
83- llama_opt_init (ctx);
82+ ggml_opt_dataset_t dataset = common_opt_dataset_init (ctx, tokens, llama_n_ctx (ctx)/2 );
83+
84+ struct ggml_opt_optimizer_params optimizer_params = ggml_opt_get_default_optimizer_params (nullptr );
85+ optimizer_params.adamw .alpha = 1e-6f ; // learning rate
86+
87+ struct llama_opt_params lopt_params {
88+ /* n_ctx_train =*/ 0 ,
89+ /* get_opt_pars =*/ ggml_opt_get_constant_optimizer_params,
90+ /* get_opt_pars_ud =*/ &optimizer_params,
91+ };
92+ llama_opt_init (ctx, model, lopt_params);
93+
8494 const int64_t idata_split = ggml_opt_dataset_ndata (dataset) * (1 .0f - val_split);
8595
86- while (true ) {
87- ggml_opt_result_t result_train = ggml_opt_result_init ();
88- ggml_opt_result_t result_eval = ggml_opt_result_init ();
96+ ggml_opt_result_t result_train = ggml_opt_result_init ();
97+ ggml_opt_result_t result_eval = ggml_opt_result_init ();
8998
99+ for (int epoch = 0 ; epoch < 1 ; ++epoch) {
90100 llama_opt_epoch (ctx, dataset, result_train, result_eval, idata_split,
91101 ggml_opt_epoch_callback_progress_bar, ggml_opt_epoch_callback_progress_bar);
92102 fprintf (stderr, " \n " );
93103
94- ggml_opt_result_free (result_train);
95- ggml_opt_result_free (result_eval);
104+ ggml_opt_result_reset (result_train);
105+ ggml_opt_result_reset (result_eval);
96106 }
107+ ggml_opt_result_free (result_train);
108+ ggml_opt_result_free (result_eval);
97109
98- LOG (" \n " );
99- llama_perf_context_print (ctx);
110+ llama_save_model_to_file (model, " finetuned-model.gguf" );
100111
101112 llama_free (ctx);
102113 llama_free_model (model);
0 commit comments