From b0597b14938a86883ecbdc8a7abcdce6506730fe Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 17 Dec 2024 17:54:04 +0200 Subject: [PATCH] ggml : fix cpy op for IQ-quants to use reference impl ggml-ci --- ggml/src/ggml-cpu/ggml-cpu.c | 15 +++++++++++---- tests/test-backend-ops.cpp | 7 +++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index 67e67a089..b702f1171 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -2968,8 +2968,12 @@ static void ggml_compute_forward_dup_f16( id += ne00 * (ne01 - ir1); } } - } else if (ggml_get_type_traits_cpu(dst->type)->from_float) { - ggml_from_float_t const quantize_row_q = ggml_get_type_traits_cpu(dst->type)->from_float; + } else if (ggml_get_type_traits_cpu(dst->type)->from_float || ggml_get_type_traits(dst->type)->from_float_ref) { + ggml_from_float_t quantize_row_q = ggml_get_type_traits_cpu(dst->type)->from_float; + if (!quantize_row_q) { + quantize_row_q = ggml_get_type_traits(dst->type)->from_float_ref; + } + float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; size_t id = 0; @@ -3565,8 +3569,11 @@ static void ggml_compute_forward_dup_f32( id += rs * (ne01 - ir1); } } - } else if (ggml_get_type_traits_cpu(dst->type)->from_float) { - ggml_from_float_t const quantize_row_q = ggml_get_type_traits_cpu(dst->type)->from_float; + } else if (ggml_get_type_traits_cpu(dst->type)->from_float || ggml_get_type_traits(dst->type)->from_float_ref) { + ggml_from_float_t quantize_row_q = ggml_get_type_traits_cpu(dst->type)->from_float; + if (!quantize_row_q) { + quantize_row_q = ggml_get_type_traits(dst->type)->from_float_ref; + } size_t id = 0; size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type)); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index b9454ba59..53b6af8b5 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -3549,8 +3549,11 @@ static std::vector> make_test_cases_eval() { for (ggml_type type_src : {GGML_TYPE_F16, GGML_TYPE_F32}) { for (ggml_type type_dst : all_types) { - test_cases.emplace_back(new test_cpy(type_src, type_dst, {256, 4, 4, 4})); - test_cases.emplace_back(new test_cpy(type_src, type_dst, {256, 2, 3, 4}, {0, 2, 1, 3})); // cpy by rows + //if (type_dst == GGML_TYPE_IQ2_S || type_dst == GGML_TYPE_IQ3_XXS || type_dst == GGML_TYPE_IQ3_S) { + // continue; + //} + test_cases.emplace_back(new test_cpy(type_src, type_dst, {256, 4, 4, 4})); + test_cases.emplace_back(new test_cpy(type_src, type_dst, {256, 2, 3, 4}, {0, 2, 1, 3})); // cpy by rows } } for (ggml_type type_src : {GGML_TYPE_F16, GGML_TYPE_F32}) {