mirror of
https://github.com/kvcache-ai/ktransformers.git
synced 2026-04-28 11:49:51 +00:00
[Feature] Add avx-based kimi-k2 support (#1656)
Some checks are pending
Book-CI / test-2 (push) Waiting to run
Book-CI / test (push) Waiting to run
Book-CI / test-1 (push) Waiting to run
Deploy / deploy (macos-latest) (push) Waiting to run
Deploy / deploy (ubuntu-latest) (push) Waiting to run
Deploy / deploy (windows-latest) (push) Waiting to run
Some checks are pending
Book-CI / test-2 (push) Waiting to run
Book-CI / test (push) Waiting to run
Book-CI / test-1 (push) Waiting to run
Deploy / deploy (macos-latest) (push) Waiting to run
Deploy / deploy (ubuntu-latest) (push) Waiting to run
Deploy / deploy (windows-latest) (push) Waiting to run
* support Kimi-K2-Thinking original weight fix amx kernel bug * update k2 avx kernel. * feat: add CPUInfer write buffer task * [feat]: add kimi k2 cpu write buffer support - Implement write_weights_to_buffer function in k2-moe.hpp for extracting GPU expert weights - Fix down (w2) weight column-wise slicing for different TP configurations - Support three TP scenarios: cpu_tp == gpu_tp, cpu_tp > gpu_tp, cpu_tp < gpu_tp - Add comprehensive test cases for weight extraction validation - Ensure compatibility with Kimi model's MoE architecture * [fix]: correct write_weight_scale_to_buffer expert offset calculation Fixed the bug in write_weight_scale_to_buffer_task where expert offsets in GPU buffers were incorrectly calculated. Changed from using per_expert_gpu sizes to using full gpu_tp sizes, ensuring correct memory layout for multi-expert scenarios. Also added benchmark scripts for k2 moe and write buffer operations, and cleaned up debug output in test files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * [feat]: add write buffer wrapper * [fix] fix comment --------- Co-authored-by: ouqingliang <1692110604@qq.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
c2b8c60c4e
commit
fcf8882075
12 changed files with 2649 additions and 34 deletions
|
|
@ -237,6 +237,56 @@ class SafeTensorLoader:
|
|||
return name in self.tensor_file_map
|
||||
|
||||
|
||||
class CompressedSafeTensorLoader(SafeTensorLoader):
|
||||
"""Loader for compressed SafeTensor layouts (RAWINT4 weights)."""
|
||||
|
||||
def load_experts(self, base_key: str, device: str = "cpu"):
|
||||
"""Load raw expert weights stored in compressed safetensor format."""
|
||||
|
||||
experts_prefix = f"{base_key}.mlp.experts"
|
||||
|
||||
expert_idx = 0
|
||||
while self.has_tensor(f"{experts_prefix}.{expert_idx}.up_proj.weight_packed"):
|
||||
expert_idx += 1
|
||||
|
||||
if expert_idx == 0:
|
||||
raise ValueError(f"No experts found for key {experts_prefix}")
|
||||
|
||||
def load_projection(proj_name: str):
|
||||
weight_entries = []
|
||||
scale_entries = []
|
||||
|
||||
for exp_id in range(expert_idx):
|
||||
weight_key = f"{experts_prefix}.{exp_id}.{proj_name}_proj.weight_packed"
|
||||
scale_key = f"{experts_prefix}.{exp_id}.{proj_name}_proj.weight_scale"
|
||||
|
||||
if not self.has_tensor(weight_key):
|
||||
raise KeyError(f"Missing tensor: {weight_key}")
|
||||
if not self.has_tensor(scale_key):
|
||||
raise KeyError(f"Missing tensor: {scale_key}")
|
||||
|
||||
weight_tensor = self.load_tensor(weight_key, device).contiguous()
|
||||
scale_tensor = self.load_tensor(scale_key, device).contiguous()
|
||||
|
||||
weight_entries.append(weight_tensor)
|
||||
scale_entries.append(scale_tensor)
|
||||
|
||||
return weight_entries, scale_entries
|
||||
|
||||
gate_weights, gate_scales = load_projection("gate")
|
||||
up_weights, up_scales = load_projection("up")
|
||||
down_weights, down_scales = load_projection("down")
|
||||
|
||||
return {
|
||||
"gate": gate_weights,
|
||||
"up": up_weights,
|
||||
"down": down_weights,
|
||||
"gate_scale": gate_scales,
|
||||
"up_scale": up_scales,
|
||||
"down_scale": down_scales,
|
||||
}
|
||||
|
||||
|
||||
class GGUFLoader:
|
||||
"""
|
||||
GGUF format loader using the official gguf library (gguf.gguf_reader.GGUFReader)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue