使用llama.cpp量化摆设LLM

冬雨财经  论坛元老 | 2024-8-28 12:36:49 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1680|帖子 1680|积分 5040

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以llama.cpp工具为例,先容模型量化并在当地摆设的具体步骤。这里使用 Meta最新开源的 Llama3-8B 模型。
1 环境



  • 系统应有make
    (MacOS/Linux自带)或cmake
    (Windows需自行安装)编译工具
  • Python 3.10以上编译和运行该工具
2 克隆和编译llama.cpp

拉取 llama.cpp 堆栈最新代码
  1. git clone https://github.com/ggerganov/llama.cpp.git
复制代码
对llama.cpp项目进行编译,生成./main(用于推理)和./quantize(用于量化)二进制文件。
  1. make
复制代码
Windows/Linux用户如需启用GPU推理,则推荐与BLAS(或cuBLAS如果有GPU)一起编译,可以提高prompt处理速度。以下是和cuBLAS一起编译的命令,实用于NVIDIA相关GPU。参考:llama.cpp#blas-build
  1. make
  2. LLAMA_CUBLAS=1
复制代码
macOS用户无需额外操作,llama.cpp已对ARM NEON做优化,并且已自动启用BLAS。M系列芯片推荐使用Metal启用GPU推理,明显提升速度。只需将编译命令改为:LLAMA_METAL=1 make

,参考llama.cpp#metal-build
  1. LLAMA_METAL=1 make
复制代码
3 生成量化版本模型

目前llama.cpp已支持.pth文件以及huggingface格式.bin的转换。将完备模型权重转换为GGML的FP16格式,生成文件路径为Meta-Llama-3-8B-hf/ggml-model-f32.gguf。进一步对FP32模型进行4-bit量化,生成量化模型文件路径为Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf
  1. python convert.py Meta-Llama-3-8B-hf/ --vocab-type bpe
  2. ./quantize ./Meta-Llama-3-8B-hf/ggml-model-f16.gguf ./Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf q4_0
复制代码


  • 可以-h 查察脚本的一些超参数
4 加载并启动模型

4.1 CPU 推理

运行./main二进制文件,-m命令指定 Q4量化模型(也可加载ggml-FP16的模型)。
  1. # run the inference 推理
  2. ./main -m ./Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf -n 128
  3. ./main -m ./Meta-Llama-3-8B-hf/ggml-model-f16.gguf -n 128
  4. #以交互式对话
  5. ./main -m ./Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
  6. #chat with bob
  7. ./main -m ./Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
复制代码


  • 如果想用GPU加快,放在GPU上,必要更换编译 llama.cpp 的方式
           GPU推理:通过Metal编译则只需在./main中指定-ngl 1;cuBLAS编译必要指定offload层数,例如-ngl 40表示offload 40层模型参数到GPU
    在支持 Metal 的环境下,可以使用 --gpu-layers|-ngl 命令行参数启用 GPU 推理。任何大于 0 的值都会将盘算卸载到 GPU
  • 比较告急的参数:

    • -ins 启动类ChatGPT的对话交流模式
    • -f 指定prompt模板,alpaca模型请加载prompts/alpaca.txt 指令模板
    • -c 控制上下文的长度,值越大越能参考更长的对话汗青(默认:512)
    • -n 控制复兴生成的最大长度(默认:128)
    • –repeat_penalty 控制生成复兴中对重复文本的处罚力度
    • –temp 温度系数,值越低复兴的随机性越小,反之越大
    • –top_p, top_k 控制解码采样的相关参数
    • -b 控制batch size(默认:512)
    • -t 控制线程数量(默认:8),可适当增加

5 API 方式调用, 架设server

llama.cpp还提供架设server的功能,用于API调用、架设简易demo等用途。
运行以下命令启动server,二进制文件./server在llama.cpp根目录,服务默认监听127.0.0.1:8080。这里指定模型路径、上下文窗口巨细。如果必要使用GPU解码,也可指定-ngl参数。
  1. ./server -m ./Meta-Llama-3-8B-hf/ggml-model-q4_0.gguf -c 4096 -ngl 999
复制代码
服务启动后,即可通过多种方式进行调用,例如使用curl命令。以下是一个示例脚本(同时存放在scripts/llamacpp/server_curl_example.sh),将Alpaca-2的模板进行包装并使用curl命令进行API访问。
  1. # server_curl_example.sh
  2. SYSTEM_PROMPT='You are a helpful assistant. 你是一个乐于助人的助手。'
  3. # SYSTEM_PROMPT='You are a helpful assistant. 你是一个乐于助人的助手。请你提供专业、有逻辑、内容真实、有价值的详细回复。' # Try this one, if you prefer longer response.
  4. INSTRUCTION=$1
  5. ALL_PROMPT="[INST] <<SYS>>\n$SYSTEM_PROMPT\n<</SYS>>\n\n$INSTRUCTION [/INST]"
  6. CURL_DATA="{"prompt": "$ALL_PROMPT","n_predict": 128}"
  7. curl --request POST \
  8.     --url http://localhost:8080/completion \
  9.     --header "Content-Type: application/json" \
  10.     --data "$CURL_DATA"
复制代码
给出一个示例指令。
  1. bash server_curl_example.sh '请列举5条文明乘车的建议'
复制代码
稍后返回响应结果。
  1. {
  2.         "content": " 以下是五个文明乘车的建议:1)注意礼貌待人,不要大声喧哗或使用不雅用语;2)保持车厢整洁卫生,丢弃垃圾时要及时处理;3)不影响他人休息和正常工作时间,避免在车厢内做剧烈运动、吃零食等有异味的行为;4)遵守乘车纪律,尊重公共交通工具的规则和制度;5)若遇到突发状况或紧急情况,请保持冷静并配合相关部门的工作。这些建议旨在提高公民道德水平和社会文明程度,共同营造一个和谐、舒适的乘坐环境。",
  3.         "generation_settings":
  4.     {
  5.                 "frequency_penalty": 0.0,
  6.                 "ignore_eos": false,
  7.                 "logit_bias": [],
  8.                 "mirostat": 0,
  9.                 "mirostat_eta": 0.10000000149011612,
  10.                 "mirostat_tau": 5.0,
  11.                 "model": "zh-alpaca2-models/7b/ggml-model-q6_k.gguf",
  12.                 "n_ctx": 4096,
  13.                 "n_keep": 0,
  14.                 "n_predict": 128,
  15.                 "n_probs": 0,
  16.                 "penalize_nl": true,
  17.                 "presence_penalty": 0.0,
  18.                 "repeat_last_n": 64,
  19.                 "repeat_penalty": 1.100000023841858,
  20.                 "seed": 4294967295,
  21.                 "stop": [],
  22.                 "stream": false,
  23.                 "temp": 0.800000011920929,
  24.                 "tfs_z": 1.0,
  25.                 "top_k": 40,
  26.                 "top_p": 0.949999988079071,
  27.                 "typical_p": 1.0
  28.         },
  29.         "model": "zh-alpaca2-models/7b/ggml-model-q6_k.gguf",
  30.         "prompt": " [INST] <<SYS>>\nYou are a helpful assistant. 你是一个乐于助人的助手。\n<</SYS>>\n\n请列举5条文明乘车的建议 [/INST]",
  31.         "stop": true,
  32.         "stopped_eos": true,
  33.         "stopped_limit": false,
  34.         "stopped_word": false,
  35.         "stopping_word": "",
  36.         "timings":
  37.     {
  38.                 "predicted_ms": 3386.748,
  39.                 "predicted_n": 120,
  40.                 "predicted_per_second": 35.432219934875576,
  41.                 "predicted_per_token_ms": 28.2229,
  42.                 "prompt_ms": 0.0,
  43.                 "prompt_n": 120,
  44.                 "prompt_per_second": null,
  45.                 "prompt_per_token_ms": 0.0
  46.         },
  47.         "tokens_cached": 162,
  48.         "tokens_evaluated": 43,
  49.         "tokens_predicted": 120,
  50.         "truncated": false
  51. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表