首页 >科技周边 >人工智能 >大型语言模型(LLMS)的量化:有效降低AI模型大小

大型语言模型(LLMS)的量化:有效降低AI模型大小

Christopher Nolan
Christopher Nolan原创
2025-03-05 09:10:13789浏览

>在笔记本电脑上运行自己的chatgpt:llm量化指南

>

>曾经梦想直接在笔记本电脑上运行自己的chatgpt? 得益于大语言模型(LLMS)的进步,这已成为现实。 关键是量化 - 一种技术,它缩小了这些庞大的模型,以适合消费者硬件,而性能损失最少(完成正确!)。本指南解释了量化,其方法,并向您展示了如何使用拥抱Face的Quanto库以两个简单的步骤来量化模型。 使用DataCamp Datalab。

> LLMS的不断增长

LLM的复杂性爆炸了。 GPT-1(2018)有910亿个参数; GPT-2(2019),15亿; GPT-3(2020),高达1750亿; GPT-4拥有超过1万亿。这种巨大的增长会产生记忆瓶颈,阻碍训练和推理,并限制可及性。 量化通过降低模型的大小而在保留性能的同时解决这一问题。>

理解量化

量化是一种模型压缩技术,可降低模型的权重和激活的精度。 这涉及将数据从较高精确的类型(例如32位浮点)转换为较低精确的类型(例如8位整数)。 较少的位意味着一个较小的模型,消耗较少的内存,存储和能量。>

考虑图像压缩:高分辨率图像被压缩以供网络使用,减少大小和加载时间以一些细节为代价。 同样,量化LLM可以减少计算需求,从而使其能够在功能较低的硬件上运行。

>更快的Web加载的图像压缩。Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

>

量化引入了噪声(量化误差),但研究重点是最大程度地减少以维持性能。量化背后的理论

量化通常针对模型权重 - 确定神经元之间连接强度的参数。 这些权重最初是随机的,并在训练过程中进行了调整。 一个简单的例子是将重量四舍五入到更少的小数位。

>

>示例:重量矩阵(左)及其量化版本(右)。

原始矩阵和量化矩阵之间的差异是量化误差。 Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

量化误差矩阵。

在实践中,量化涉及更改数据类型(降低)。 例如,从float32(每个参数4个字节)转换为INT8(每个参数1个字节)可显着降低内存使用量。

>

>大脑浮点(BF16)和降低

由Google开发的BF16

> BF16在Float32的动态范围和Float16的效率之间提供了平衡。降低(从较高精确到较低精确的数据类型)降低速度,但会导致数据丢失和错误传播,尤其是数据类型较小。

量化类型

存在几种量化类型:

  • 线性量化:将浮点值映射到固定点范围。 它涉及计算最小/最大值,比例,零点,量化和取消定量(在推理期间)。

Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

>线性量化方程

>

示例:权重矩阵的线性量化。 Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

>去量化和量化误差。

Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

块量化:在较小的块中量化权重,更有效地处理非均匀分布。

  • > 权重与激活量化:量化可以应用于权重(静态)和激活(动态)。 激活量化更为复杂。

  • >培训后量化(PTQ)与量化感知训练(QAT): ptq量化了预训练的模型; QAT修改训练以模拟量化效果,从而提高准确性,但增加了训练时间。

  • 校准技术
  • 某些方法需要校准 - 对数据集的推断以优化量化参数。 技术包括百分比校准和平均/标准偏差校准。 诸如Qlora之类的方法避免校准。 量化的工具

    几个Python库支持量化,包括Pytorch和Tensorflow。 拥抱Face的Quanto库简化了Pytorch模型的过程。
  • 用拥抱脸的量子量量化模型
这是使用Pythia 410m型号的逐步指南:>
  1. 加载模型:加载预训练的模型和令牌。
  2. >
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "EleutherAI/pythia-410m"
model = AutoModelForCausalLM.from_pretrained(model_name, low_cpu_mem_usage=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)
  1. 量化:使用quantize()转换模型。
  2. >
from quanto import quantize, freeze
quantize(model, weights=torch.int8, activations=None)
  1. 冻结:>使用freeze()将量化应用于权重。
  2. >
freeze(model)
  1. 检查结果:验证减少的模型大小和测试推理。 (注意:compute_module_sizes()是一个自定义函数;有关实现的Datacamp Datalab)。
  2. >

Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently Quantization for Large Language Models (LLMs): Reduce AI Model Sizes Efficiently

结论

量化使LLMS更容易访问和高效。 通过了解其技术并使用拥抱Face Quanto之类的工具,您可以在功能较小的硬件上运行强大的模型。 对于较大的模型,请考虑升级您的资源。

>

llm量化常见问题解答

  • qat vs. ptq: QAT通常表现更好,但在培训期间需要更多的资源。
  • Quanto库:支持PTQ和QAT。 包括隐式校准;可以自定义校准。quantize()> calibration()
  • >精确:
  • int4和int2量化是可能的。> >
  • >访问拥抱面部模型:
  • 将变量更改为所需模型。 切记接受拥抱面孔的条款和条件。> model_name

以上是大型语言模型(LLMS)的量化:有效降低AI模型大小的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn