用GGUF和Llama.cpp量化Llama模型

量化Llama模型:GGML、NF4与GPTQ的比较与实践,

由于大型语言模型(LLMS)的庞大规模,量化已成为有效运行它们的必要技术。通过降低其权重的精度,您可以节省内存并加快推理,同时保留大部分模型性能。最近,8-bit和4-bit量化解锁了在消费者硬件上运行LLM的可能性。加上Llama模型和参数有效技术以微调它们(Lora,Qlora)的释放,这创建了一个丰富的本地LLM生态系统,该生态系统现在正在与OpenAI的GPT-3.5和GPT-4竞争。

目前,主要有三种量化技术:NF4、GPTQ和GGML。NF4是QLoRA使用的静态方法,用于以4位精度加载模型以执行微调。在上一篇文章中,我们探讨了GPTQ方法,并量化了我们自己的模型,以便在消费者GPU上运行它。在本文中,我们将介绍GGML技术,了解如何量化Llama模型,并提供实现最佳结果的提示和技巧。

什么是GGML

GGML是一个专注于机器学习的C语言库。它是由Georgi Gerganov创建的,这是GG的首字母缩写。这个库不仅提供了机器学习的基本元素,如张量,而且还提供了一种独特的二进制格式来分发llm。

该格式最近更改为GGUF。这种新格式被设计为可扩展的,因此新特性不会破坏与现有模型的兼容性。它还将所有元数据集中在一个文件中,例如特殊 tokens、RoPE缩放参数等。简而言之,它解决了历史上的一些痛点,而且应该经得起未来的考验。欲了解更多信息,您可以在此地址阅读规范。在本文的其余部分,我们将称使用GGUF或以前格式的所有模型为GGML模型。

GGML设计为与Georgi Gerganov创建的Llama.CPP库一起使用。该库用C/C ++编写,以有效地推理 Llama模型。它可以加载GGML型号并将其运行在CPU上。最初,这是与GPTQ模型的主要区别,该模型已加载并在GPU上运行。但是,您现在可以使用Llama.cpp将LLM的一些LLM层卸载到GPU。为了给您一个例子,有35层用于7B参数模型。这大大加快了推理,并使您可以运行不适合VRAM的LLM。
在这里插入图片描述
如果您喜欢命令行工具,那么llama.cpp和GGUF支持已经集成到许多gui中,例如oobabooga的文本生成web-ui、koboldcpp、LM Studio或ctransformers。您可以简单地用这些工具加载您的GGML模型,并以类似chatgpt的方式与它们交互。幸运的是,许多量化模型可以直接在Hugging Face Hub 上使用。您很快就会注意到,它们中的大多数都是由LLM社区的知名人物TheBloke量化的。

在下一节中,我们将看到如何量化我们自己的模型并在消费级GPU上运行它们。

如何用GGML量化llm

让我们看一下 thebloke/Llama-2-13b-chat-ggml repo内部的文件。我们可以看到14种不同的GGML模型,与不同类型的量化相对应。他们遵循特定的命名约定:“ Q” +用于存储权重(精度) +特定变体的位数。这是根据TheBloke制作的型号卡的所有可能定量方法及其相应用例的列表:
在这里插入图片描述
根据经验,我建议使用Q5_K_M,因为它保留了该型号的大部分性能。另外,如果想节省一些内存,也可以使用 Q4_K_M。一般来说,K_M版本优于 K_S 版本。我不推荐 Q2_K 或 Q3 *版本,因为它们会大大降低模型的性能。

现在我们了解了更多可用的量化类型,让我们看看如何在实际模型中使用它们。您可以在Google Colab上的免费T4 GPU上执行以下代码。第一步包括编译llama.cpp并在Python环境中安装所需的库。

# Install llama.cpp
!git clone https://github.com/ggerganov/llama.cpp
!cd llama.cpp && git pull && make clean && LLAMA_CUBLAS=1 make
!pip install -r llama.cpp/requirements.txt

现在我们可以下载我们的模型。我们将使用本文中Mlabonne/Evolcodellama-7B进行微调的模型。

MODEL_ID = "mlabonne/EvolCodeLlama-7b"
 # Download model
!git lfs install
!
GGUF 模型进行量化是通过 `llama.cpp` 提供的工具实现的,其核心步骤包括模型格式转换实际的量化操作。以下是详细的流程: ### 准备工作 在开始之前,需要确保你已经安装了 `llama.cpp` 并且完成了编译过程。这通常涉及到克隆仓库、配置构建环境以及使用 CMake 来生成构建文件[^2]。 ### 模型转换 如果原始模型不是 GGUF 格式,你需要先将其从 Hugging Face 的模型格式(如 `.safetensors`)转换为 GGUF 格式。可以使用 `convert_hf_to_gguf.py` 脚本来完成这一任务: ```bash python3 llama.cpp/convert_hf_to_gguf.py path_to_model/model.safetensors --outtype f16 --outfile models/gguf/model-f16.gguf ``` - `--outtype f16` 表示输出为 16 位浮点数格式。 - `--outfile` 用于指定输出文件的路径名称[^1]。 ### 模型量化 一旦有了 GGUF 格式的模型,就可以使用 `llama-quantize` 工具来进行量化处理。这个过程会减少模型的大小并可能提高推理速度,同时尽量保持模型性能。执行量化的命令如下: ```bash cd llama.cpp/build/bin ./llama-quantize ../../../models/gguf/model-f16.gguf ../../../models/gguf/model-Q4_K_M.gguf Q4_K_M ``` - 第一个参数是输入的非量化 GGUF 模型路径。 - 第二个参数是指定量化后输出的模型路径。 - 第三个参数 `Q4_K_M` 是一种特定的量化方法,可以根据需求选择不同的量化级别[^1]。 ### 推理与测试 量化完成后,你可以使用 `llama-cli.exe` 来加载量化后的模型并在本地运行简单的推理测试。例如: ```bash llama-cli.exe -m "D:\**\**\models\qwen2-7B-q8-cx.gguf" -ngl 29 --color -r "User:" -i -p "User: Hi\nAI: Hello. I am an AI chatbot.\nUser:what's your name?\nAI:My name is qwen2-7B_q8_cx.\nUser:" ``` - `-m` 参数指定了 GGUF 模型的路径。 - `-ngl` 设置了加载到 GPU 的层数。 - `-i` 启用交互模式。 - `--color` 开启字体颜色高亮。 - `-r` `-p` 分别设置了提示符初始提示内容[^2]。 通过以上步骤,你可以成功地将一个 GGUF 模型进行量化,并在本地环境中进行部署测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值