手记

大型语言模型的量化:以Meta-Llama-3.1-8B-Instruct模型为例的一步步教程

· 量化介绍
∘ 什么是量化?
∘ 什么时候可以对模型进行量化?
∘ 为什么量化很重要?
· 实战应用:使用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  # 使用模型进行对话
0人推荐
随时随地看视频
慕课网APP