· 量化介绍
∘ 什么是量化?
∘ 什么时候可以对模型进行量化?
∘ 为什么量化很重要?
· 实战应用:使用llama.cpp对Llama3.1–8B-Instruct模型进行量化
∘ 下载Meta-Llama-3.1–8B-Instruct模型
∘ 量化步骤
∘ 使用量化后的模型
· 结论
· 附录
∘ 可以直接复制粘贴的完整脚本
量化是一种在机器学习中用来降低模型参数精度的技术。这项技术随着大型语言模型(LLMs)的兴起而变得越来越受欢迎。该技术涉及将32位或16位浮点数转换为较低精度的格式,例如8位或4位格式。这种方法的主要目的是减小模型的大小,从而减少计算需求。
什么时候,可以对模型进行量化?注意:这里的逗号添加是为了提升阅读流畅度,根据中文习惯,实际使用时可以灵活处理是否添加逗号。因此,也可以接受不加逗号的版本:## 什么时候可以对模型进行量化?
量化可以在模型整个生命周期的不同阶段进行。
后训练量化
在模型训练完成后使用。这通常是最简单且最常用的方法。如果模型性能下降,可能需要微调来恢复部分丢失的精度。
量化感知的训练
这种方法在训练过程中加入了量化步骤,其目标是让模型在训练时学会在低精度下运作。因此,我们期望它在精度上会优于训练后再进行量化的模型。
为什么量化这么重要?量化在大型语言模型的部署中起着重要的作用。量化的重要原因可以总结如下:
降低模型大小:通过量化,即降低权重的精度,可以显著减少存储需求。这在内存有限的边缘设备上尤其有用。
更快的推理速度:量化模型需要较少的计算资源,这意味着推理时间更快。这对于实时应用和用户体验至关重要。
更低的功耗:计算需求的减少意味着更低的功耗,这对电池供电的设备来说非常重要。
可扩展性方面:更小的模型使得部署和扩展都更加简单。
成本效率:高精度的小模型意味着同样的请求成本更低。这使得大型语言模型变得更容易为小型企业和初创公司所利用。
动手实操:使用llama.cpp对Llama3.1-8B-Instruct模型进行量化处理 下载Meta-Llama 3.1-8B-Instruct这个模型量化过程的第一步就是下载模型。在这个例子中,我们将使用Llama3.1–8B-Instruct模型。这可以通过使用Huggingface CLI并运行以下命令来完成。
#!/bin/bash
# 运行 huggingface-cli 登录
huggingface-cli login
# 下载 meta-llama/Meta-Llama-3.1-8B-Instruct 模型到本地目录 Meta-Llama-3.1-8B-Instruct
huggingface-cli download meta-llama/Meta-Llama-3.1-8B-Instruct --local-dir Meta-Llama-3.1-8B-Instruct
量化过程
我们将使用llama.cpp项目提供的工具来执行量化过程,如下所述。我们要做的就是克隆llama.cpp仓库的代码并编译这个项目。
git clone https://github.com/ggerganov/llama.cpp.git # 下载项目
python3 -m pip install -r llama.cpp/requirements.txt # 安装依赖项
make -C llama.cpp -j4 # 编译项目
编译项目后,接着我们要量化模型,不过在此之前,我们得把Hugging Face模型转换成GGUF格式。GGUF文件格式在加载和保存模型时更加高效。下面的代码块会展示转换过程。
我们将模型转换为gguf格式后,可以使用llama-quantize
命令对其进行量化。我们要生成Llama3.1–8B-Instruct模型的4位的量化版本。
python3 llama.cpp/convert_hf_to_gguf.py Meta-Llama-3.1-8B-Instruct
# 将模型从Hugging Face格式转换为GGUF格式
./llama.cpp/llama-quantize Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct-F16.gguf Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct--q4_0.bin q4_0
# 对转换后的模型进行量化处理
使用量化后的模型
llama.cpp 包含一个 llama-cli 命令,该命令用于与模型进行交互。以下命令将启动与经过量化处理的模型的交互式聊天。
以下是代码块中使用的参数设置的说明;它将每回应生成最多256个令牌,带有彩色输出功能,不计算重复惩罚,模型将被初始化为来自chat-with-bob.txt
文件的提示,应用程序将在遇到"User:"时停止显示模型的回应并等待用户的回复。
./llama.cpp/llama-cli \
-m Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct--q4_0.bin \
-n 256 --repeat_penalty 1.0 --color -i -r "User:" \
-f llama.cpp/prompts/chat-with-bob.txt
简单说一下,这就是结尾
在这篇博客里,我们已经讨论了如何使用Huggingface和llama.cpp工具下载、量化并使用大语言模型。量化是一种强大的技术,可以用来提升模型性能和减少存储需求。
附录 完整文本,方便复制粘贴 #!/bin/bash
huggingface-cli login
huggingface-cli download meta-llama/Meta-Llama-3.1-8B-Instruct --local-dir Meta-Llama-3.1-8B-Instruct # 登录并下载模型
git clone https://github.com/ggerganov/llama.cpp.git # 克隆代码仓库
python3 -m pip install -r llama.cpp/requirements.txt # 安装依赖项
make -C llama.cpp -j4 # 编译代码
python3 llama.cpp/convert_hf_to_gguf.py Meta-Llama-3.1-8B-Instruct # 将模型文件转换为gguf格式
./llama.cpp/llama-quantize Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct-F16.gguf Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct--q4_0.bin q4_0 # 对模型进行量化
./llama.cpp/llama-cli -m Meta-Llama-3.1-8B-Instruct/Meta-Llama-3.1-8B-Instruct--q4_0.bin -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f llama.cpp/prompts/chat-with-bob.txt # 使用模型进行对话
共同学习,写下你的评论
评论加载中...
作者其他优质文章