llama.cpp
C/C++实现的LLM推理
近期API变更
- https://github.com/ggml-org/llama.cpp/issues/9289
- https://github.com/ggml-org/llama.cpp/issues/9291
热门话题
- Hugging Face 缓存迁移:使用
-hf 下载的模型现在存储在标准 Hugging Face 缓存目录中,可与其他 HF 工具共享。
- https://github.com/ggml-org/llama.cpp/discussions/***
- https://github.com/ggml-org/llama.cpp/discussions/***
- https://github.com/ggml-org/llama.cpp/discussions/***
llama-server 现已支持多模态:https://github.com/ggml-org/llama.cpp/pull/*** | 文档
- 用于 FIM 补全的 VS Code 扩展:https://github.com/ggml-org/llama.vscode
- 用于 FIM 补全的 Vim/Neovim 插件:https://github.com/ggml-org/llama.vim
- Hugging Face GGUF 编辑器:https://github.com/ggml-org/llama.cpp/discussions/9268 | https://huggingface.co/spaces/CISCai/gguf-editor
- 浏览器中现已支持 WebGPU,查看介绍它的博客/演示 https://reeselevine.github.io/llamas-on-the-web/%E3%80%82
快速开始
llama.cpp 的入门使用非常简单。以下是在您的机器上安装它的几种方法:
- 使用 brew、nix、winget 或 conda-forge 安装
llama.cpp
- 使用 Docker 运行 - 参见我们的 Docker 文档
- 从 https://github.com/ggml-org/llama.cpp/releases 下载预构建二进制文件
- 通过克隆此仓库从源代码构建 - 查看 我们的构建指南
安装完成后,您需要一个模型来使用。前往 获取和量化模型 部分了解更多信息。
示例命令:
# 使用本地模型文件
llama-cli -m my_model.gguf
# 或直接从 Hugging Face 下载并运行模型
llama-cli -hf ggml-org/gemma-3-1b-it-GGUF
# 启动兼容 OpenAI 的 API 服务器
llama-server -hf ggml-org/gemma-3-1b-it-GGUF
描述
llama.cpp 的主要目标是在各种硬件上(本地和云端)以最少的设置实现 LLM 推理,并提供最先进的性能。
- 纯 C/C++ 实现,无任何依赖
- Apple silicon 是一等公民 - 通过 ARM NEON、Accelerate 和 Metal 框架进行优化
- 对 x86 架构支持 AVX、AVX2、AVX512 和 AMX
- 对 RISC-V 架构支持 RVV、ZVFH、ZFH、ZICBOP 和 ZIHINTPAUSE
- 1.5 位、2 位、3 位、4 位、5 位、6 位和 8 位整数量化,以实现更快的推理和更低的内存占用
- 用于在 NVIDIA GPU 上运行 LLM 的自定义 CUDA 内核(通过 HIP 支持 AMD GPU,通过 MUSA 支持摩尔线程 GPU)
- 支持 Vulkan 和 SYCL 后端
- CPU+GPU 混合推理,可部分加速大于总 VRAM 容量的模型
llama.cpp 项目是 https://github.com/ggml-org/ggml 库新功能开发的主要试验场。
模型
通常也支持以下基础模型的微调版本。
添加新模型支持的说明:HOWTO-add-model.md
纯文本
多模态
绑定
- Python: https://github.com/ddh0/easy-llama
- Python: https://github.com/abetlen/llama-cpp-python
- Go: https://github.com/go-skynet/go-llama.cpp
- Node.js: https://github.com/withcatai/node-llama-cpp
- JS/TS (llama.cpp 服务器客户端): lgrammel/modelfusion
- JS/TS (可编程提示引擎 CLI): https://github.com/offline-ai/cli
- JavaScript/Wasm (可在浏览器中运行): https://github.com/tangledgroup/llama-cpp-wasm
- Typescript/Wasm (更友好的 API,可在 npm 上获取): https://github.com/ngxson/wllama
- Ruby: https://github.com/yoshoku/llama_cpp.rb
- Ruby: https://github.com/docusealco/rllama
- Rust (功能更丰富): https://github.com/edgenai/llama_cpp-rs
- Rust (更友好的 API): https://github.com/mdrokz/rust-llama.cpp
- Rust (更直接的绑定): https://github.com/utilityai/llama-cpp-rs
- Rust (从 crates.io 自动构建): https://github.com/ShelbyJenkins/llm_client
- C#/.NET: https://github.com/SciSharp/LLamaSharp
- C#/VB.NET (功能更丰富 - 社区许可证): LM-Kit.NET
- Scala 3: https://github.com/donderom/llm4s
- Clojure: https://github.com/phronmophobic/llama.clj
- React Native: https://github.com/mybigday/llama.rn
- Java: https://github.com/kherud/java-llama.cpp
- Java: https://github.com/QuasarByte/llama-cpp-jna
- Zig: https://github.com/Deins/llama.cpp.zig
- Flutter/Dart: https://github.com/netdur/llama_cpp_dart
- Flutter: https://github.com/xuegao-tzx/Fllama
- PHP (基于 llama.cpp 构建的 API 绑定和功能): https://github.com/distantmagic/resonance https://github.com/ggml-org/llama.cpp/pull/6326
- Guile Scheme: guile_llama_cpp
- Swift https://github.com/srgtuszy/llama-cpp-swift
- Swift https://github.com/ShenghaiWang/SwiftLlama
- Delphi https://github.com/Embarcadero/llama-cpp-delphi
- Go (无需 CGo): https://github.com/hybridgroup/yzma
- Android: llama.android
UIs
(若要在此列出项目,该项目应明确声明依赖于 llama.cpp)
- https://github.com/yaroslavyaroslav/OpenAI-sublime-text (MIT)
- BonzAI App (专有)
- https://github.com/cztomsik/ava (MIT)
- https://github.com/alexpinel/Dot (GPL)
- https://github.com/ylsdamxssjxxdd/eva (MIT)
- https://github.com/iohub/coLLaMA (Apache-2.0)
- https://github.com/janhq/jan (AGPL)
- https://github.com/johnbean393/Sidekick (MIT)
- https://github.com/zhouwg/kantv?tab=readme-ov-file (Apache-2.0)
- https://github.com/firatkiral/kodibot (GPL)
- https://github.com/ggml-org/llama.vim (MIT)
- https://github.com/abgulati/LARS (AGPL)
- https://github.com/vietanhdev/llama-assistant (GPL)
- https://github.com/undreamai/LlamaLib (Apache-2.0)
- https://github.com/guinmoon/LLMFarm?tab=readme-ov-file (MIT)
- https://github.com/undreamai/LLMUnity (MIT)
- LMStudio (专有)
- https://github.com/mudler/LocalAI (MIT)
- https://github.com/LostRuins/koboldcpp (AGPL)
- MindMac (专有)
- https://github.com/MindWorkAI/AI-Studio (FSL-1.1-MIT)
- https://github.com/Mobile-Artificial-Intelligence/maid (MIT)
- https://github.com/Mozilla-Ocho/llamafile (Apache-2.0)
- https://github.com/nat/openplayground (MIT)
- https://github.com/nomic-ai/gpt4all (MIT)
- https://github.com/ollama/ollama (MIT)
- https://github.com/oobabooga/text-generation-webui (AGPL)
- https://github.com/a-ghorbani/pocketpal-ai (MIT)
- https://github.com/psugihara/FreeChat (MIT)
- https://github.com/ptsochantaris/emeltal (MIT)
- https://github.com/pythops/tenere (AGPL)
- https://github.com/containers/ramalama (MIT)
- https://github.com/semperai/amica (MIT)
- https://github.com/withcatai/catai (MIT)
- https://github.com/***89/autopen (GPL)
Tools
- https://github.com/akx/ggify – 从 Hugging Face Hub 下载 PyTorch 模型并将其转换为 GGML
- https://github.com/akx/ollama-dl – 从 Ollama 库下载模型以直接与 llama.cpp 一起使用
- https://github.com/crashr/gppm – 启动利用 NVIDIA Tesla P40 或 P100 GPU 的 llama.cpp 实例,降低空闲功耗
- https://github.com/gpustack/gguf-parser-go/tree/main/cmd/gguf-parser - 查看/检查 GGUF 文件并估算内存使用情况
- Styled Lines (专有许可,Unity3d 游戏开发推理部分的异步包装器,带有预构建的移动和 Web 平台包装器以及模型示例)
- https://github.com/unslothai/unsloth – 🦥 将微调及训练后的模型导出/保存为 GGUF(Apache-2.0)
Infrastructure
- https://github.com/intentee/paddler - 用于在自有基础设施中托管和扩展 AI 的开源 LLMOps 平台
- https://github.com/gpustack/gpustack - 管理用于运行 LLM 的 GPU 集群
- https://github.com/onicai/llama_cpp_canister - 使用 WebAssembly 在 Internet Computer 上作为智能合约的 llama.cpp
- https://github.com/mostlygeek/llama-swap - 透明代理,通过 llama-server 添加自动模型切换功能
- https://github.com/kalavai-net/kalavai-client - 众包端到端 LLM 部署,支持任意规模
- https://github.com/InftyAI/llmaz - ☸️ 适用于 Kubernetes 上大型语言模型的简单、高级推理平台。
- https://github.com/defilantech/llmkube - 用于 llama.cpp 的 Kubernetes 运算符,支持多 GPU 和 Apple Silicon Metal
Games
llama-cli
一个用于访问和试验 llama.cpp 大部分功能的 CLI 工具。
以对话模式运行
具有内置聊天模板的模型会自动激活对话模式。如果未自动激活,可通过添加 -cnv 并使用 --chat-template NAME 指定合适的聊天模板来手动启用。
llama-cli -m model.gguf
#
> hi, who are you?
# Hi there! I'm your helpful assistant! I'm an AI-powered chatbot designed to assist and provide information to users like you. I'm here to help answer your questions, provide guidance, and offer support on a wide range of topics. I'm a friendly and knowledgeable AI, and I'm always happy to help with anything you need. What's on your mind, and how can I assist you today?
#
#
> what is 1+1?
# Easy peasy! The answer to 1+1 is... 2!
使用自定义聊天模板运行对话模式
# 使用 "chatml" 模板(使用 -h 查看支持的模板列表)
llama-cli -m model.gguf -cnv --chat-template chatml
# 使用自定义模板
llama-cli -m model.gguf -cnv --in-prefix 'User: ' --reverse-prompt 'User:'
使用自定义语法约束输出
llama-cli -m model.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Request: schedule a call at 8pm; Command:'
# {"appointmentTime": "8pm", "appointmentDetails": "schedule a a call"}
grammars/ 文件夹包含一些示例语法。要编写自己的语法,请查看 GBNF 指南。
如需编写更复杂的 JSON 语法,请访问 [***]
llama-server
一个轻量级、与 https://github.com/openai/openai-openapi 兼容的 LLM 服务 HTTP 服务器。
使用默认配置在 8080 端口启动本地 HTTP 服务器
llama-server -m model.gguf --port 8080
# 可通过浏览器访问基本 Web UI:http://localhost:8080
# 聊天补全端点:http://localhost:8080/v1/chat/completions
支持多用户和并行解码
# 最多 4 个并发请求,每个请求最大上下文为 4096
llama-server -m model.gguf -c 16384 -np 4
启用推测解码
# draft.gguf 模型应为目标 model.gguf 的小型变体
llama-server -m model.gguf -md draft.gguf
提供嵌入模型服务
# 使用 /embedding 端点
llama-server -m model.gguf --embedding --pooling cls -ub 8192
提供重排序模型服务
# 使用 /reranking 端点
llama-server -m model.gguf --reranking
使用语法约束所有输出
# 自定义语法
llama-server -m model.gguf --grammar-file grammar.gbnf
# JSON
llama-server -m model.gguf --grammar-file grammars/json.gbnf
依赖项
- https://github.com/yhirose/cpp-httplib - 单头文件HTTP服务器,供
llama-server使用 - MIT许可证
- https://github.com/nothings/stb - 单头文件图像格式解码器,供多模态子系统使用 - 公共领域
- https://github.com/nlohmann/json - 单头文件JSON库,供各种工具/示例使用 - MIT许可证
- https://github.com/mackron/miniaudio - 单头文件音频格式解码器,供多模态子系统使用 - 公共领域
- https://github.com/sheredom/subprocess.h - 用于C和C++的单头文件进程启动解决方案 - 公共领域