Skip to content

llamacpp_zh

ymcui edited this page May 15, 2024 · 8 revisions

使用llama.cpp量化部署

llama.cpp工具为例,介绍模型量化并在本地部署的详细步骤。Windows则可能需要cmake等编译工具的安装。本地快速部署体验推荐使用经过指令精调的Llama-3-Chinese-Instruct模型,使用6-bit或者8-bit模型效果更佳。 运行前请确保:

  1. 系统应有make(MacOS/Linux自带)或cmake(Windows需自行安装)编译工具
  2. 建议使用Python 3.10以上编译和运行该工具

Step 1: 克隆和编译llama.cpp

⚠️ llama.cpp在2024年4月30日对Llama-3 pre-tokenizer做出重大改动,务必拉取最新代码进行编译!

  1. (可选)如果已下载旧版仓库,建议git pull拉取最新代码,并执行make clean进行清理
  2. 拉取最新版llama.cpp仓库代码
$ git clone https://github.com/ggerganov/llama.cpp
  1. 对llama.cpp项目进行编译,生成./main(用于推理)和./quantize(用于量化)二进制文件。
$ make

Windows/Linux用户如需启用GPU推理,则推荐与BLAS(或cuBLAS如果有GPU)一起编译,可以提高prompt处理速度。以下是和cuBLAS一起编译的命令,适用于NVIDIA相关GPU。参考:llama.cpp#blas-build

$ make LLAMA_CUDA=1

macOS用户无需额外操作,llama.cpp已对ARM NEON做优化,并且已自动启用BLAS。M系列芯片推荐使用Metal启用GPU推理,显著提升速度。只需将编译命令改为:LLAMA_METAL=1 make,参考llama.cpp#metal-build

$ LLAMA_METAL=1 make

Step 2: 生成量化版本模型

💡 也可直接下载已量化好的GGUF模型:下载地址

目前llama.cpp已支持.safetensors文件以及Hugging Face格式.bin转换为FP16的GGUF格式。

$ python convert-hf-to-gguf.py llama-3-chinese-8b-instruct
$ ./quantize llama-3-chinese-instruct-8b/ggml-model-f16.gguf llama-3-chinese-8b-instruct/ggml-model-q4_0.gguf q4_0

Step 3: 加载并启动模型

由于本项目推出的Llama-3-Chinese-Instruct使用了原版Llama-3-Instruct的指令模板,请首先将本项目的scripts/llama_cpp/chat.sh拷贝至llama.cpp的根目录。chat.sh文件的内容如下所示,内部嵌套了聊天模板和一些默认参数,可根据实际情况进行修改。

  • GPU推理:cuBLAS/Metal编译需要指定offload层数,在./main中指定例如-ngl 40表示offload 40层模型参数到GPU
  • (新)启用FlashAttention:命令行中添加-fa即可启用,可加速推理(因计算设备而异)
FIRST_INSTRUCTION=$2
SYSTEM_PROMPT="You are a helpful assistant. 你是一个乐于助人的助手。"

./main -m $1 --color -i \
-c 0 -t 6 --temp 0.2 --repeat_penalty 1.1 -ngl 999 \
-r '<|eot_id|>' \
--in-prefix '<|start_header_id|>user<|end_header_id|>\n\n' \
--in-suffix '<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n' \
-p "<|start_header_id|>system<|end_header_id|>\n\n$SYSTEM_PROMPT<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n$FIRST_INSTRUCTION<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n"

使用以下命令启动聊天。

$ chmod +x chat.sh
$ ./chat.sh ggml-model-q4_0.gguf 你好

在提示符 > 之后输入你的prompt,cmd/ctrl+c中断输出,多行信息以\作为行尾。如需查看帮助和参数说明,请执行./main -h命令。

更详细的官方说明请参考:https://github.com/ggerganov/llama.cpp/tree/master/examples/main