CompressedGemma commited on
Commit
396a58e
·
verified ·
1 Parent(s): 9384c4e

Upload patch_llamacpp_hpcq_seg.py

Browse files
Files changed (1) hide show
  1. 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