安装 llama.cpp
#
详细的可以看 官方编译文档
下载 llamap.cpp
代码
#
git clone https://github.com/ggerganov/llama.cpp
编译 #
CPU
#
cmake -B build
cmake --build build --config Release -j 16
CUDA
#
需要 CUDA toolkit
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j 16
可以设置环境变量 GGML_CUDA_ENABLE_UNIFIED_MEMORY=1
来使用统一内存架构在 CPU
和 GPU
之后共享内存,但是会损害非集成 GPU
的性能 (但可以支持集成 GPU
的性能)。
生成量化版本模型 #
详细可以查看 官方量化文档
首先安装转化脚本依赖 #
普通安装 #
# install Python dependencies
python3 -m pip install -r requirements.txt
使用 uv
#
最好使用 --index-strategy unsafe-best-match
使用这个可以防止 numpy
没有对应版本的包导致的报错。
这个参数不管先后顺序,把所有 index 都混起来找最合适的版本。
uv venv --python 3.11
uv pip install -r ./requirements.txt --index-strategy unsafe-best-match
然后激活 .venv
虚拟环境
从 huggingface 下载的模型 #
首先下载模型 #
可以从 huggingface 下载模型 了解,或者如果在 ModelScope
上面有镜像的话,可以使用 ModelScope
提供的工具下载。
获取下载目录 #
一般下载好的就在 ~/.cache/huggingface/hub
目录中.
例如, 从 firefly-llama2-13b-chat 下载的就在:
~/.cache/huggingface/hub/models–YeungNLP–firefly-llama2-13b-chat/snapshots/7e72d87fb49a727d9078b4d721e3319f4642f8bc
转换 #
直接执行这个脚本, 生成的 gguf
模型就在你下载的模型文件夹中,默认转化的为 ggml FP16
格式
python convert_hf_to_gguf.py /path/model/path
量化 #
这样就量化成 4-bits(使用 Q4_K_M
方法)
./llama-quantize ./path/model-f16.gguf ./path/model-Q4_K_M.gguf Q4_K_M
可以使用 GGUF-my-repo 来在线量化 #
加载并启动模型 #
直接运行 #
详细查看 官方文档
CPU 直接运行 #
./llama-cli -m ./models/model.gguf -cnv -p "You are a helpful assistant"
CPU 与 GPU 运行 #
如已通过 Metal 编译或者使用了 cuBLAS 编译,则只需加上 -ngl 1 即可启用GPU推理.
./llama-cli -m ./models/model.gguf -cnv -ngl 1 -p "You are a helpful assistant"
启动服务器 #
详细查看 官方文档 和直接运行一样, 可以 CPU 与 GPU 一起运行
./llama-server -m ./models/model.gguf -cnv -ngl 1
关于量化方法选择及推理速度 #
量化参数介绍: 量化统计表格
结论 1 #
结论来源: alpaca llama.cpp 量化部署
- 默认的量化方法为 q4_0,虽然速度最快但损失也是最大的,其余方法各有利弊,按实际情况选择
- 需要注意的是F16以及 q8_0 并不会因为增加线程数而提高太多速度
- 线程数 -t 与物理核心数一致时速度最快,超过之后速度反而变慢(M1 Max上从8改到10之后耗时变为3倍)
- 如果使用了Metal版本(即启用了苹果GPU解码),速度还会有进一步显著提升,表中标注为 -ngl 1
- 综合推荐(仅供参考):7B推荐 Q5_1 或 Q5_K_S,13B 推荐 Q5_0 或 Q5_K_S
- 机器资源够用且对速度要求不是那么苛刻的情况下可以使用 q8_0 或 Q6_K,接近 F16 模型的效果
注释 #
-
这个结论可能有点老了 ↩︎