进阶 lmql.ai 2026-10-11 18:10:44 · 27 阅读

第17章 llama.cpp 在 LMQL 中的使用指南

llama.cpp

LMQL 也将 llama.cpp 作为推理后端。这支持使用打包为 .gguf 文件的模型,该模型通过 llama.cpp C++ 实现,可在仅 CPU 环境及混合 CPU/GPU 环境中高效运行。

前置条件

在使用 llama.cpp 模型前,请确保已通过 pip install llama-cpp-python 在 LMQL 所在的同一环境中安装其 Python 绑定。此外,还需安装 sentencepiece 或 transformers 包用于分词。若需启用 GPU 加速的 llama.cpp 推理,需根据 README.md 中的说明,附带相应的编译标志安装 llama-cpp-python 包。

使用 llama.cpp 模型

与 Transformers 模型类似,你可以从本地加载 llama.cpp 模型,或通过长期运行的 lmql serve-model 推理服务器进行访问。

模型服务器

启动 llama.cpp 模型服务器,使用以下命令:

lmql serve-model llama.cpp:<权重文件路径>.gguf

这将启动一个位于 localhost:8080 的 LMTP 推理端点,可在 LMQL 中使用对应的 lmql.model(...) 对象调用。

调用 llama.cpp 端点

要访问已服务的 llama.cpp 模型,可使用带有以下客户端配置的 lmql.model(...) 对象:

lmql.model("llama.cpp:<权重文件路径>.gguf", tokenizer="<分词器>")

模型路径:客户端 lmql.model(...) 的标识符必须与服务端 lmql serve-model 指定的 GGUF 位置完全一致,即使该路径在客户端机器上不存在。在此场景中,它仅用作模型的唯一标识符。

分词器:若省略 tokenizer=...,LMQL 默认使用基于 transformers 的 huggyllama/llama-7b 分词器。这适用于 Llama 及其微调模型,但其他模型需调整以匹配。要为具体的 gguf 文件查找匹配的分词器,可在 HuggingFace 模型中心查询对应的 transformers 条目。或者,可使用 sentencepiece 作为分词后端,此时需在客户端指定对应的 tokenizer.model 文件路径。

无需模型服务器运行

若要将 llama.cpp 直接作为执行查询程序的 Python 进程的一部分加载,可使用 local: 前缀,后接 gguf 文件路径:

lmql.model("local:llama.cpp:<权重文件路径>.gguf", tokenizer="<分词器>")

同样,若希望使用 huggyllama/llama-7b 的默认分词器,可省略 tokenizer=... 参数。否则,需按上述说明指定分词器。

配置 Llama(...) 实例

传递给 lmql serve-model 的参数(在本地运行时为 lmql.model(...) 的参数)会透传给 Llama(...) 构造函数。

例如,若要将 Llama(...) 实例的 n_ctx 值配置为 1024,可运行:

lmql serve-model llama.cpp:<权重文件路径>.bin --n_ctx 1024

或者,在本地运行时,可使用 lmql.model("local:llama.cpp:<权重文件路径>.bin", n_ctx=1024)。

评论 (0)