llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
# include "ggml.h"
2023-05-19 20:14:51 +03:00
# include "llama.h"
# ifdef NDEBUG
# undef NDEBUG
# endif
2024-01-28 09:35:14 +01:00
# include <algorithm>
2023-05-19 21:17:28 +03:00
# include <cmath>
2024-01-28 09:35:14 +01:00
# include <string>
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
# include <vector>
2024-10-25 10:07:34 -06:00
extern struct llama_sampler * llama_sampler_init_dry_testing ( int32_t context_size , float dry_multiplier , float dry_base , int32_t dry_allowed_length , int32_t dry_penalty_last_n , const std : : vector < std : : vector < llama_token > > & seq_breakers ) ;
2024-09-07 15:16:19 +03:00
static void dump ( const llama_token_data_array * cur_p ) {
for ( size_t i = 0 ; i < cur_p - > size ; i + + ) {
printf ( " %d: %f (%f) \n " , cur_p - > data [ i ] . id , cur_p - > data [ i ] . p , cur_p - > data [ i ] . logit ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
}
2024-09-07 15:16:19 +03:00
# define DUMP(__cur_p) do { printf("%s:%d (%s)\n", __FILE__, __LINE__, __func__); dump((__cur_p)); printf("-\n"); } while(0)
2024-10-21 09:46:40 +03:00
struct sampler_tester {
sampler_tester ( size_t n_vocab ) {
cur . reserve ( n_vocab ) ;
for ( llama_token token_id = 0 ; token_id < ( llama_token ) n_vocab ; token_id + + ) {
const float logit = logf ( token_id ) ;
cur . emplace_back ( llama_token_data { token_id , logit , 0.0f } ) ;
}
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
cur_p = llama_token_data_array { cur . data ( ) , cur . size ( ) , - 1 , false } ;
}
2024-09-07 15:16:19 +03:00
2024-10-21 09:46:40 +03:00
sampler_tester ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected ) : probs_expected ( probs_expected ) {
cur . reserve ( probs . size ( ) ) ;
for ( llama_token token_id = 0 ; token_id < ( llama_token ) probs . size ( ) ; token_id + + ) {
const float logit = logf ( probs [ token_id ] ) ;
cur . emplace_back ( llama_token_data { token_id , logit , probs [ token_id ] } ) ;
}
cur_p = llama_token_data_array { cur . data ( ) , cur . size ( ) , - 1 , false } ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-21 09:46:40 +03:00
void apply ( llama_sampler * sampler ) {
llama_sampler_apply ( sampler , & cur_p ) ;
llama_sampler_free ( sampler ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-21 09:46:40 +03:00
void check ( ) {
GGML_ASSERT ( cur_p . size = = probs_expected . size ( ) ) ;
for ( size_t i = 0 ; i < cur_p . size ; i + + ) {
GGML_ASSERT ( fabs ( cur_p . data [ i ] . p - probs_expected [ i ] ) < 1e-5 ) ;
}
}
llama_token_data_array cur_p ;
private :
const std : : vector < float > probs_expected ;
2024-09-07 15:16:19 +03:00
std : : vector < llama_token_data > cur ;
2024-10-21 09:46:40 +03:00
} ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
static void test_temp ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float temp ) {
sampler_tester tester ( probs , probs_expected ) ;
DUMP ( & tester . cur_p ) ;
tester . apply ( llama_sampler_init_temp ( temp ) ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-21 09:46:40 +03:00
static void test_temp_ext ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float temp , float delta , float exponent ) {
sampler_tester tester ( probs , probs_expected ) ;
2024-09-07 15:16:19 +03:00
2024-10-21 09:46:40 +03:00
DUMP ( & tester . cur_p ) ;
tester . apply ( llama_sampler_init_temp_ext ( temp , delta , exponent ) ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
tester . check ( ) ;
}
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
static void test_top_k ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , int k ) {
sampler_tester tester ( probs , probs_expected ) ;
DUMP ( & tester . cur_p ) ;
tester . apply ( llama_sampler_init_top_k ( k ) ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-21 09:46:40 +03:00
static void test_top_p ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float p ) {
sampler_tester tester ( probs , probs_expected ) ;
2024-09-07 15:16:19 +03:00
2024-10-21 09:46:40 +03:00
DUMP ( & tester . cur_p ) ;
2025-05-27 12:07:52 +03:00
tester . apply ( llama_sampler_init_top_p ( p , 0 ) ) ;
2024-10-21 09:46:40 +03:00
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
2024-01-28 09:35:14 +01:00
2024-10-21 09:46:40 +03:00
tester . check ( ) ;
2024-01-28 09:35:14 +01:00
}
2024-10-21 09:46:40 +03:00
static void test_min_p ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float p ) {
sampler_tester tester ( probs , probs_expected ) ;
2024-09-07 15:16:19 +03:00
2024-10-21 09:46:40 +03:00
DUMP ( & tester . cur_p ) ;
2025-05-27 12:07:52 +03:00
tester . apply ( llama_sampler_init_min_p ( p , 0 ) ) ;
2024-10-21 09:46:40 +03:00
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
tester . check ( ) ;
}
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
static void test_xtc ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float p , float t ) {
sampler_tester tester ( probs , probs_expected ) ;
DUMP ( & tester . cur_p ) ;
tester . apply ( llama_sampler_init_xtc ( p , t , 0 , 0 ) ) ;
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
}
static void test_typical ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , float p ) {
sampler_tester tester ( probs , probs_expected ) ;
DUMP ( & tester . cur_p ) ;
2025-05-27 12:07:52 +03:00
tester . apply ( llama_sampler_init_typical ( p , 0 ) ) ;
2024-10-21 09:46:40 +03:00
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-09-07 15:16:19 +03:00
static void test_penalties (
2023-09-15 15:38:27 -04:00
const std : : vector < float > & probs , const std : : vector < llama_token > & last_tokens ,
2024-10-21 09:46:40 +03:00
const std : : vector < float > & probs_expected , float repeat_penalty , float alpha_frequency , float alpha_presence
2023-09-15 15:38:27 -04:00
) {
2024-10-21 09:46:40 +03:00
GGML_ASSERT ( probs . size ( ) = = probs_expected . size ( ) ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
sampler_tester tester ( probs , probs_expected ) ;
2024-09-08 15:52:07 +02:00
2024-12-16 12:31:14 +02:00
auto * sampler = llama_sampler_init_penalties ( last_tokens . size ( ) , repeat_penalty , alpha_frequency , alpha_presence ) ;
2024-09-08 15:52:07 +02:00
2024-09-07 15:16:19 +03:00
for ( size_t i = 0 ; i < last_tokens . size ( ) ; i + + ) {
2024-09-08 15:52:07 +02:00
llama_sampler_accept ( sampler , last_tokens [ i ] ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-21 09:46:40 +03:00
DUMP ( & tester . cur_p ) ;
tester . apply ( sampler ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
tester . check ( ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}
2024-10-25 10:07:34 -06:00
static void test_dry (
const std : : vector < float > & probs , const std : : vector < llama_token > & last_tokens ,
const std : : vector < float > & expected_probs , float dry_multiplier , float dry_base ,
int dry_allowed_length , int dry_penalty_last_n ,
const std : : vector < std : : vector < llama_token > > & seq_breakers
) {
GGML_ASSERT ( probs . size ( ) = = expected_probs . size ( ) ) ;
sampler_tester tester ( probs , expected_probs ) ;
auto * sampler = llama_sampler_init_dry_testing ( 1024 , dry_multiplier , dry_base , dry_allowed_length , dry_penalty_last_n , seq_breakers ) ;
for ( size_t i = 0 ; i < last_tokens . size ( ) ; i + + ) {
llama_sampler_accept ( sampler , last_tokens [ i ] ) ;
}
DUMP ( & tester . cur_p ) ;
tester . apply ( sampler ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
}
2025-02-13 00:45:57 -06:00
static void test_top_n_sigma ( const std : : vector < float > & probs , const std : : vector < float > & probs_expected , int n ) {
sampler_tester tester ( probs , probs_expected ) ;
DUMP ( & tester . cur_p ) ;
tester . apply ( llama_sampler_init_top_n_sigma ( n ) ) ;
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
DUMP ( & tester . cur_p ) ;
tester . check ( ) ;
}
2024-09-07 15:16:19 +03:00
static void test_sampler_queue ( const size_t n_vocab , const std : : string & samplers_sequence , const int top_k , const float top_p , const float min_p
2024-01-28 09:35:14 +01:00
) {
2024-10-21 09:46:40 +03:00
sampler_tester tester ( n_vocab ) ;
2024-01-28 09:35:14 +01:00
llama_token min_token_id = 0 ;
const llama_token max_token_id = n_vocab - 1 ;
for ( auto s : samplers_sequence ) {
switch ( s ) {
2024-10-21 09:46:40 +03:00
case ' k ' : tester . apply ( llama_sampler_init_top_k ( top_k ) ) ; break ;
2024-08-26 16:30:25 +03:00
case ' y ' : GGML_ABORT ( " typical test not implemented " ) ;
2024-10-21 09:46:40 +03:00
case ' p ' : tester . apply ( llama_sampler_init_top_p ( top_p , 1 ) ) ; break ;
case ' m ' : tester . apply ( llama_sampler_init_min_p ( min_p , 1 ) ) ; break ;
2024-08-26 16:30:25 +03:00
case ' t ' : GGML_ABORT ( " temperature test not implemented " ) ;
default : GGML_ABORT ( " Unknown sampler " ) ;
2024-01-28 09:35:14 +01:00
}
2024-10-21 09:46:40 +03:00
tester . apply ( llama_sampler_init_dist ( 0 ) ) ;
auto & cur_p = tester . cur_p ;
2024-01-28 09:35:14 +01:00
2024-09-07 15:16:19 +03:00
const int size = cur_p . size ;
2024-01-28 09:35:14 +01:00
if ( s = = ' k ' ) {
const int expected_size = std : : min ( size , top_k ) ;
min_token_id = std : : max ( min_token_id , ( llama_token ) ( n_vocab - top_k ) ) ;
GGML_ASSERT ( size = = expected_size ) ;
2024-09-07 15:16:19 +03:00
GGML_ASSERT ( cur_p . data [ 0 ] . id = = max_token_id ) ;
GGML_ASSERT ( cur_p . data [ expected_size - 1 ] . id = = min_token_id ) ;
2024-01-28 09:35:14 +01:00
} else if ( s = = ' p ' ) {
const int softmax_divisor = n_vocab * ( n_vocab - 1 ) / 2 - min_token_id * ( min_token_id - 1 ) / 2 ;
const int softmax_numerator_target = ceilf ( top_p * softmax_divisor ) ;
min_token_id = n_vocab ;
int expected_size = 0 ;
int cumsum = 0 ;
do { // do-while because always at least one token is sampled
min_token_id - - ;
expected_size + + ;
cumsum + = min_token_id ;
} while ( cumsum < softmax_numerator_target ) ;
// token 0 has p == 0, need special consideration for cumsum because top_p immediately returns
if ( min_token_id = = 1 ) {
min_token_id - - ;
expected_size + = 1 ;
}
GGML_ASSERT ( size = = expected_size ) ;
2024-09-07 15:16:19 +03:00
GGML_ASSERT ( cur_p . data [ 0 ] . id = = max_token_id ) ;
GGML_ASSERT ( cur_p . data [ expected_size - 1 ] . id = = min_token_id ) ;
2024-01-28 09:35:14 +01:00
} else if ( s = = ' m ' ) {
int expected_size = ceilf ( ( 1.0f - min_p ) * n_vocab ) ;
expected_size = std : : max ( expected_size , 1 ) ;
expected_size = std : : min ( expected_size , size ) ;
min_token_id = floorf ( min_p * n_vocab ) ;
min_token_id = std : : max ( min_token_id , 1 ) ;
min_token_id = std : : max ( min_token_id , ( llama_token ) ( n_vocab - size ) ) ;
min_token_id = std : : min ( min_token_id , ( llama_token ) ( n_vocab - 1 ) ) ;
GGML_ASSERT ( size = = expected_size ) ;
2024-09-07 15:16:19 +03:00
GGML_ASSERT ( cur_p . data [ 0 ] . id = = max_token_id ) ;
GGML_ASSERT ( cur_p . data [ expected_size - 1 ] . id = = min_token_id ) ;
2024-01-28 09:35:14 +01:00
} else {
2024-07-27 04:41:55 +02:00
GGML_ABORT ( " fatal error " ) ;
2024-01-28 09:35:14 +01:00
}
}
2024-09-09 17:10:46 +02:00
printf ( " Sampler queue %3s OK with n_vocab=%05zu top_k=%05d top_p=%f min_p=%f \n " ,
2024-01-28 09:35:14 +01:00
samplers_sequence . c_str ( ) , n_vocab , top_k , top_p , min_p ) ;
}
2024-09-24 09:03:17 +03:00
static void bench ( llama_sampler * cnstr , const char * cnstr_name , const std : : vector < llama_token_data > & data , int n_iter ) {
std : : vector < llama_token_data > cur ( data . size ( ) ) ;
std : : copy ( data . begin ( ) , data . end ( ) , cur . begin ( ) ) ;
llama_token_data_array cur_p = { cur . data ( ) , cur . size ( ) , - 1 , false } ;
llama_sampler_apply ( cnstr , & cur_p ) ;
llama_sampler_reset ( cnstr ) ;
const int64_t t_start = ggml_time_us ( ) ;
for ( int i = 0 ; i < n_iter ; i + + ) {
std : : copy ( data . begin ( ) , data . end ( ) , cur . begin ( ) ) ;
llama_token_data_array cur_p = { cur . data ( ) , cur . size ( ) , - 1 , false } ;
llama_sampler_apply ( cnstr , & cur_p ) ;
llama_sampler_reset ( cnstr ) ;
}
const int64_t t_end = ggml_time_us ( ) ;
llama_sampler_free ( cnstr ) ;
2024-10-15 15:54:55 +05:00
printf ( " %-43s: %8.3f us/iter \n " , cnstr_name , ( t_end - t_start ) / ( float ) n_iter ) ;
2024-09-24 09:03:17 +03:00
}
# define BENCH(__cnstr, __data, __n_iter) bench((__cnstr), #__cnstr, (__data), (__n_iter))
static void test_perf ( ) {
const int n_vocab = 1 < < 17 ;
std : : vector < llama_token_data > data ;
data . reserve ( n_vocab ) ;
for ( int i = 0 ; i < n_vocab ; i + + ) {
2024-11-29 21:54:58 +01:00
const float logit = 2.0f * ( ( double ) ( rand ( ) ) / RAND_MAX - 0.5 ) ;
2024-09-24 09:03:17 +03:00
data . emplace_back ( llama_token_data { i , logit , 0.0f } ) ;
}
2024-10-29 10:42:05 +02:00
BENCH ( llama_sampler_init_top_k ( 40 ) , data , 32 ) ;
BENCH ( llama_sampler_init_top_p ( 0.8f , 1 ) , data , 32 ) ;
BENCH ( llama_sampler_init_min_p ( 0.2f , 1 ) , data , 32 ) ;
BENCH ( llama_sampler_init_typical ( 0.5f , 1 ) , data , 32 ) ;
BENCH ( llama_sampler_init_xtc ( 1.0f , 0.1f , 1 , 1 ) , data , 32 ) ;
2024-09-24 09:03:17 +03:00
}
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
int main ( void ) {
ggml_time_init ( ) ;
2024-10-21 09:46:40 +03:00
test_temp ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 1.0f ) ;
test_temp ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 1.0f , 0.0f , 0.0f , 0.0f } , 0.0f ) ;
test_temp_ext ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 1.0f , 0.0f , 1.0f ) ;
test_temp_ext ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 1.0f , 0.0f , 0.0f , 0.0f } , 0.0f , 0.0f , 1.0f ) ;
test_top_k ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 1.0f } , 1 ) ;
test_top_k ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.44444f , 0.33333f , 0.22222f } , 3 ) ;
2024-02-08 09:46:30 +01:00
test_top_k ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 4 ) ;
test_top_k ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 0 ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-21 09:46:40 +03:00
test_top_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 1.0f } , 0 ) ;
test_top_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.571429f , 0.428571f } , 0.7f ) ;
test_top_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.44444f , 0.33333f , 0.22222f } , 0.8f ) ;
test_top_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 1.0f ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-01-28 09:35:14 +01:00
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 1.0f , 0.3f / 1.0f , 0.2f / 1.0f , 0.1f / 1.0f } , 0.00f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 1.0f , 0.3f / 1.0f , 0.2f / 1.0f , 0.1f / 1.0f } , 0.24f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.9f , 0.3f / 0.9f , 0.2f / 0.9f } , 0.26f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.9f , 0.3f / 0.9f , 0.2f / 0.9f } , 0.49f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.7f , 0.3f / 0.7f } , 0.51f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.7f , 0.3f / 0.7f } , 0.74f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.4f } , 0.76f ) ;
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.4f } , 1.00f ) ;
2025-05-27 12:07:52 +03:00
test_min_p ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f / 0.4f } , 1.05f ) ;
2024-01-28 09:35:14 +01:00
2024-10-15 15:54:55 +05:00
printf ( " XTC should: \n " ) ;
test_xtc ( { 0.4f , 0.3f , 0.2f , 0.1f } , { 0.1f } , 0.99f , 0.09f ) ;
test_xtc ( { 0.4f , 0.3f , 0.2f , 0.1f } , { 0.2f , 0.1f } , 0.99f , 0.19f ) ;
test_xtc ( { 0.4f , 0.3f , 0.2f , 0.1f } , { 0.3f , 0.2f , 0.1f } , 0.99f , 0.29f ) ;
printf ( " XTC should not: \n " ) ;
test_xtc ( { 0.4f , 0.3f , 0.2f , 0.1f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 0.99f , 0.39f ) ;
2025-05-27 12:07:52 +03:00
test_typical ( { 0.97f , 0.01f , 0.01f , 0.01f } , { 0.97f } , 0.5f ) ;
test_typical ( { 0.4f , 0.2f , 0.2f , 0.2f } , { 0.2f , 0.2f , 0.2f } , 0.5f ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-09-07 15:16:19 +03:00
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 } , { 0.25f , 0.25f , 0.25f , 0.25f , 0 } , 50.0f , 0.0f , 0.0f ) ;
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 } , { 0.5f , 0.5f , 0 , 0 , 0 } , 50.0f , 0.0f , 0.0f ) ;
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 , 0 , 0 } , { 0.5f , 0.5f , 0 , 0 , 0 } , 50.0f , 0.0f , 0.0f ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-09-07 15:16:19 +03:00
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 } , { 0.249997f , 0.249997f , 0.249997f , 0.249997f , 0.000011f } , 1.0f , 5.0f , 5.0f ) ;
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 } , { 0.499966f , 0.499966f , 0.000023f , 0.000023f , 0.000023f } , 1.0f , 5.0f , 5.0f ) ;
test_penalties ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 , 0 , 0 } , { 0.499977f , 0.499977f , 0.000023f , 0.000023f , 0.000000f } , 1.0f , 5.0f , 5.0f ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
2024-10-25 10:07:34 -06:00
test_dry ( { 0.25f , 0.25f , 0.25f , 0.25f } , { 0 , 1 } , { 0.25f , 0.25f , 0.25f , 0.25f } , 1.0f , 1.1f , 2 , 4 , { } ) ;
test_dry ( { 0.25f , 0.25f , 0.25f , 0.25f } , { 0 , 1 , 2 , 0 , 1 } , { 0.296923f , 0.296923f , 0.296923f , 0.109232f } , 1.0f , 1.1f , 2 , 5 , { } ) ;
test_dry ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 3 , 4 , 0 , 1 } , { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , 1.0f , 1.1f , 2 , 6 , { { 3 } } ) ;
test_dry ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 , 0 , 1 } , { 0.241818f , 0.241818f , 0.241818f , 0.241818f , 0.032727f } , 2.0f , 1.1f , 2 , 5 , { } ) ;
test_dry ( { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , { 0 , 1 , 2 , 3 , 4 , 0 , 1 } , { 0.2f , 0.2f , 0.2f , 0.2f , 0.2f } , 1.0f , 1.1f , 4 , 7 , { } ) ;
2025-02-13 00:45:57 -06:00
test_top_n_sigma ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.571429f , 0.428571f , 0.0f , 0.0f } , 1.00f ) ;
2025-05-06 13:36:24 -07:00
test_top_n_sigma ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 0.00f ) ; // top_n_sigma == 0 now represents a no-op rather than greedy decoding as of PR#13345
2025-02-13 00:45:57 -06:00
test_top_n_sigma ( { 0.1f , 0.2f , 0.3f , 0.4f } , { 0.4f , 0.3f , 0.2f , 0.1f } , 3.00f ) ;
2024-01-28 09:35:14 +01:00
test_sampler_queue ( 10000 , " k " , 10000 , 1.0f , 1.0f ) ;
test_sampler_queue ( 10000 , " k " , 1 , 1.0f , 1.0f ) ;
test_sampler_queue ( 10000 , " p " , 10000 , 1.0f , 1.0f ) ;
test_sampler_queue ( 10000 , " p " , 10000 , 0.0f , 1.0f ) ;
test_sampler_queue ( 10000 , " m " , 10000 , 1.0f , 1.0f ) ;
test_sampler_queue ( 10000 , " m " , 10000 , 1.0f , 1e-12 ) ;
test_sampler_queue ( 10000 , " k " , 100 , 1.0000f , 1.0f ) ;
test_sampler_queue ( 10000 , " p " , 10000 , 0.0002f , 1.0f ) ;
test_sampler_queue ( 10000 , " p " , 10000 , 0.8000f , 1.0f ) ;
test_sampler_queue ( 10000 , " m " , 10000 , 1.0000f , 9997.9f / 9999.0f ) ;
test_sampler_queue ( 10000 , " m " , 10000 , 1.0000f , 0.1f ) ;
test_sampler_queue ( 10000 , " kp " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " km " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " pk " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " pm " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " mk " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " mp " , 100 , 0.8f , 9997.9f / 9999.0f ) ;
test_sampler_queue ( 10000 , " mp " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " kpm " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " kmp " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " pkm " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " pmk " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " mkp " , 100 , 0.8f , 0.1f ) ;
test_sampler_queue ( 10000 , " mpk " , 100 , 0.8f , 0.1f ) ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
printf ( " OK \n " ) ;
2023-07-18 14:24:43 +03:00
2024-09-24 09:03:17 +03:00
test_perf ( ) ;
2023-07-18 14:24:43 +03:00
return 0 ;
llama : new sampling algorithms (#1126)
* Sample interface, new samplers.
New samplers:
- locally typical sampling
- tail free sampling
- frequency and presence penalty
- mirostat
Ignore EOS fix: -inf should be used.
* mirostat
* Added --logit-bias and --no-penalize-nl, removed std::span
* Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
Use C++11, clarify llama API documentation, rename Mirostat parameters to --mirostat_lr and --mirostat_ent, add temperature sampling for Mirostat, simplify Mirostat sampling API parameters (removed N and *k)
* Save and load example adjust
* Tests
* Windows build fix
* Windows test fix
2023-04-29 08:34:41 +03:00
}