Upload patch_llamacpp_hpcq_seg.py
Browse files- patch_llamacpp_hpcq_seg.py +37 -0
patch_llamacpp_hpcq_seg.py
CHANGED
|
@@ -627,6 +627,18 @@ static void dequantize_row_q3_K_cuda(const void * vx, dst_t * y, const int64_t k
|
|
| 627 |
dequantize_block_q3_K<<<nb, 64, 0, stream>>>(vx, y, d_packed, b0, enc);
|
| 628 |
}}"""
|
| 629 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 630 |
CUDA_MULMAT_OLD = """ if (ggml_cuda_should_use_mmvq(src0->type, cc, ne11)) {
|
| 631 |
ggml_cuda_mul_mat_vec_q(ctx, src0, src1, nullptr, dst);
|
| 632 |
return;
|
|
@@ -654,6 +666,28 @@ CUDA_MULMAT_NEW = f""" // {BEGIN}: route segmented Q2_K/Q3_K to pooled-scratc
|
|
| 654 |
}}
|
| 655 |
ggml_cuda_mul_mat_cublas(ctx, src0, src1, dst);"""
|
| 656 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 657 |
|
| 658 |
def _read(p: Path) -> str:
|
| 659 |
return p.read_text(encoding="utf-8")
|
|
@@ -752,7 +786,10 @@ def step_ggml_cuda(root: Path) -> None:
|
|
| 752 |
_backup(cu)
|
| 753 |
anchor = '#include "ggml-cuda.h"'
|
| 754 |
s2 = _insert_after(s2, anchor, '\n#include "hpcq-seg.h"', "ggml-cuda.cu include")
|
|
|
|
| 755 |
s2 = _replace_block(s2, CUDA_MULMAT_OLD, CUDA_MULMAT_NEW, "ggml-cuda.cu mul_mat")
|
|
|
|
|
|
|
| 756 |
_write(cu, s2)
|
| 757 |
|
| 758 |
|
|
|
|
| 627 |
dequantize_block_q3_K<<<nb, 64, 0, stream>>>(vx, y, d_packed, b0, enc);
|
| 628 |
}}"""
|
| 629 |
|
| 630 |
+
CUDA_FUSE_OLD = """ bool use_mul_mat_vec_q = ggml_is_quantized(src0->type) && !bad_padding_clear && src1->type == GGML_TYPE_F32 &&
|
| 631 |
+
dst->type == GGML_TYPE_F32 && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;"""
|
| 632 |
+
|
| 633 |
+
CUDA_FUSE_NEW = f""" // {BEGIN}: do not fuse segmented Q2_K/Q3_K into mmvq
|
| 634 |
+
if ((src0->type == GGML_TYPE_Q2_K || src0->type == GGML_TYPE_Q3_K) &&
|
| 635 |
+
ggml_hpcq_seg_find(src0->data, (int64_t) ggml_type_size(src0->type), nullptr) != nullptr) {{
|
| 636 |
+
return false;
|
| 637 |
+
}}
|
| 638 |
+
// {END}
|
| 639 |
+
bool use_mul_mat_vec_q = ggml_is_quantized(src0->type) && !bad_padding_clear && src1->type == GGML_TYPE_F32 &&
|
| 640 |
+
dst->type == GGML_TYPE_F32 && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;"""
|
| 641 |
+
|
| 642 |
CUDA_MULMAT_OLD = """ if (ggml_cuda_should_use_mmvq(src0->type, cc, ne11)) {
|
| 643 |
ggml_cuda_mul_mat_vec_q(ctx, src0, src1, nullptr, dst);
|
| 644 |
return;
|
|
|
|
| 666 |
}}
|
| 667 |
ggml_cuda_mul_mat_cublas(ctx, src0, src1, dst);"""
|
| 668 |
|
| 669 |
+
CUDA_MMID_SYNC_OLD = """ if (src1->type != GGML_TYPE_F32 || dst->type != GGML_TYPE_F32) {
|
| 670 |
+
return true;
|
| 671 |
+
}"""
|
| 672 |
+
|
| 673 |
+
CUDA_MMID_SYNC_NEW = f""" if (src1->type != GGML_TYPE_F32 || dst->type != GGML_TYPE_F32) {{
|
| 674 |
+
return true;
|
| 675 |
+
}}
|
| 676 |
+
// {BEGIN}: segmented MoE experts use the cublas fallback
|
| 677 |
+
if ((src0->type == GGML_TYPE_Q2_K || src0->type == GGML_TYPE_Q3_K) &&
|
| 678 |
+
ggml_hpcq_seg_find(src0->data, (int64_t) ggml_type_size(src0->type), nullptr) != nullptr) {{
|
| 679 |
+
return true;
|
| 680 |
+
}}
|
| 681 |
+
// {END}"""
|
| 682 |
+
|
| 683 |
+
CUDA_MMID_OLD = """ // [TAG_MUL_MAT_ID_CUDA_GRAPHS]
|
| 684 |
+
if (src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {"""
|
| 685 |
+
|
| 686 |
+
CUDA_MMID_NEW = f""" // [TAG_MUL_MAT_ID_CUDA_GRAPHS]
|
| 687 |
+
const bool hpcq_seg_mmid = (src0->type == GGML_TYPE_Q2_K || src0->type == GGML_TYPE_Q3_K) &&
|
| 688 |
+
ggml_hpcq_seg_find(src0->data, (int64_t) ggml_type_size(src0->type), nullptr) != nullptr; // {BEGIN}/{END}
|
| 689 |
+
if (!hpcq_seg_mmid && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {{"""
|
| 690 |
+
|
| 691 |
|
| 692 |
def _read(p: Path) -> str:
|
| 693 |
return p.read_text(encoding="utf-8")
|
|
|
|
| 786 |
_backup(cu)
|
| 787 |
anchor = '#include "ggml-cuda.h"'
|
| 788 |
s2 = _insert_after(s2, anchor, '\n#include "hpcq-seg.h"', "ggml-cuda.cu include")
|
| 789 |
+
s2 = _replace_block(s2, CUDA_FUSE_OLD, CUDA_FUSE_NEW, "ggml-cuda.cu fuse_mmvq")
|
| 790 |
s2 = _replace_block(s2, CUDA_MULMAT_OLD, CUDA_MULMAT_NEW, "ggml-cuda.cu mul_mat")
|
| 791 |
+
s2 = _replace_block(s2, CUDA_MMID_SYNC_OLD, CUDA_MMID_SYNC_NEW, "ggml-cuda.cu mmid_sync")
|
| 792 |
+
s2 = _replace_block(s2, CUDA_MMID_OLD, CUDA_MMID_NEW, "ggml-cuda.cu mmid")
|
| 793 |
_write(cu, s2)
|
| 794 |
|
| 795 |
|