From 8b7536bda8b65107794c4df710f14ddfde430160 Mon Sep 17 00:00:00 2001 From: Kawrakow Date: Wed, 5 Feb 2025 13:49:39 +0200 Subject: IQ1_S_R4: better 1.5 bpw quants (#185) * iq1_s_r4: basics - quantize/dequantize * iq1_s_r4: gemm/gemv works on AVX2/Zen4 * Don't forget to make sure we have a multiple of 4 rows per thread * iq1_s_r4: this is better * iq1_s_r4: fix Zen4 after AVX2 changes * iq1_s_r4: NEON gemm/gemv * iq1_s_r4: more bits for shared experts With this mix we arrive at PPL(512) = 9.4140 for Deepseek-Lite using 1.766 bpw for the repeating layers. On the Ryzen-7950X we get PP-512 = 494 t/s and TG-128 = 52 t/s @ 16 threads. * Forgotten counter increment * iq1_s_r4: slightly faster AVX2/Zen4 gemm/gemv * Compiler warnings --------- Co-authored-by: Iwan Kawrakow --- ggml/src/ggml-common.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'ggml/src/ggml-common.h') diff --git a/ggml/src/ggml-common.h b/ggml/src/ggml-common.h index 023b0b63..14813161 100644 --- a/ggml/src/ggml-common.h +++ b/ggml/src/ggml-common.h @@ -485,6 +485,12 @@ typedef struct { } block_iq1_s; static_assert(sizeof(block_iq1_s) == sizeof(ggml_half) + QK_K/8 + QK_K/16, "wrong iq1_s block size/padding"); +typedef struct { + uint8_t qs[16]; + uint16_t qh[4]; +} block_iq1_s_r4; +static_assert(sizeof(block_iq1_s_r4) == 24, "wrong iq1_s_r4 block size/padding"); + // 1.75 bpw typedef struct { uint8_t qs[QK_K/8]; // grid index, low 8 bits -- cgit v1.2.3