第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)。