【AI实战】llama.cpp 量化部署 llama-33B

【AI实战】llama.cpp 量化部署 llama-33B

    正在检查是否收录...

【AI实战】llama.cpp 量化部署 llama-33B

llama.cpp 量化介绍 环境配置 安装 llama.cpp 拉取 llama.cpp 仓库代码 编译llama.cpp 生成量化版本模型 模型准备 将上述.pth模型权重转换为ggml的FP16格式 对FP16模型进行4-bit量化 推理速度测试 加载并启动模型 量化方法选择及推理速度 33B推理速度表格 参考

llama.cpp 量化介绍

量化模型是将模型中的高精度浮点数转化成低精度的int或其他类型得到的新的,花销更小,运行更快的模型。

Inference of LLaMA model in pure C/C++。

llama.cpp 运行期占用内存更小,推断速度也更快,同样的模型,7B 基础模型举例,32位浮点数的模型占用空间 27G,llama.cpp 量化后占用内存 9G 左右,推断速度为15字/秒。

对于使用 LLaMA 模型来说,无论从花销还是使用体验,量化这个步骤是不可或缺的。

环境配置

环境配置过程详情参考我的这篇文章;
【AI实战】从零开始搭建中文 LLaMA-33B 语言模型 Chinese-LLaMA-Alpaca-33B

llama-33B 模型下载、合并方法也是参考这篇文章:
【AI实战】从零开始搭建中文 LLaMA-33B 语言模型 Chinese-LLaMA-Alpaca-33B
得到的模型保存路径:“./Chinese-LLaMA-33B”

安装 llama.cpp

拉取 llama.cpp 仓库代码

git clone https://github.com/ggerganov/llama.cpp 

编译llama.cpp

使用GPU执行【推荐】:

cd llama.cpp make LLAMA_CUBLAS=1 

使用CPU执行【安装简单】:

cd llama.cpp make 

生成量化版本模型

模型准备

将合并模型(选择生成pth格式模型)中最后一步生成的tokenizer.model文件放入zh-models目录下,模型文件consolidated.*.pth和配置文件params.json放入zh-models/33B目录下。

执行:

mkdir zh-models/ cp /notebooks/Chinese-LLaMA-Alpaca/Chinese-LLaMA-33B-pth/tokenizer.model zh-models/ mkdir zh-models/33B cp /notebooks/Chinese-LLaMA-Alpaca/Chinese-LLaMA-33B-pth/consolidated.0* zh-models/33B/ cp /notebooks/Chinese-LLaMA-Alpaca/Chinese-LLaMA-33B-pth/params.json zh-models/33B/ 

其中:路径 /notebooks/Chinese-LLaMA-Alpaca/Chinese-LLaMA-33B-pth/ 是 pth 格式模型路径。

结果如下:

llama.cpp/zh-models/ - 33B/ - consolidated.00.pth - consolidated.01.pth - consolidated.02.pth - consolidated.03.pth - ggml-model-f16.bin - params.json - tokenizer.model 

将上述.pth模型权重转换为ggml的FP16格式

执行:

python convert.py zh-models/33B/ 

生成文件路径为: zh-models/33B/ggml-model-f16.bin


对FP16模型进行4-bit量化

执行:

./quantize ./zh-models/33B/ggml-model-f16.bin ./zh-models/33B/ggml-model-q4_0.bin q4_0 

生成量化模型文件路径为zh-models/33B/ggml-model-q4_0.bin


推理速度测试

加载并启动模型

./main -m zh-models/33B/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.1

一些常用的参数:

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

量化方法选择及推理速度

相关结论:

默认的量化方法为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模型的效果

33B推理速度表格

其他大小的模型推理速度参考
https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/llama.cpp%E9%87%8F%E5%8C%96%E9%83%A8%E7%BD%B2

参考

【AI实战】从零开始搭建中文 LLaMA-33B 语言模型 Chinese-LLaMA-Alpaca-33B
https://github.com/ymcui/Chinese-LLaMA-Alpaca
https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/llama.cpp%E9%87%8F%E5%8C%96%E9%83%A8%E7%BD%B2
https://github.com/ggerganov/llama.cpp

llamacodealpacagitgithubjson语言模型tokenpromptgangpuprompts量化模型模型推理chatgpt对话clone高精度cpuchatgpt基础模型对话交流控制生成chat上下文回复生成pythongpturl
  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-5443.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.8W+
9
1
2
WAP站长官方

国内多所高校共建开源社区LAMM,加入多模态语言模型大家庭的时候到了

上一篇

ChatGPT应用商店终上线,全网GPTs超300万,和OpenAI分钱时代来了

下一篇
  • 复制图片
按住ctrl可打开默认菜单