当前位置: 首页 > news >正文

Llama - 量化

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

文章目录

    • PyTorch中支持的量化模式
    • 使用 TorchAO 进行 Pytorch量化
    • HF支持的量化
      • Quanto
      • AQLM
      • AWQ
      • AutoGPTQ
      • BitsAndBytes


量化是机器学习中使用的一种技术,用于减少模型的计算和内存需求,使它们在服务器和边缘设备上的部署更加高效。
它涉及表示模型权重和激活,通常是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-awq和autoawq库量化的模型。有关如何使用变压器库加载它们的更多详细信息,请参阅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(二)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Bubbliiiing 的 Retinaface rknn python推理分析
  • git使用总结
  • PV(Page View)、UV(Unique Visitor)和IP(Internet Protocol)
  • 【前端】Babel详解
  • 【网络安全科普】勒索病毒 防护指南
  • 9.11和9.9哪个大?
  • FOG Project 文件名命令注入漏洞复现(CVE-2024-39914)
  • Qt Creator配置以及使用Valgrind - 检测内存泄露
  • vscode 打开远程bug vscode Failed to parse remote port from server output
  • react 快速入门思维导图
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 二进制游戏(200分)- 三语言AC题解(Python/Java/Cpp)
  • SqlServer: LAG等开窗函数应用
  • 网络编程-TCP/IP
  • H3CNE(计算机网络的概述)
  • K12智慧校园智能化解决方案
  • php的引用
  • 「译」Node.js Streams 基础
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • css的样式优先级
  • ES10 特性的完整指南
  • Java 最常见的 200+ 面试题:面试必备
  • Java的Interrupt与线程中断
  • JS实现简单的MVC模式开发小游戏
  • spring学习第二天
  • ucore操作系统实验笔记 - 重新理解中断
  • 那些年我们用过的显示性能指标
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 用jQuery怎么做到前后端分离
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • $GOPATH/go.mod exists but should not goland
  • $L^p$ 调和函数恒为零
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (pojstep1.3.1)1017(构造法模拟)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)Flink Join 连接
  • (备份) esp32 GPIO
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (杂交版)植物大战僵尸
  • (转)memcache、redis缓存
  • **python多态
  • .describe() python_Python-Win32com-Excel
  • .Net 4.0并行库实用性演练
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET开源项目介绍及资源推荐:数据持久层
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .skip() 和 .only() 的使用
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Import注解详解
  • @SpringBootConfiguration重复加载报错
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945