1. 大模型部署工具 llama.cpp
大模型的研究分为训练和推理两个部分。训练的过程,实际上就是在寻找模型参数,使得模型的损失函数最小化,推理结果最优化的过程。训练完成之后,模型的参数就固定了,这时候就可以使用模型进行推理,对外提供服务。
llama.cpp(https://github.com/ggerganov/llama.cpp)主要解决的是推理过程中的性能问题。主要有两点优化:
- llama.cpp 使用的是 C 语言写的机器学习张量库 ggml。
- llama.cpp 提供了模型量化的工具。
计算类 Python 库的优化手段之一就是使用 C 重新实现,这部分的性能提升非常明显。另外一个是量化,量化是通过牺牲模型参数的精度,来换取模型的推理速度。llama.cpp 提供了大模型量化的工具,可以将模型参数从 32 位浮点数转换为 16 位浮点数,甚至是 8、4 位整数。
除此之外,llama.cpp 还提供了服务化组件,可以直接对外提供模型的 API。
2. 使用 llama.cpp 量化模型
2.1 下载编译 llama.cpp
克隆代码,编译 llama.cpp:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
在目录下会生成一系列可执行文件:
main:使用模型进行推理quantize:量化模型server:提供模型 API 服务
2.2 准备 llama.cpp 支持的模型
llama.cpp 支持转换的模型格式有 PyTorch 的 .pth、HuggingFace 的 .safetensors,以及之前 llama.cpp 采用的 ggmlv3。
在 HuggingFace 上找到合适格式的模型,下载至 llama.cpp 的 models 目录下:
git clone https://huggingface.co/4bit/Llama-2-7b-chat-hf ./models/Llama-2-7b-chat-hf
2.3 转换为 GGUF 格式
- 安装依赖
llama.cpp 项目下带有 requirements.txt 文件,直接安装依赖即可:
pip install -r requirements.txt
- 转换模型
python convert.py ./models/Llama-2-7b-chat-hf --vocabtype spm
输出示例:
params = Params(n_vocab=32000, n_embd=4096, n_mult=5504, n_layer=32, n_ctx=, n_ff=, n_head=, n_head_kv=, f_norm_eps=, f_rope_freq_base=, f_rope_scale=, ftype=, path_model=PosixPath())
Loading vocab file ,
...
Wrote models/Llama--7b-chat-hf/ggml-model-f16.gguf


