我可以不吃啊 发表于 2026-2-23 17:45:39

Llama.cpp大模子量化简明手册

大型语言模子 (LLM),尤其是像 Mixtral 8x7b(467 亿个参数)如许的大型模子,对内存的要求非常高。当你实行低落推理资本、进步推理速率或在边沿装备上举行推理时,这种内存需求就会变得显着。办理此标题的一个埋伏方法是量化。在本文中,我们将使用易于明白的类比来简化量化的概念,并提供在 LLM 中实现它的实用指南。
LLM 固然功能强盛,但由于模子规模较大,因此会斲丧大量资源。这对资源受限的装备上摆设带来了寻衅,而且会拦阻推理速率和服从。量化提供了一种办理方案,即在保持性能的同时低落模子参数的精度。
在本文中,我们将探究各种量化技能,包罗简单量化、k 均值量化,并扼要提到一种称为 qLORA 的方法。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYzcxNDUyYjRhZDBkOTc1NTA0NWFhYWVkOTIzN2I4MTIucG5n
NSDT工具保举: Three.js AI纹理开辟包 - YOLO合成数据天生器 - GLTF/GLB在线编辑 - 3D模子格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模子插件 - 3D模子语义搜索引擎 - Three.js捏造轴心开辟包 - 3D模子在线减面 - STL模子在线切割
1、明白量化

想象一下墟落中的每栋房屋都代表 LLM 中的一个参数。在麋集的模子中,房屋无处不在,就像一个繁华的都会。量化通过仅保存最紧张的房屋(参数)并用较小的房屋(较低精度的表现)更换其他房屋,大概移除非常“不紧张”的房屋并在其间创建开放空间(零),将这个都会变化为更易于管理的墟落。由于有空间,我们可以说模子“更希奇”或“密度更低”。当模子希奇且具有很多零值参数时,这使得模子的盘算服从更高且处理处罚速率更快,由于可以轻松跳过或压缩零值,而无需举行昂贵的盘算。保存参数之间的开放空间(零)镌汰了团体模子的巨细和复杂性,从而进一步进步了服从。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjVjOGM2YWY0MGRmMjJmMzA0MTEzODc2OGU3NWFjMTAucG5n
1.1 量化的长处

量化有几个长处:


[*]镌汰内存占用:通过低落参数精度,量化显着低落了模子的内存需求,这对于在内存有限的装备上摆设至关紧张。
[*]进步速率:较低精度的盘算实行速率更快,从而加快模子推理速率,这对及时应用尤其有益。
[*]保持性能:量化旨在简化模子,同时保持其性能,确保墟落在缩小规模后仍拥有全部须要的办法。
1.2 量化的范例

量化方法有几种,本文扼要提到了此中两种:


[*]简单量化:简单量化同一低落全部参数的精度,类似于将墟落分别为相称的正方形地域而不思量房屋的位置。这大概导致某些地域有很多房子,而其他地域没有房子。
[*]K 均值量化:K 均值量化根据数据点(房屋)的实际位置创建聚类,从而实现更精确、更高效的表现。它涉及选择代表点(质心)并将每个数据点分配给近来的质心。k 均值量化的某些实现大概包罗额外的修剪步调,此中值低于某个阈值的参数被设置为准确为零(即移除房屋)。这可以进一步增长模子的希奇性。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvODE0ZWU4YmQ3NmJiZDE1YmYyY2Q0NTZlZTgzNDYwOTgucG5n
1.3 希奇性和密度

希奇性是指模子中只有少数参数(房屋)很紧张,别的参数(空缺空间)可以忽略而不影响性能。通过量化低落分辨率时,参数紧张性的不匀称性变得更加显着。
这可以通过称为希奇性的指标来衡量。它是模子中 0 值参数的百分比。
希奇性 =(零值参数的数目)/(参数总数) 高希奇性意味着 0 值参数(房屋之间的空间)的百分比高
你还可以根据密度来表现模子:
密度 =(非零参数的数目)/(参数总数) 高密度意味着非 0 值参数(房屋)的百分比高
1.4 量化模子中的 Q#_K_M 是什么意思?

在 llama.cpp 的上下文中,Q4_K_M 指的是一种特定范例的量化方法。定名约定如下:


[*]Q 代表量化。
[*]4 表现量化过程中使用的位数。
[*]K 表现在量化中使用 k 均值聚类。
[*]M 表现量化后的模子巨细。S = 小,M = 中,L = 大。
1.5 量化何时有用?

边沿盘算是一种在数据天生点附近处理处罚数据的方式,而不是将其发送到迢遥的服务器举行处理处罚。边沿推理很有用,由于它可以加快速率、掩护数据隐私并镌汰带宽使用。
比方,假设你正在使用一款智能手机应用步伐,该应用步伐使用呆板学习来辨认照片中的物体。如果该应用步伐使用传统的云盘算,它必须将照片不停发送到服务器,期待服务器处理处罚,然后将结果发送回你的手机。使用边沿盘算,处理处罚就发生在你的手机上,因此速率更快、更隐私,而且使用的数据更少。
固然量化通常与边沿盘算相干,但它在其他环境下也很有用。比方,企业可以使用量化来镌汰企业数据中央中呆板学习模子的盘算和存储要求。这可以显着节流硬件和电力使用方面的资本。
对于企业数据中央来说,运行和维护小型量化模子比运行更大、更准确的模子要自制得多。这是由于量化镌汰了运行模子所需的内存和盘算本领,从而可以低落硬件资本并镌汰能耗。别的,量化还可以资助进步呆板学习模子的可扩展性,使企业可以或许处理处罚更大量的数据并更快地做出推测。
在任何须要特定要求或以客户为中央的调解的范畴,微调某些参数以精确反映这些需求都很有用。使用 QLoRA(量化和低秩自顺应),你可以实现一个既量化又微调以满意您的特定需求的模子。这种方法答应优化模子,而无需更新大量权重,使其成为一种低资本且高效的办理方案,可将大型语言模子顺应各种范畴(即客户服务、医疗保健、教诲)或任何其他更个性化和准确的模子可以进步性能和用户体验的范畴。
2、量化模子实战

好的……理论讲得够多了 :D 让我们用 llama.cpp 试试。
使用 Llama.cpp 举行量化
本文的这一部分将先容怎样下载和制作 llama.cpp。然后,我们将从 HuggingFace 下载一个模子并对其举行量化,同时运行一些性能测试。
非常感谢 Peter 通过 llama.cpp 提供的有用指南 。
第1步:启用 Git 下载大文件
#Allow git download of very large files; lfs is for git clone of very large files, such as the models themselves
brew install git-lfs
git lfs install 第 2 步:克隆 llama.cpp 项目并运行 make
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make 第3步:从 HuggingFace 下载模子
我会从 NousResearch 下载一个。请注意,你须要一个良好的互联网毗连,由于模子大概非常大!
#Get model from huggingface, rename it locally to nous-hermes-2-mistral-7B-DPO, and move it to the models directory
#Models generally are in https://huggingface.co/NousResearch
git clone https://huggingface.co/NousResearch/Nous-Hermes-2-Mistral-7B-DPO nous-hermes-2-mistral-7B-DPO 如今,我们可以使用终端将其移动到模子文件夹:
mv nous-hermes-2-mistral-7B-DPO models/ 第4步:将模子转换为标准格式 (GGML FP16)
我说的“标准”是指 GGML FP16 格式。GGML 是由 Georgi Gerganov 为呆板学习开辟的张量库,可在商用硬件上实现大型模子和高性能。FP16 被以为是“半精度”(FP32 是全精度)。精度是指模子权重的浮点数。有关更多表明,请参阅此清晰表明。
# convert the model to FP16 .gguf format
python3 convert.py models/nous-hermes-2-mistral-7B-DPO/ 运行 convert.py 后,应该会看到这个 ggml-model-f16.gguf 出如今你的模子目次中:

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNDNmYWUyYjQ3NzUwMWQ2MDg3ODE4ZWM0ZDU0MjE3MTYucG5n
第 5 步:将模子量化为 n 位
如今,我们可以将 ggml-model-f16.gguf 文件作为进一步量化的出发点。
4 位量化:
# quantize the model to 4-bits (using Q4_K_M method)
./quantize ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q4_K_M.gguf Q4_K_M 创建 Q4_K_M.gguf:

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZjNiZjRkMzY5MzZiYTQ4ODI1OGFiOWY5ZDUyODM0MWMucG5n
3、其他量化方案

我们可以举行多种差异的量化。详情请拜见屏幕截图。
如果你运行 ./quantize --help,那么你将看到量化范例的全部选项:

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjJkOWUzYjRiOWFiOThlM2IyNDM2MTlmYTMwY2E5YmYucG5n
3比特量化:
# quantize the model to 3-bits (using Q3_K_M method)
./quantize ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q3_K_M.gguf Q3_K_M
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYmQ3MzdhYTVhZjg5NGVjODc1ZjFiOGFhMmY5ZTYxZjkucG5n
5比特量化:
# quantize the model to 5-bits (using Q5_K_M method)
./quantize ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q5_K_M.gguf Q5_K_M
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNDY4NzcyNTc4OTQ4ZjdkZDBkZmIwYzVmOWFlZGQyYWYucG5n
2比特量化:
# quantize the model to 2-bits (using Q2_K method)
./quantize ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q2_K.gguf Q2_K
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMjk0OGVmNzljN2Y3OGRlZmVjOTZkMDc4NGY0YTE4ZGIucG5n
4、批处理处罚基准测试

什么是批处理处罚基准测试?批处理处罚基准测试对 llama.cpp 库的批处理处罚解码性能举行基准测试。
运行 ./batched-bench — help :

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNGVlMWE1ZWI0ZTY1ZmM0Y2FhNTZlZGY2Yjc4OWVjOTAucG5n
让我们在 f16 版本上实行批量测试:
./batched-bench ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf 2048 0 999 128,256,512 128,256 1,2,4,8,16,32
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvODViMTdiOTc0M2I5NTYyMjMyN2ZmN2E3YWY2MDhmNmIucG5n
对于 Q4_K_M 量化也是云云:
./batched-bench ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q4_K_M.gguf 2048 0 999 128,256,512 128,256 1,2,4,8,16,32
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZDExMDNkNTNhNzVhZTI0ZjcyZWIyMjU1M2JjMTQyMDYucG5n
怎样解码批处理处罚工作台?

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMjkzOTM5NjVmNmY4NjQ5NWRiYTYyNThmOTBjMWM4MWMucG5n
图例:批处理处罚工作台
对于我们的评估,我们可以使用 T_PP(第一个标志的时间)、S_PP(快速处理处罚速率)和 S_TG(文本天生速率)。通过比力两者,我们可以看到(比方)Q4 的快速处理处罚速率比 f16 快约 50 个标志/秒。
另有其他方法可以评估量化模子。此中之一是狐疑度。
狐疑度(perplexity)是用于评估语言模子的常用指标。它衡量模子对数据样本的推测本领。狐疑度分数越低,表现语言模子在推测下一个单词方面表现越好,而狐疑度分数越高,则表现模子对下一个单词的推测本领越不确定或“狐疑”。
在模子上运行狐疑度评估。如果你选择如许做,这将耗费约莫 1 小时:
# Calculate the perplexity of ggml-model-Q2_K.gguf
./perplexity -m ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q2_K.gguf -f /Users/ingrid/Downloads/test-00000-of-00001.parquet 5、运行量化后的模子

# start inference on a gguf model
./main -m ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-Q4_K_M.gguf -n 128 那么其他(较小)量化呢?
变乱会变得更加棘手和耗时。比方,如果我们想举行 XXS 量化:
# XXS Quantization
./quantize ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-IQ2_XXS.gguf IQ2_XXS ...然后我们须要创建一个紧张性矩阵(imatrix),如你在下面的屏幕截图中的消息中所看到的那样。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjIzZDU0MDYxMDNkYzc3MTQ2MzZlNGJjMjBiNzM0M2QucG5n
什么是紧张性矩阵?
紧张性矩阵 (imatrix) 为神经网络中的每个权重或激活分配一个紧张性分数。此紧张性分数通常根据模子输出对该特定权重或激活厘革的敏感度盘算得出。紧张性矩阵答应有针对性的量化,此中最关键的组件以更高的精度保存,而不太紧张的组件则被量化以节流内存和盘算资源。这种有针对性的方法在量化到非常低的精度(即 2 位或更低)时尤其紧张,由于它有助于保持模子的实用性。
怎样构建紧张性矩阵?
因此,我研究了怎样今后 README 中创建 imatrix,并下载了 wiki 原始数据集,并实行使用这个 bash 下令来创建 imatrix(如果你有 8 小时或比我更强盛的盘算机,请实行一下):
# see for documentation: https://github.com/ggerganov/llama.cpp/blob/master/examples/imatrix/README.md
./imatrix -m <some_fp_model> -f <some_training_data>

# This is the code I ran to start generating a imatrix (take 8 hours)
./imatrix -m ./models/nous-hermes-2-mistral-7B-DPO/ggml-model-f16.gguf -f /Users/ingrid/Downloads/test-00000-of-00001.parquet 在我的 32GB M1 Mac 上,这会耗费很长时间(对于 imatrix 估计约莫须要 8 个小时),以是我没有如许做。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTg1Nzc0YmM4ZmM4ZjEyZGFjYTk5ODY4ODU5ZmU0MTIucG5n
6、竣事语

量化是一种强盛的技能,可以镌汰大型语言模子 (LLM) 的内存占用和盘算需求,而不会显着影响性能。本文深入探究了量化,包罗用于微调量化模子的质朴量化、k 均值量化和 QLoRA 等方法。
通过使用相干的类比和示例,我们展示了量化怎样将 LLM 的麋集参数空间转换为更易于管理的情势,从而进步服从和速率。我们还先容了量化 LLM 的实际应用,从边沿盘算到企业用例。
实践指南演示了使用 llama.cpp 量化 LLM,并先容了下载模子、转换、量化技能和狐疑度等评估指标。
随着 LLM 不绝突破边界,量化将在使这些强盛的模子更易于访问和摆设在差异环境中方面发挥紧张作用。无论你是研究职员、从业者还是 NLP 爱好者,把握量化都是你使用大型语言模子的紧张一步。
原文链接:Llama.cpp量化简明手册 - BimAnt
页: [1]
查看完整版本: Llama.cpp大模子量化简明手册