Llama - 量化

本文翻译整理自:
https://llama.meta.com/docs/how-to-guides/quantization/


量化是机器学习中使用的一种技术,用于减少模型的计算和内存需求,使它们在服务器和边缘设备上的部署更加高效。
它涉及表示模型权重和激活,通常是32位浮点数,使用精度较低的数据,如16位浮点数、大脑浮点数16位、8位整数,甚至4/3/2/1位整数。
量化的好处包括更小的模型大小、更快的微调和更快的推理——在resource-constrained环境中特别有益。然而,权衡是由于精度损失导致模型质量下降。


PyTorch中支持的量化模式

  • 训练后动态量化:权重提前预量化,激活在推理期间转换为int8,就在计算之前。由于高效的int8矩阵乘法,这导致计算速度更快,并保持激活层的准确性。
  • 训练后静态量化:该技术通过将网络转换为使用整数算术和整数8内存访问来提高性能。它涉及通过网络馈送批量数据并计算不同激活的结果分布。此信息用于确定不同激活在推理时应如何量化。
  • 量化感知训练(QAT):在QAT中,所有权重和激活在向前和向后的训练过程中都被“假量化”。这意味着浮点值被四舍五入以模仿int8值,但所有计算仍然使用浮点数完成。这种方法通常比其他两种方法产生更高的准确性,因为训练期间的所有权重调整都是在“意识到”模型最终将被量化的事实的情况下进行的。

关于这些方法以及它们如何应用于不同类型的模型的更多细节可以在官方的PyTorch留档中找到。此外,社区已经对Meta Llama 3上常见量化方法的有效性进行了研究,要评估的结果和代码可以在这个GitHub存储库中找到。

我们接下来将关注Meta Llama 模型可用的量化工具。由于这是一个不断发展的空间,这里详述的库和方法是目前使用最广泛的,并且会随着空间的发展而发生变化。


使用 TorchAO 进行 Pytorch量化

TorchAO库中提供了几种量化方法,每种方法都有不同的激活和权重量化方案。

对于仅权重量化,我们支持8位和4位量化。4位量化还具有GPTQ支持以提高精度,这需要校准,但具有相同的最终性能。

对于动态量化,我们支持8位激活量化和8位权重量化,我们还支持这种类型的 smoothquant ,以提高精度,这需要校准,性能稍差。

此外,该库提供了一个简单的API来测试不同的方法,并自动检测给定模型的最佳量化,称为自动量化。
该API从8位动态和仅8位权重的量化中选择最快的量化形式。
它首先识别不同线性层看到的激活形状,然后在不同类型的量化和非量化层之间对这些形状进行基准测试,以选择最快的一个。此外,它与 torch.compile() 组合以生成快速内核。
有关 torch.compile 的更多信息,请参阅此一般教程

注意:该库处于beta阶段并处于积极开发中;预计会发生API更改。


HF支持的量化

拥抱脸(HF)提供了多种方法来使用他们的变压器库进行LLM量化。除了这里介绍的简短摘要之外,有关如何使用其中每一个的更多指南和示例,请参阅他们的量化指南 和 transformers 量化配置留档
llama-recipes 代码使用bitsandbytes 8位量化来加载模型,用于推理微调。(有关在Llama中使用bitsandbytes库的更多信息,请参阅下文。)


Quanto

Quanto是一个使用线性量化的多功能PyTorch量化工具包,它提供了诸如权重量化、激活量化以及与各种设备和模式的兼容性等特性,支持量化感知训练,并且易于与特定设备的自定义内核集成,更多详细信息可以在公告博客、GitHub存储库和HF指南中找到。


AQLM

语言模型的加法量化(AQLM)是LLM的一种压缩方法。
它利用多个权重之间的相互依赖关系将多个权重一起量化。
AQLM将每个权重由8到16个权重组成的组表示为多个向量代码的总和。
该库还通过集成到HF的PEFT库中,支持使用Parameter-高效微调和LoRA对其量化模型进行微调。更多详细信息可以在GitHub 存储库中找到。


AWQ

激活感知权重量化(AWQ)保留了对LLM性能很重要的一小部分权重,从而减少了量化损失。
这允许模型以4位精度运行,而不会出现性能下降。变压器支持加载使用llm-awqautoawq库量化的模型。有关如何使用变压器库加载它们的更多详细信息,请参阅HF指南


AutoGPTQ

AutoGPTQ库实现了GPTQ算法,这是一种训练后量化技术,权重矩阵的每一行都被独立量化。
这些权重被量化为int4,但在推理过程中它们会动态恢复到fp16,节省4倍的内存使用量。
更多细节可以在GitHub 存储库中找到。


BitsAndBytes

BitsAndBytes是将模型量化为8位和4位的简单选项。该库支持任何模式的任何模型,只要它支持使用拥抱脸加载加速并包含torch. nn.线性层。
它还提供了在CPU和GPU之间卸载权重的功能,以支持将非常大的模型拟合到内存中,调整8位量化的异常值阈值,跳过某些模型的模块转换,以及使用8位和4位权重进行微调。
对于4位模型,它允许更改计算数据类型,对从正态分布初始化的权重使用正态浮点4(NF4)数据类型,并使用嵌套量化来节省额外的内存,而不会产生额外的性能成本。
更多详细信息可以在HF指南中找到。


2024-07-16(二)

### LLaMA-Factory 用于量化交易或分析的概述 LLaMA-Factory 主要是一个专注于自然语言处理 (NLP) 领域的语言模型微调框架[^1]。然而,对于希望利用该工具进行量化交易或金融数据分析的研究人员来说,可以考虑将其应用于金融市场中的文本数据处理任务。 #### 将 LLaMA-Factory 应用于量化交易的具体方法 为了实现这一目标,可以通过以下方式来扩展 LLaMA-Factory 的功能: 1. **新闻情绪分析** 利用 LLaMA-Factory 对财经新闻、社交媒体帖子和其他公开可用的信息源执行情感分类。这有助于识别市场趋势并预测价格变动方向。 2. **财务报告解析** 训练基于 LLaMA-Factory 构建的模型以理解复杂的公司财报文档,从而自动提取关键绩效指标(KPIs),如收入增长率、利润率等重要数值。 3. **风险预警系统开发** 基于历史事件描述构建一个能够提前感知潜在危机的风险评估引擎。通过对大量案例的学习,帮助投资者规避不必要的损失。 4. **策略生成辅助** 结合其他机器学习算法和技术(例如强化学习),创建智能化的投资组合管理方案建议器。它可以根据当前经济环境和个人偏好推荐最优资产配置比例。 ```python from llama_factory import ModelTrainer, DataPreprocessor # 初始化预处理器和训练器实例 preprocessor = DataPreprocessor() trainer = ModelTrainer() # 加载并准备用于训练的数据集 financial_texts = preprocessor.load_data('path/to/financial/texts') processed_data = preprocessor.preprocess(financial_texts) # 开始训练过程 model = trainer.train(processed_data) ``` 请注意,在实际应用之前还需要完成许多准备工作,包括但不限于获取高质量标注样本、调整超参数设置以及验证最终成果的有效性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值