llama.cpp 概述
概述
- 开源仓库: https://github.com/ggerganov/llama.cpp
- 简介:由 Georgi Gerganov 开发的开源项目,核心目标是:在没有高端 GPU 的情况下,依然能够高效运行 LLM(大语言模型)
- 核心技术:
- 纯 C/C++ 实现:不依赖Python 环境或重量框架(PyTorch、TensorFlow),轻量且高效。
- 模型格式:支持高效的GGML/GGUF 二进制模型格式,提高了兼容性。
- 量化支持:支持将 16-bit 权重量化为 4-bit、3-bit 甚至 2-bit。降低显存需求
- 兼容性
- 全平台运行
- Mac: 深度优化 Apple Silicon(M1/M2/M3),通过 Metal API 实现极速推理
- PC: 支持 Windows、Linux,兼容 NVIDIA (CUDA)、AMD (ROCm) 以及 Intel GPU
- 移动端/嵌入式: 可以在 Android、iOS 甚至树莓派上跑大模型。
- 运行时 - 显卡方案
- CUDA (NVIDIA): 最成熟、性能最强的后端。支持所有 NVIDIA GPU,并具备“分布式多显卡”流水线并行能力。
- Metal (Apple Silicon): Mac 用户的神器。
llama.cpp 对 M1/M2/M3/M4 芯片的 GPU 和 Neural Engine (ANE) 做了深度适配,实现内存与显存共享的极速推理。 - ROCm/HIP 加速: 这是 AMD 显卡的“原生”高性能方案。在编译时通过
-DGGML_HIP=ON 开启,可以让 AMD 显卡(如 RX 6000/7000 系列)获得接近 CUDA 的推理性能。 - Vulkan 支持: 这是一个跨平台的方案(
-DGGML_VULKAN=ON)。如果你的 AMD 显卡驱动在 Linux 或 Windows 下对 ROCm 支持不佳,Vulkan 是一个极佳的替代选择,兼容性极高。 - SYCL (Intel): 专门用于 Intel GPU(包括 Arc 独显、数据中心级 Flex/Max 系列以及酷睿处理器的核显 iGPU)。
- CANN (Huawei Ascend): 支持华为昇腾 (Ascend) 系列芯片,这对于国内使用国产算力卡的用户非常友好。
- 混合推理: 即使显存不足以装下整个模型,它也支持将部分层分给 AMD GPU,剩下的跑在 CPU 上,极大提升了旧硬件的利用率。
- 运行时 - CPU方案
- OpenBLAS / Intel MKL: 显著加速 Prompt(提示词)的预处理速度。
- Apple Accelerate: 针对 Mac CPU 的专门指令集优化。
- Arm KleidiAI: 2024-2025 年加入的新特性,专门针对 ARM 架构(如手机芯片、AWS Graviton 服务器)进行向量化指令集(SVE/NEON)优化。
- 运行时 - 其它
- 分布式计算: 支持通过 RPC (Remote Procedure Call) 将一个巨大的模型拆分到多台机器上运行。
- WebAssembly (WASM): 支持将
llama.cpp 编译并在浏览器中直接运行(无需后端服务器)。 - Android (Termux/Native): 可以在安卓手机上原生运行,并利用移动端 GPU 或 NPU 加速。
- Openai兼容
- 提供接口:启动
llama-server,它就会在本地开启一个 HTTP 服务 - API Key 鉴权: 虽然默认开放,但你可以通过
--api-key 参数设置访问令牌,确保在局域网暴露时只有授权用户能用。 - 监控端点: 提供
/metrics (Prometheus 格式) 和 /health 接口,方便你监控显存占用、推理速度(Tokens/s)和排队情况。 - 标准 Endpoint: 支持
/v1/chat/completions、/v1/completions 和 /v1/embeddings。 - 无缝对接工具: 绝大多数为 ChatGPT 设计的第三方客户端(如 Cherry Studio, NextChat, BetterGPT)或开发框架(如 LangChain, LlamaIndex),只需将
base_url 改为 http://localhost:8080/v1 即可直接使用。 - 多模态 API 支持 (Vision):兼容 OpenAI 的
image_url 格式,支持 Base64 编码的图片
- 推理优化
- 连续批处理 (Continuous Batching): 支持多个用户同时请求,服务器会自动合并推理任务,极大地提升多用户并发时的吞吐量。
- 插槽管理 (Slot Management): 每个 API 请求可以占用一个“插槽”,Server 会智能管理 KV Cache(键值缓存),如果你连续问同一个问题,响应会瞬间完成。
- 结构化输出 (JSON Schema): 可以在 API 请求中强制要求模型返回特定格式的 JSON(通过
--grammar 或 response_format 参数),这对开发 AI Agent 非常关键。 - 函数调用 (Function Calling): 支持 OpenAI 风格的
tools 定义,让模型能够根据 API 请求决定调用哪个外部函数。