From ddc7701588d10686aba1fec8a392228e7bd56923 Mon Sep 17 00:00:00 2001 From: Nexesenex <124105151+Nexesenex@users.noreply.github.com> Date: Mon, 25 Mar 2024 21:04:01 +0100 Subject: [PATCH] Update llama.cpp - Non-FFN layer-tensors strategy --- llama.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/llama.cpp b/llama.cpp index 6427fbe4a..5360f13ce 100644 --- a/llama.cpp +++ b/llama.cpp @@ -12468,7 +12468,7 @@ static ggml_type llama_tensor_get_type(quantize_state_internal & qs, ggml_type n } else if (ftype == LLAMA_FTYPE_MOSTLY_IQ1_XS) { if (qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_Q2_K; - new_type = GGML_TYPE_IQ2_S; + else new_type = GGML_TYPE_IQ2_S; } else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M) { new_type = GGML_TYPE_IQ3_S; @@ -12477,6 +12477,35 @@ static ggml_type llama_tensor_get_type(quantize_state_internal & qs, ggml_type n new_type = GGML_TYPE_IQ3_S; } } + } else if (ftype == LLAMA_FTYPE_MOSTLY_IQ1_XS) { + if (name.find("attn_q.weight") != std::string::npos) { + if (qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_IQ2_S; + } + if (name.find("attn_k.weight") != std::string::npos) { + if (qs.model.hparams.n_expert >= 8) new_type = GGML_TYPE_IQ4_XS; + else if (qs.model.hparams.n_expert >= 4) new_type = GGML_TYPE_IQ3_S; + else if (qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_IQ3_XXS; + else if (qs.model.hparams.n_gqa() >= 4) new_type = GGML_TYPE_IQ2_XS; + else if (qs.model.hparams.n_gqa() >= 2) new_type = GGML_TYPE_IQ2_XXS; + } + else if (name.find("attn_v.weight") != std::string::npos) { + if (qs.model.hparams.n_expert >= 8) new_type = GGML_TYPE_IQ4_XS; + else if (qs.model.hparams.n_gqa() >= 8 || qs.model.hparams.n_expert >= 4) new_type = GGML_TYPE_IQ4_XS; + else if (qs.model.hparams.n_gqa() >= 4 || qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_IQ3_S; + else if (qs.model.hparams.n_gqa() >= 2) new_type = GGML_TYPE_IQ3_XXS; + else new_type = GGML_TYPE_Q2_K; + ++qs.i_attention_wv; + } + else if (name.find("attn_output.weight") != std::string::npos) { + if (qs.model.hparams.n_expert >= 8) new_type = GGML_TYPE_IQ4_XS; + else if (qs.model.hparams.n_expert >= 4) new_type = GGML_TYPE_IQ3_S; + else if (qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_IQ3_XXS; + else new_type = GGML_TYPE_IQ2_XXS; + } + else if (name.find("attn_qkv.weight") != std::string::npos) { + if (qs.model.hparams.n_expert >= 2) new_type = GGML_TYPE_IQ4_XS; + else new_type = GGML_TYPE_Q2_K; + } } else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ2_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M) { if (name.find("attn_v.weight") != std::string::npos) {