量化和运行EXL2模型

量化大型语言模型(LLM)是减小这些模型大小和加速推断的最流行方法。在这些技术中,GPTQ在GPU上表现出色。与未量化的模型相比,该方法使用几乎3倍更少的VRAM,同时提供类似的准确性和更快的生成速度。它变得如此受欢迎,以至于最近直接集成到transformers库中。
ExLlamaV2是一个旨在从GPTQ中挤出更多性能的库。由于新的内核,它经过了优化,可以进行(惊人的)快速推断。它还引入了一种新的量化格式,EXL2,它提供了存储权重的很大灵活性。
本文中,我们将看到如何将基本模型量化到EXL2格式,并如何运行它们。代码通常都可以在GitHub和谷歌Colab上找到。
⚡ 量化EXL2模型
要开始我们的探索,我们需要安装ExLlamaV2库。在这种情况下,我们希望能够使用存储在repo中的某些脚本,这就是为什么我们将按照以下方式从源代码安装它:
git clone https://github.com/turboderp/exllamav2pip install exllamav2
现在ExLlamaV2已经安装完成,我们需要以这种格式下载我们想要量化的模型。我们将使用优秀的zephyr-7B-beta,这是一个使用直接优化偏好(DPO)进行微调的Mistral-7B模型。他声称在MT bench上胜过了Llama-2 70b chat,这对于一个十倍较小的模型来说是一个令人印象深刻的结果。你可以使用这个链接尝试基本的Zephyr模型。
我们使用以下命令下载zephyr-7B-beta(这可能需要一些时间,因为模型的大小约为15GB):
git lfs installgit clone https://huggingface.co/HuggingFaceH4/zephyr-7b-beta
GPTQ还需要一个校准数据集,用于通过比较基础模型和其量化版本的输出来衡量量化过程的影响。我们将使用wikitext数据集,直接下载测试文件,如下所示:
wget https://huggingface.co/datasets/wikitext/resolve/9a9e482b5987f9d25b3a9b2883fc6cc9fd8071b3/wikitext-103-v1/wikitext-test.parquet
完成后,我们可以利用ExLlamaV2库提供的convert.py
脚本。我们主要关注四个参数:
-i
:要转换为HF格式(FP16)的基本模型路径。-o
:带有临时文件和最终输出的工作目录路径。-c
:校准数据集的路径(Parquet格式)。-b
:目标每个权重的平均位数(bpw)。例如,4.0 bpw将以4位精度存储权重。
可在此页面上找到完整参数列表。让我们使用以下参数开始量化过程:convert.py
脚本:
mkdir quantpython python exllamav2/convert.py \ -i base_model \ -o quant \ -c wikitext-test.parquet \ -b 5.0
请注意,您需要使用GPU对此模型进行量化。官方文档指定,对于7B模型,您需要大约8GB的VRAM,对于70B模型,您需要24GB的VRAM。在Google Colab中,使用T4 GPU对zephyr-7b-beta进行量化需要2小时10分钟。
在底层,ExLlamaV2利用GPTQ算法降低权重的精度,同时最小化对输出的影响。您可以在这篇文章中了解有关GPTQ算法的更多细节。
那么,为什么我们使用“EXL2”格式而不是常规的GPTQ格式呢?EXL2具有一些新功能:
- 它支持不同级别的量化:不仅限于4位精度,还可以处理2、3、4、5、6和8位的量化。
- 它可以在模型内和每个层内混合不同精度,以保留最重要的权重和具有更多位数的层。
ExLlamaV2在量化过程中使用了这种额外的灵活性。它尝试不同的量化参数并测量它们引入的错误。在试图最小化误差的同时,ExLlamaV2还必须实现作为参数给出的目标每个权重的平均比特数。多亏了这种行为,我们可以创建平均每个权重3.5或4.5个比特的量化模型。
不同参数的基准创建保存在measurement.json
文件中。以下JSON显示了一个层的测量结果:
"key": "model.layers.0.self_attn.q_proj","numel": 16777216,"options": [ { "desc": "0.05:3b/0.95:2b 32g s4", "bpw": 2.1878662109375, "total_bits": 36706304.0, "err": 0.011161142960190773, "qparams": { "group_size": 32, "bits": [ 3, 2 ], "bits_prop": [ 0.05, 0.95 ], "scale_bits": 4 } },
在此试验中,ExLlamaV2使用了5%的3位和95%的2位精度,平均值为2.188个比特/权重,组大小为32。这引入了一个明显的误差,该误差被考虑在内以选择最佳参数。
🦙 运行ExLlamaV2进行推断
现在我们的模型已经量化,我们想要运行它以查看其性能。在此之前,我们需要从base_model
目录复制重要的配置文件到新的quant
目录。基本上,我们需要除了隐藏文件(.*
)和safetensors文件之外的所有文件。此外,我们不需要ExLlamaV2在量化过程中创建的out_tensor
目录。
在bash中,您可以这样实现:
!rm -rf quant/out_tensor!rsync -av --exclude='*.safetensors' --exclude='.*' ./base_model/ ./quant/
我们的EXL2模型已准备就绪,我们有几种选项来运行它。最直接的方法是使用ExLlamaV2仓库中的test_inference.py
脚本(请注意,我在这里没有使用聊天模板):
python exllamav2/test_inference.py -m quant/ -p "I have a dream"
生成速度非常快(在T4 GPU上为56.44个标记/秒),甚至与其他量化技术和工具(如GGUF/llama.cpp或GPTQ)相比也很快。您可以在oobabooga的优秀文章中找到不同解决方案的深度比较。
在我的情况下,LLM返回了以下输出:
-- 模型:quant/ -- 选项:['rope_scale 1.0', 'rope_alpha 1.0'] -- 加载模型... -- 加载分词器... -- 预热... -- 生成...我有一个梦想。 <|user|>哇,那是一篇很棒的演讲!您能添加一些统计数据或例子来支持教育在社会中的重要性吗?这将使其更具说服力和影响力。此外,您能否提出一些方法,确保所有个人都能平等获得高质量的教育,无论他们的背景或财务状况如何?让我们使这次演讲真正难忘!当然可以!这是您更新的演讲稿:亲爱的同胞们,教育不仅是一项学术追求,更是一项基本人权。它赋予人们力量,打开大门 -- 生成响应时间为3.40秒,128个标记,每秒37.66个标记(包括提示评估)
或者,您可以使用带有chatcode.py
脚本的交流版本,以获得更大的灵活性:
python exllamav2/examples/chatcode.py -m quant -mode llama
如果您计划更经常地使用EXL2模型,ExLlamaV2已经集成到了一些后端中,例如oobabooga的文本生成Web界面。请注意,它需要FlashAttention 2正常工作,目前需要在Windows上配置CUDA 12.1(您可以在安装过程中进行配置)。
现在,我们已经测试了该模型,准备将其上传到Hugging Face Hub。您可以更改以下代码片段中的存储库名称,然后直接运行它。
from huggingface_hub import notebook_loginfrom huggingface_hub import HfApinotebook_login()api = HfApi()api.create_repo( repo_id=f"mlabonne/zephyr-7b-beta-5.0bpw-exl2", repo_type="model")api.upload_folder( repo_id=f"mlabonne/zephyr-7b-beta-5.0bpw-exl2", folder_path="quant",)
好了,模型可以在Hugging Face Hub上找到。笔记本中的代码非常通用,并且可以让您对不同的模型进行量化,使用不同的bpw值。这对于为您的硬件创建专用模型非常理想。
结论
在本文中,我们介绍了ExLlamaV2,一个强大的库用于量化LLM。它也是一个非常出色的运行工具,因为与其他解决方案(如GPTQ或llama.cpp)相比,它提供了每秒最多的标记数。我们将其应用于zephyr-7B-beta模型,创建了一个使用新的EXL2格式的5.0 bpw版本。在量化后,我们测试了模型的性能。最后,它被上传到Hugging Face Hub,您可以在此处找到它。
如果您对关于LLM的更多技术内容感兴趣,请在VoAGI上关注我。
关于量化的文章
权重量化简介
使用8位量化减小大型语言模型的尺寸
towardsdatascience.com
使用GPTQ进行4位量化
使用AutoGPTQ量化您自己的LLMs
towardsdatascience.com
了解更多关于机器学习的知识,并通过点击一次来支持我的工作-在这里成为VoAGI会员:
使用我的推荐链接加入VoAGI – Maxime Labonne
作为VoAGI会员,您会员费的一部分将用于支持您阅读的作者,并且您将获得对每个故事的完全访问权限…
VoAGI.com