gemma.cpp 是一种轻量级纯 C++ Gemma 模型的推理运行时实现。
如需详细了解 Gemma,请参阅模型卡片。 模型权重(包括 gemma.cpp 特定的工件)可在 Kaggle。
此项目的适用对象
现代 LLM 推理引擎是复杂的系统,通常具有定制服务 超越传统神经网络运行时的能力。这个 通过高水平的协同设计来为研究和创新带来机会 算法和低阶计算。然而,两者之间 面向部署的 C++ 推理运行时, 以及以 Python 为中心的机器学习研究框架, 通过编译进行低级别计算。
gemma.cpp 为 Gemma 2B 和 7B 模型提供了极简实现, 注重简单性和直接性,而不是全面的普遍性。这是 灵感源自垂直集成的 C++ 模型实现, ggml, llama.c 和 llama.rs。
gemma.cpp 针对实验和研究用例,尤其是 探索 CPU 推理和推理算法的设计空间, 经由 Google Highway 推出的便携式 SIMD 库。我们希望它可以直接嵌入到 依赖项最少,而且只需使用约 2000 个小型 LoC 核心即可轻松修改 (以及大约 4,000 个支持实用程序的 LoC)。
对于面向生产的边缘部署,我们建议使用标准部署 使用 JAX、Keras、PyTorch 和 转换器(所有模型变体 此处)。
我们欢迎各种大小的观众投稿。此项目遵循 Google 的开源社区准则。
快速入门
要完成本快速入门,您必须克隆或下载 gemma.cpp.
系统要求
在开始之前,您应该已经安装:
- CMake
- Clang C++ 编译器
tar
,用于从 Kaggle 提取归档。
第 1 步:从 Kaggle 获取模型权重和标记生成器
请访问 Kaggle,然后选择“Model Variations”
Gemma C++
. On this tab, the
变体下拉列表包含以下选项 选项。请注意,bfloat16 权重选项保真度较高,而 8 位 交换浮点权重可实现更快的推理。
2B 指令调优 (it
) 模型和预训练 (pt
) 模型:
模型名称 | 说明 |
---|---|
2b-it |
20 亿个参数指令调优模型,bfloat16 |
2b-it-sfp |
20 亿个参数指令调优模型,8 位交换浮点数 |
2b-pt |
20 亿个参数的预训练模型,bfloat16 |
2b-pt-sfp |
20 亿个参数的预训练模型,8 位交换点 |
70 亿个指令调优 (it
) 模型和预训练 (pt
) 模型:
模型名称 | 说明 |
---|---|
7b-it |
70 亿个参数指令调优模型,bfloat16 |
7b-it-sfp |
70 亿个参数指令调优模型,8 位交换浮点数 |
7b-pt |
70 亿个参数的预训练模型 (bfloat16) |
7b-pt-sfp |
70 亿个参数预训练模型,8 位切换浮点数 |
注意:我们建议从 2b-it-sfp
开始,以便快速上手。
第 2 步:提取文件
填写同意书后,应继续进行下载,以检索
tar 归档文件 archive.tar.gz
。从 archive.tar.gz
提取文件(这可以
):
tar -xf archive.tar.gz
这应该会生成一个包含模型权重(例如 2b-it-sfp.sbs
和
标记生成器文件 (tokenizer.spm
)。您可能需要将这些文件移到
方便的目录位置(例如此代码库中的 build/ 目录)。
第 3 步:构建
构建系统使用 CMake。为了构建 gemma 推理,
运行时,创建一个 build 目录并使用 cmake
生成 build 文件
从顶级项目目录下迁移:
(cd build && cmake ..)
然后,运行 make
以构建 ./gemma
可执行文件:
cd build
make -j [number of parallel threads to use] gemma
例如,make -j 8 gemma
。如果上传成功
build/
目录中的 gemma
可执行文件。
第 4 步:运行
现在,您可以从 build/
目录内运行 gemma
。
gemma
具有以下必需参数:
参数 | 说明 | 示例值 |
---|---|---|
--model |
模型类型。 | 2b-it 、2b-pt 、7b-it 、7b-pt ...(参见上文) |
--compressed_weights |
压缩的权重文件。 | 2b-it-sfp.sbs ...(参见上文) |
--tokenizer |
标记生成器文件名。 | tokenizer.spm |
调用 gemma
的方式如下:
./gemma \
--tokenizer [tokenizer file] \
--compressed_weights [compressed weights file] \
--model [2b-it or 2b-pt or 7b-it or 7b-pt]
针对以下配置的示例调用:
- 压缩的权重文件
2b-it-sfp.sbs
(2B 指令调优模型,8 位) 交换浮点数)。 - 标记生成器文件
tokenizer.spm
。
./gemma \
--tokenizer tokenizer.spm \
--compressed_weights 2b-it-sfp.sbs \
--model 2b-it
用法
gemma
具有不同的使用模式,由详细程度标志控制。
所有使用模式都是互动式的,可触发文本生成 换行符输入。
详细程度 | 使用模式 | 详细信息 |
---|---|---|
--verbosity 0 |
最小 | 仅打印生成输出。适合用作 CLI 工具。 |
--verbosity 1 |
默认 | 面向用户的标准终端界面。 |
--verbosity 2 |
明细 | 显示其他开发者和调试信息。 |
交互式终端应用
默认情况下,详细程度设置为 1,从而启动基于终端的互动
会在使用所需参数调用 gemma
时返回该接口:
$ ./gemma [...]
__ _ ___ _ __ ___ _ __ ___ __ _ ___ _ __ _ __
/ _` |/ _ \ '_ ` _ \| '_ ` _ \ / _` | / __| '_ \| '_ \
| (_| | __/ | | | | | | | | | | (_| || (__| |_) | |_) |
\__, |\___|_| |_| |_|_| |_| |_|\__,_(_)___| .__/| .__/
__/ | | | | |
|___/ |_| |_|
tokenizer : tokenizer.spm
compressed_weights : 2b-it-sfp.sbs
model : 2b-it
weights : [no path specified]
max_tokens : 3072
max_generated_tokens : 2048
*Usage*
Enter an instruction and press enter (%Q quits).
*Examples*
- Write an email to grandma thanking her for the cookies.
- What are some historical attractions to visit around Massachusetts?
- Compute the nth fibonacci number in javascript.
- Write a standup comedy bit about WebGPU programming.
> What are some outdoorsy places to visit around Boston?
[ Reading prompt ] .....................
**Boston Harbor and Islands:**
* **Boston Harbor Islands National and State Park:** Explore pristine beaches, wildlife, and maritime history.
* **Charles River Esplanade:** Enjoy scenic views of the harbor and city skyline.
* **Boston Harbor Cruise Company:** Take a relaxing harbor cruise and admire the city from a different perspective.
* **Seaport Village:** Visit a charming waterfront area with shops, restaurants, and a seaport museum.
**Forest and Nature:**
* **Forest Park:** Hike through a scenic forest with diverse wildlife.
* **Quabbin Reservoir:** Enjoy boating, fishing, and hiking in a scenic setting.
* **Mount Forest:** Explore a mountain with breathtaking views of the city and surrounding landscape.
...
作为命令行工具的使用
如需将 gemma
可执行文件用作命令行工具,以下操作可能会对您有所帮助:
使用完全指定的参数为 gemma.cpp 创建别名:
alias gemma2b="~/gemma.cpp/build/gemma -- --tokenizer
~/gemma.cpp/build/tokenizer.spm --compressed_weights
~/gemma.cpp/build/2b-it-sfp.sbs --model 2b-it --verbosity 0"
将上述路径替换为您自己的模型路径和标记生成器路径 。
下面是一个使用截断的输入内容提示 gemma
的示例(使用
gemma2b
别名(如上文所定义):
cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code
do: " | gemma2b
注意:gemma.cpp 的 CLI 用法尚处于实验阶段,需要占用上下文长度 限制和限制。
上述命令的输出应如下所示:
$ cat configs.h | tail -35 | tr '\n' ' ' | xargs -0 echo "What does this C++ code do: " | gemma2b
[ Reading prompt ] ......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
The code defines two C++ structs, `ConfigGemma7B` and `ConfigGemma2B`, which are used for configuring a deep learning model.
**ConfigGemma7B**:
* `seq_len`: Stores the length of the sequence to be processed. It's set to 7168.
* `vocab_size`: Stores the size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 28.
* `dim_model`: Dimension of the model's internal representation. It's set to 3072.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 3072 / 2.
**ConfigGemma2B**:
* `seq_len`: Stores the length of the sequence to be processed. It's also set to 7168.
* `vocab_size`: Size of the vocabulary, which is 256128.
* `n_layers`: Number of layers in the deep learning model. It's set to 18.
* `dim_model`: Dimension of the model's internal representation. It's set to 2048.
* `dim_ffw_hidden`: Dimension of the feedforward and recurrent layers' hidden representations. It's set to 16 * 2048 / 2.
These structs are used to configure a deep learning model with specific parameters for either Gemma7B or Gemma2B architecture.