gemma.cpp
纯 CPU 运行、轻量级 C++ 推理引擎,无需 GPU 即可本地部署 Gemma 2-3 系列模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯 CPU 运行、轻量级 C++ 推理引擎,无需 GPU 即可本地部署 Gemma 2-3 系列模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你或许有过这样的经历:想要在本地跑一个大语言模型,却被 GPU 显存、CUDA 版本、Python 环境折腾得焦头烂额。当你看到"需要 16GB 显存"的要求时,大概会默默关掉浏览器。而 gemma.cpp 正是 Google 给这个痛点的一个优雅答案——用纯 C++ 实现一个轻量推理引擎,不需要 GPU,不需要复杂的 Python 环境,一台普通电脑就能跑通 Gemma 2-3 全系列模型。
在 gemma.cpp 出现之前,Gemma 模型的官方推理路径主要有两条:JAX/Keras 生态(研究导向,依赖 Google 云服务)和 PyTorch/Transformers 生态(通用方案,但环境配置繁琐)。这两条路都有一个问题——它们是为生产环境设计的,对普通开发者的本地实验并不友好。
gemma.cpp 的诞生源于一个观察:Python-centric 的 ML 框架抽象掉了底层细节固然好用,但也阻碍了研究者对底层计算的理解和创新;而传统的 C++ 推理引擎往往追求功能完备,代码量庞大,定制困难。Google 团队决定做一个"中间路线"——用极简的代码量实现 Gemma 核心推理能力,让研究者和开发者既能运行模型,又能在代码层面动手实验。
项目由 Google 官方维护,Apache-2.0 开源许可,社区活跃度高(640+ forks,34 个 open issues,Discord 频道)。这是一个正在活跃开发的实验性项目(dev 分支为主开发分支),而非一个已"冻结"的生产库。
gemma.cpp 的核心代码量被严格控制在约 2K 行核心逻辑 + 4K 行工具函数,这在动辄数万行的推理框架中堪称"清流"。极简代码量的背后,是几个关键技术的精心选择:
Google Highway 库:作为 SIMD(单指令多数据)向量化的基础设施,Highway 是一个零依赖的 C++ 库,可以在运行时自动选择最优的 CPU 指令集(AVX2、AVX-512、SVE 等)。这意味着同一份代码在 AMD Ryzen、Intel Xeon 或 ARM 服务器上都能高效运行,无需手动编写多套汇编。gemma.cpp 通过 Highway 实现了 BF16 GEMM(矩阵乘法)等核心算子,即使在没有 GPU 的情况下也能利用 CPU 向量单元获得可观的算力。
多精度权重量化:项目内置了多种量化格式的支持,包括 FP8(自定义 2-3 位 mantissa 格式)、BF16(Google 主导的 16 位浮点格式)、FP32,以及非均匀 4 位量化(NUQ)。这让同一模型可以在精度和速度之间灵活取舍。以 gemma2-2b-it-sfp 为例,8 位量化后的权重文件仅需约 1GB 存储,普通电脑的 RAM 完全可以装下。
PaliGemma 2 视觉支持:除了纯文本模型,gemma.cpp 还支持 PaliGemma 2 多模态模型,可以处理图像 + 文本的输入。不过目前图像格式支持有限(仅支持 PPM),需要用 ImageMagick convert 工具预处理图片,这是目前的一个小门槛。
编译构建:项目使用 CMake 作为主要构建系统(也支持 Bazel)。Linux/macOS 用户只需运行:
cmake -B build
cmake --preset make
cmake --build --preset make -j$(nproc) gemma
Windows 用户需要安装 Visual Studio Build Tools + Clang/LLVM,前置工作较多,项目文档也建议 Windows 用户使用 WSL(Windows Subsystem for Linux)。
模型获取:这是整个流程中最需要注意的环节——模型权重需要从 Kaggle 下载,不能直接从 Hugging Face 获取(Kaggle 需要注册账号并同意使用条款)。推荐从 gemma2-2b-it-sfp(2B 参数指令微调版)入手,文件最小、启动最快。
运行推理:
./gemma --tokenizer tokenizer.spm --weights gemma2-2b-it-sfp.sbs
gemma.cpp 还提供了交互式命令行模式,启动后直接输入问题即可获得回答。
gemma.cpp 还内置了一个 HTTP API 服务器,实现了 Google API 协议(与 Gemini API 接口兼容),支持:
POST /v1beta/models/{model}:generateContent(批量推理)POST /v1beta/models/{model}:streamGenerateContent(SSE 流式输出)编译后运行 ./gemma_api_server 即可启动,配合 ./gemma_api_client 客户端工具,可以像调用 Gemini API 一样调用本地模型。此外,如果拥有 Google API Key,也可以将客户端指向 Google 官方 API,用同一套代码在不同模式间切换。
gemma.cpp 非常坦诚地在 README 中说明了它的定位:这不是一个生产级部署方案。对于需要高并发、低延迟的企业级应用,官方推荐使用 JAX/Keras 或 PyTorch 生态。项目本身的局限性包括:
dev,API 协议和格式可能随版本变化gemma.cpp 代表了一个有价值的趋势——将大模型推理的"研究友好度"提升到与"运行效率"同等重要的位置。它受 llama.c、llama.rs、ggml 等"极简推理"项目的启发,将这一理念带入 Google 官方生态。相比 llama.cpp,gemma.cpp 的代码更加模块化(compression/、ops/、io/ 目录清晰分离),对想学习推理引擎实现的开发者更友好。
从更宏观的角度看,随着 Gemma 3(最高 27B 参数)的加入,gemma.cpp 的能力边界正在扩展。"在普通开发机上跑 27B 模型"这件事本身就是一个值得关注的里程碑——它意味着 AI 推理的硬件门槛正在被代码层面的优化持续降低。
总结:gemma.cpp 是一个为研究者和动手型开发者设计的轻量推理引擎。极简代码、模块化架构、纯 CPU 运行、Google Highway SIMD 优化是它的核心标签。如果你想要一个"能改代码、能看实现、能跑实验"的 Gemma 推理环境,它是最值得尝试的选择;如果你需要的是开箱即用的 Web UI 或 Docker 一键部署,它目前还无法满足。