diff --git a/examples/quantize-stats/quantize-stats.cpp b/examples/quantize-stats/quantize-stats.cpp index c924ff3d2..ae807f493 100644 --- a/examples/quantize-stats/quantize-stats.cpp +++ b/examples/quantize-stats/quantize-stats.cpp @@ -307,7 +307,7 @@ int main(int argc, char ** argv) { // loop throught quantization types //for (int i = 0; i < GGML_TYPE_COUNT; i++) { - for (int i = 0; i < 1; i++) { + for (int i = 1; i < 2; i++) { if (!params.include_types.empty() && std::find(params.include_types.begin(), params.include_types.end(), i) == params.include_types.end()) { continue; } @@ -317,8 +317,10 @@ int main(int argc, char ** argv) { //qfns.quantize_row_q = i == 0 ? kQuantizeQ4_0 : kQuantizeQ5_1; //qfns.quantize_row_q = i == 0 ? kQuantizeQ4_0 : kQuantizeQ5_1_Fast; //if (i == 1) qfns.dequantize_row_q = kDequantizeQ5_1; - qfns.quantize_row_q = i == 0 ? kQuantizeQ4_0K : kQuantizeQ5_1; - qfns.dequantize_row_q = i == 0 ? kDequantizeQ4_0K : kDequantizeQ5_1; + //qfns.quantize_row_q = i == 0 ? kQuantizeQ4_0K : kQuantizeQ5_1; + //qfns.dequantize_row_q = i == 0 ? kDequantizeQ4_0K : kDequantizeQ5_1; + qfns.quantize_row_q = i == 0 ? kQuantizeQ4_0K : kQuantizeQ4_1K; + qfns.dequantize_row_q = i == 0 ? kDequantizeQ4_0K : kDequantizeQ4_1K; } if (qfns.quantize_row_q && qfns.dequantize_row_q) { if (params.verbose) { diff --git a/ggml_extra.cpp b/ggml_extra.cpp index 927ab7e78..787d62edb 100644 --- a/ggml_extra.cpp +++ b/ggml_extra.cpp @@ -378,6 +378,18 @@ void kQuantizeQ4(const float* X, void* buffer, int k, int type) { std::memcpy(q, &scale1fp16, sizeof(scale1fp16)); q += sizeof(scale1fp16); std::memcpy(q, &scale2fp16, sizeof(scale2fp16)); q += sizeof(scale2fp16); for (int k=0; k> 4; + *y++ = a1 + b1*l1; *y++ = a1 + b1*l2; + } + data += 8; + for (int k=0; k<8; ++k) { + int8_t l1 = data[k] & 15, l2 = data[k] >> 4; + *y++ = a2 + b2*l1; *y++ = a2 + b2*l2; + } + data += 8; + } +} + } diff --git a/ggml_extra.h b/ggml_extra.h index 6ded61657..bddabc5c1 100644 --- a/ggml_extra.h +++ b/ggml_extra.h @@ -31,6 +31,9 @@ void kDequantizeQ5_1(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int void kQuantizeQ4_0K(const float* GGML_RESTRICT x, void* GGML_RESTRICT y, int k); void kDequantizeQ4_0K(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); +void kQuantizeQ4_1K(const float* GGML_RESTRICT x, void* GGML_RESTRICT y, int k); +void kDequantizeQ4_1K(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); + #ifdef __cplusplus } #endif