mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	sampling : add XTC sampler (#9742)
* Initial XTC commit Adds XTC sampler, not activated by default, but recommended settings by default. * Cleanup * Simplified chances calculation To be more inline with the original implementation, chance is calculated once at the beginning. * First fixes by comments Still need to look into sorting * Fixed trailing backspaces * Fixed RNG to be reproduceable Thanks to @slaren for directions * Fixed forgotten header * Moved `min_keep` Moved from conditions to a simple check at the end. * Fixed broken randomization Thanks to @slaren for explanation * Swapped sorting for a custom algorithm Shifts tokens to remove the penalized ones, then puts the penalized at the back. Should make `min_keep` still viable. * Algorithm rework 1. Scan token from top till the first non-penalizable 2. Remove the last captured token (the least probable above threshold) 3. Shift all tokens to override the remaining penalizable 4. Penalize and put them at the the bottom. * Added XTC to `test-sampling` * Simplified algorithm and more tests * Updated info in common and args * Merged back lost commits in common and arg * Update dump info in common * Fixed incorrect min_keep check * Added XTC to README * Renamed parameters, fixed info and defaults * probability is at 0 by default, but XTC is included in sampling queue * threshold higher than 0.5 switches XTC off * Initial server support * Added XTC to server UIs * Fixed labels in old server UI * Made algorithm safer and more readable * Removed xtc_threshold_max * Fixed arg after update * Quick fixes by comments * Simplified algorithm since threshold_max is removed * Renamed random distribution * Fixed tests and outdated README * Small fixes
This commit is contained in:
		| @@ -43,6 +43,8 @@ | ||||
|       top_k: 0, // <= 0 to use vocab size | ||||
|       top_p: 1.0, // 1.0 = disabled | ||||
|       min_p: 0.05, // 0 = disabled; recommended for non-english: ~ 0.4 | ||||
|       xtc_probability: 0.0, // 0 = disabled; | ||||
|       xtc_threshold: 0.1, // > 0.5 disables XTC; | ||||
|       tfs_z: 1.0, // 1.0 = disabled | ||||
|       typical_p: 1.0, // 1.0 = disabled | ||||
|       presence_penalty: 0.0, // 0.0 = disabled | ||||
| @@ -836,6 +838,8 @@ return html` | ||||
|           ${FloatField({ label: "TFS-Z", title: "Activates tail-free sampling, a method used to limit the prediction of tokens that are too frequent. The parameter z controls the strength of this limitation. A value of 1.0 means that this function is deactivated.", max: 1.0, min: 0.0, name: "tfs_z", step: 0.01, value: params.value.tfs_z })} | ||||
|           ${FloatField({ label: "Frequency Penalty", title: "A penalty that is applied based on the frequency with which certain tokens occur in the training data set. A higher value results in rare tokens being favoured.", max: 1.0, min: 0.0, name: "frequency_penalty", step: 0.01, value: params.value.frequency_penalty })} | ||||
|           ${FloatField({ label: "Typical-P", title: "Activates local typical sampling, a method used to limit the prediction of tokens that are atypical in the current context. The parameter p controls the strength of this limitation. A value of 1.0 means that this function is deactivated.", max: 1.0, min: 0.0, name: "typical_p", step: 0.01, value: params.value.typical_p })} | ||||
|           ${FloatField({ label: "XTC probability", title: "Sets the chance for token removal (checked once on sampler start)", max: 1.0, min: 0.0, name: "xtc_probability", step: 0.01, value: params.value.xtc_probability })} | ||||
|           ${FloatField({ label: "XTC threshold", title: "Sets a minimum probability threshold for tokens to be removed", max: 0.5, min: 0.0, name: "xtc_threshold", step: 0.01, value: params.value.xtc_threshold })} | ||||
|           ${IntField({ label: "Min Keep", title: "If greater than 0, samplers are forced to return N possible tokens at minimum. Default is 0", max: 10, min: 0, name: "min_keep", value: params.value.min_keep })} | ||||
|         </fieldset> | ||||
|  | ||||
| @@ -1132,6 +1136,8 @@ document.addEventListener('DOMContentLoaded', (event) => { | ||||
|   const snapSettings = { | ||||
|     temperature: { snapValue: 1.0, snapRangeMultiplier: 6 }, | ||||
|     min_p: { snapValue: 0.05, snapRangeMultiplier: 2 }, | ||||
|     xtc_probability: { snapValue: 0.0, snapRangeMultiplier: 4 }, | ||||
|     xtc_threshold: { snapValue: 0.5, snapRangeMultiplier: 4 }, | ||||
|     top_p: { snapValue: 1.0, snapRangeMultiplier: 4 }, | ||||
|     tfs_z: { snapValue: 1.0, snapRangeMultiplier: 4 }, | ||||
|     typical_p: { snapValue: 1.0, snapRangeMultiplier: 4 }, | ||||
|   | ||||
| @@ -307,6 +307,8 @@ | ||||
|       top_k: 40, // <= 0 to use vocab size | ||||
|       top_p: 0.95, // 1.0 = disabled | ||||
|       min_p: 0.05, // 0 = disabled | ||||
|       xtc_probability: 0.0, // 0 = disabled; | ||||
|       xtc_threshold: 0.1, // > 0.5 disables XTC; | ||||
|       tfs_z: 1.0, // 1.0 = disabled | ||||
|       typical_p: 1.0, // 1.0 = disabled | ||||
|       presence_penalty: 0.0, // 0.0 = disabled | ||||
| @@ -1013,6 +1015,8 @@ | ||||
|               ${FloatField({ label: "Typical P", max: 1.0, min: 0.0, name: "typical_p", step: 0.01, value: params.value.typical_p })} | ||||
|               ${FloatField({ label: "Presence penalty", max: 1.0, min: 0.0, name: "presence_penalty", step: 0.01, value: params.value.presence_penalty })} | ||||
|               ${FloatField({ label: "Frequency penalty", max: 1.0, min: 0.0, name: "frequency_penalty", step: 0.01, value: params.value.frequency_penalty })} | ||||
|               ${FloatField({ label: "XTC probability", max: 1.0, min: 0.0, name: "xtc_probability", step: 0.01, value: params.value.xtc_probability })} | ||||
|               ${FloatField({ label: "XTC threshold", max: 0.5, min: 0.0, name: "xtc_threshold", step: 0.01, value: params.value.xtc_threshold })} | ||||
|             </fieldset> | ||||
|             <hr /> | ||||
|             <fieldset class="three"> | ||||
|   | ||||
| @@ -863,6 +863,8 @@ struct server_context { | ||||
|         slot.sparams.top_k             = json_value(data, "top_k",             default_sparams.top_k); | ||||
|         slot.sparams.top_p             = json_value(data, "top_p",             default_sparams.top_p); | ||||
|         slot.sparams.min_p             = json_value(data, "min_p",             default_sparams.min_p); | ||||
|         slot.sparams.xtc_probability   = json_value(data, "xtc_probability",   default_sparams.xtc_probability); | ||||
|         slot.sparams.xtc_threshold     = json_value(data, "xtc_threshold",     default_sparams.xtc_threshold); | ||||
|         slot.sparams.tfs_z             = json_value(data, "tfs_z",             default_sparams.tfs_z); | ||||
|         slot.sparams.typ_p             = json_value(data, "typical_p",         default_sparams.typ_p); | ||||
|         slot.sparams.temp              = json_value(data, "temperature",       default_sparams.temp); | ||||
| @@ -1196,6 +1198,8 @@ struct server_context { | ||||
|             {"top_k",                     slot.sparams.top_k}, | ||||
|             {"top_p",                     slot.sparams.top_p}, | ||||
|             {"min_p",                     slot.sparams.min_p}, | ||||
|             {"xtc_probability",           slot.sparams.xtc_probability}, | ||||
|             {"xtc_threshold",             slot.sparams.xtc_threshold}, | ||||
|             {"tfs_z",                     slot.sparams.tfs_z}, | ||||
|             {"typical_p",                 slot.sparams.typ_p}, | ||||
|             {"repeat_last_n",             slot.sparams.penalty_last_n}, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MaggotHATE
					MaggotHATE