ik_llama. cpp:当普通的 llama. cpp 已经不够用时
熟悉的场景:你在电脑上运行语言模型,却发现它几乎跑不动?如果没有顶级的 GPU,只有普通的处理器,这种情况尤其常见。这正是 ik_llama. cpp 诞生的原因——一个专注于在 CPU 和混合 CPU/GPU 配置上实现最大性能的 llama. cpp 分支版本。
这是什么以及为什么你需要它
ik_llama. cpp 是 llama. cpp 项目的分支,由 Ivan Kavrakov(ikawrakow)创建。主要目标是提供一个在普通硬件上运行语言模型的更高性能解决方案。如果原始的 llama. cpp 已经很不错,那么这个分支让它更上一层楼,尤其适用于以下场景:
- 在 CPU 上运行(包括移动设备)
- 使用混合 CPU/GPU 配置
- 应用现代量化方法
该项目正在积极开发中:截至撰写本文时,它在 GitHub 上拥有 10,098 颗星和 125 个分支。
主要特性
1. 先进的量化方法
该项目实现了多种新的量化类型,能显著减小模型体积同时保持最小的质量损失:
- Trellis quants(Q3_K_M、Q4_K_M、Q5_K_M、Q6_K)——基于新的整数网格,在 CPU 上提供合理的性能
- IQK quants——一整套量化方法,包括 Q8_0、IQ2_XS、IQ3_XS 等
- Q4_K_M——用于 8 位 KV 缓存量化的新类型
这些方法使得以前需要 GPU 才能运行的模型现在可以在普通处理器上运行。
2. DeepSeek 模型的 Flash-MLA
特别值得关注的是 DeepSeek 模型的 FlashMLA 实现(MLA——多层注意力):
- FlashMLA-3——CPU 上最快的实现
- Nvidia GPU 的 CUDA 支持(Ampere 或更新版本)
- 能够在 MLA 中使用 Q4_K_M 量化缓存
正如作者所指出的,FlashMLA-3 在 CPU 上为 DeepSeek 模型提供了破纪录的性能。
3. 混合 CPU/GPU 处理
该项目提供了对操作执行位置进行细粒度控制的能力:
- Tensor overrides 用于管理权重放置位置(GPU 或 CPU)
- 改进了 MoE(混合专家)模型的卸载策略
- 在需要时能够禁用 CPU FA(Flash Attention)内核
这对于配备独立显卡的系统特别有用,你可以在处理器和显卡之间分配负载。
技术细节
该项目使用 C++ 编写,支持:
- 多种 CPU 架构:AVX2、NEON、Zen4
- 用于 GPU 计算的 CUDA
- 用于 Apple Silicon 的 Metal
- 甚至可以通过 Termux 在 Android 上运行
有趣的技术解决方案:
- 融合 MoE 操作——加速混合专家架构模型的推理
- 行交错量化打包——高效打包量化数据
- 智能专家缩减——更快的 DeepSeek 推理智能专家缩减
实际应用
ik_llama. cpp 特别有用的场景:
- 本地运行大型模型——当你无法访问强大 GPU 但需要使用现代 LLM 时
- 移动设备——能够通过 Termux 在 Android 上运行
- 混合系统——在一个系统中同时最优利用 CPU 和 GPU
- 量化实验——为研究人员提供许多新的量化方法
例如,正如某次讨论中提到的,即使在 16 块 Nvidia RTX 3090 的配置上,该项目也能高效运行 DeepSeek-V3。
入门指南
- 克隆仓库:
git clone https://github.com/ikawrakow/ik_llama.cpp
cd ik_llama.cpp
- 构建项目(Linux 示例):
mkdir build
cd build
cmake ..
make -j
- 测试函数调用功能:
cd build
cmake --build . --target test-function-calls
./bin/test-function-calls
结论:值得一试吗?
如果符合以下条件,ik_llama. cpp 是一个绝佳选择:
- 你需要在 CPU 上获得最大性能
- 你使用 DeepSeek、LLaMA-3、Qwen3 等现代模型
- 你想尝试先进的量化方法
- 你有一个 CPU 和 GPU 混合的系统
该项目正在积极开发,采用 MIT 许可证,并对贡献者开放。如果你已经在使用 llama. cpp,切换到这个分支可以在不增加额外成本的情况下获得显著的性能提升。
要更详细地了解该项目的能力,我建议探索:
- 项目 Wiki,包含性能对比
- 新量化类型的讨论
- DeepSeek 模型指南
相关项目