mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	Fix conversion of unnormalized BF16->BF16 weights (#7843)
* add truncate_bf16 * truncate intermediate fp32 if converting bf16 to bf16 * fix masking in __compute_fp32_to_bf16 * np.int16 no longer used * missing cast and additional numpy 2.x fix * ggml-impl : do not flush bf16 subnormals to zero * ggml : add reference fp32 to bf16 conversion The fast version is no longer equivalent for all platforms because of the handling of subnormal values. * gguf-py : remove flush to zero for bf16 subnormals * gguf-py : remove float32 truncation to bf16 Rounding achieves the same thing in the cases where this was used. * missed prototype update in merge * merge cleanup --------- Co-authored-by: Francis Couture-Harpin <git@compilade.net>
This commit is contained in:
		| @@ -80,8 +80,9 @@ static inline float ggml_compute_bf16_to_fp32(ggml_bf16_t h) { | ||||
| /** | ||||
|  * Converts float32 to brain16. | ||||
|  * | ||||
|  * This function is binary identical to AMD Zen4 VCVTNEPS2BF16. | ||||
|  * Subnormals shall be flushed to zero, and NANs will be quiet. | ||||
|  * This is binary identical with Google Brain float conversion. | ||||
|  * Floats shall round to nearest even, and NANs shall be quiet. | ||||
|  * Subnormals aren't flushed to zero, except perhaps when used. | ||||
|  * This code should vectorize nicely if using modern compilers. | ||||
|  */ | ||||
| static inline ggml_bf16_t ggml_compute_fp32_to_bf16(float s) { | ||||
| @@ -95,10 +96,6 @@ static inline ggml_bf16_t ggml_compute_fp32_to_bf16(float s) { | ||||
|         h.bits = (u.i >> 16) | 64; /* force to quiet */ | ||||
|         return h; | ||||
|     } | ||||
|     if (!(u.i & 0x7f800000)) { /* subnormal */ | ||||
|         h.bits = (u.i & 0x80000000) >> 16; /* flush to zero */ | ||||
|         return h; | ||||
|     } | ||||
|     h.bits = (u.i + (0x7fff + ((u.i >> 16) & 1))) >> 16; | ||||
|     return h; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sigbjørn Skjæret
					Sigbjørn Skjæret