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(通过 --grammarresponse_format 参数),这对开发 AI Agent 非常关键。
    • 函数调用 (Function Calling): 支持 OpenAI 风格的 tools 定义,让模型能够根据 API 请求决定调用哪个外部函数。