LLM大模型量化原理

大型语言模型(LLM)可以用于文本生成、翻译、问答任务等。但是,LLM 也非常大(显然,大型语言模型)并且需要大量内存。 这对于手机和平板电脑等小型设备来说可能具有挑战性。

可以将参数乘以所选的精度大小以确定模型大小(以字节为单位)。 假设我们选择的精度是 float16(16 位 = 2 字节)。 假设我们想使用 BLOOM-176B 模型。 我们需要 1760 亿个参数 * 2 字节 = 352GB 来加载模型!

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 

换句话说,要加载所有参数权重,我们需要 12 x 32GB 显存的机器! 如果我们想让LLM具有可移植性,这就太过分了。 减少LLM内存占用的技术就是为了克服这一难题而开发的。 最流行的技术包括:

  • 量化(quantization),涉及将 LLM 的权重转换为较低精度的格式,从而减少存储它们所需的内存。
  • 知识蒸馏(knowledge distillation),涉及训练较小的LLM来模仿较大的LLM的行为。 这可以通过将知识从较大的LLM转移到较小的LLM来完成。

这些技术使得LLM能够适应小内存。 这为在各种设备上使用LLM开辟了新的可能性。 今天我们来聊聊量化(敬请关注知识蒸馏)。

1、量化简介

让我们从一个简单的例子开始。 我们需要将 2023 转换为二进制:

如你所见,该过程相对简单。 为了存储数字 2023,我们需要 12位(1 位用于 + 或 - 符号)。 对于数字,我们可以使用 int16 类型。

将 int 存储为二进制和将 float 存储为二进制之间存在很大差异。 让我们尝试将 20.23 转换为二进制:

可以看到,浮点部分(尾数:mantissa)是按 1/2^n 的组合计算的,即使有 10 位专用于浮点部分,也无法非常精确地计算。 指数部分(指数:exponent)设置为 5 位,涵盖 32 以内的所有数字。总的来说,我们使用 16 位 (FP16) 来存储最接近 20.23 的值,但这是否是保持最接近 20.23 的最有效方法? 漂浮? 如果整个数字更大(例如 202.3)怎么办?

如果我们查看标准浮点类型,我们会注意到要存储 202.3,我们需要使用 FP32,从计算角度来看,这远远不合理。 相反,我们可以使用 bfloat16 将范围(指数)保存为 8 位,将精度(尾数)保存为 7 位。 这使我们能够扩大可能的小数范围,而不会损失太多精度。

需要明确的是,在进行训练时,我们需要尽可能达到的精度。 但是,将速度和大小优先于小数点后第六位对于推理来说是有意义的。

我们可以将内存使用量从 bfloat16 减少到 int8 吗?

2、零点量化和绝对最大量化

事实上,我们可以,并且有几种量化方法:

零点量化(zero-point quantization)通过将定点范围 (-1, 1) 转换为 int8 (-127, 127),然后将 int8 转换回 bfloat16 来节省一半的内存。

绝对最大量化(abs-max quantization)与零点量化类似,但我们没有设置自定义范围 (-1,1),而是将其设置为 (-abs(max), abs(max))。

让我们看一下这些量化如何在矩阵乘法的示例中使用,注意结果矩阵中数值的损失。首先看下未量化的精确矩阵乘法:

零点量化后的矩阵乘法:

绝对最大量化后的矩阵乘法:

3、异常数值分离计算

可以注意到,计算结果中较大的数值如 [-1579, -1780],量化后计算的损失比较大(零点量化后得到 [-1579, -1752],绝对最大量化后得到 [-1565,-1786])。 为了克服这些问题,我们可以单独处理离群的异常值:

正如你所看到的,结果更接近真实值。

4、量化到4个比特

但有没有一种方法可以在不损失太多质量的情况下使用更少的空间呢?

令我惊讶的是,有办法! 如果我们不是独立地将每个数字转换为较低类型,而是考虑错误并将其用于调整,会怎么样? 这种技术称为 GPTQ。

与之前的量化一样,我们尽可能找到最接近的小数匹配,使总转换误差尽可能接近于零。

下面是GPTQ近似的第一步:

我们以这种方式逐行填充矩阵:

结果与异常值分离计算相结合,提供了相当不错的结果:

5、量化方法比较

我们现在可以比较各种量化方法:

LLM.int8() 方法表现得非常好! GPTQ 方法会损失质量,但允许使用两倍于 int8 方法的 GPU 内存。

6、BitsAndBytes量化参数

在代码中,你可能会发现类似于以下内容:

from transformers import BitsAndBytesConfig# Configure BitsAndBytesConfig for 4-bit quantization
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_use_double_quant=True,bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.bfloat16,
)
# Loading model in pre-set configuration
pretrained_model = AutoModelForCausalLM.from_pretrained(model_id,quantization_config=bnb_config,
)

参数说明如下:

  • load_in_4bit 标志指定模型应以 4 位精度加载。  
  • bnb_4bit_use_double_quant 标志指定应使用双量化。
  • bnb_4bit_quant_type 标志指定量化类型。
  • bnb_4bit_compute_dtype 标志指定计算数据类型。

7、结束语

总而言之,我们了解了小数如何存储在内存中、如何通过一些精度损失来减少内存占用,以及如何通过 4 位量化运行选定的模型。


原文链接:LLM的量化 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196240.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用maven命令打包依赖

1、maven仓库地址 阿里云地址:https://developer.aliyun.com/mvn/search 中央仓库地址:https://mvnrepository.com/ 2、下载方式 在地址栏中输入要搜索的依赖 选择需要的版本 (1)直接复制 (2)pom下载 …

毅速丨金属3D打印将为模具制造企业带来变革

金属3D打印技术的发展给模具制造带来了巨大的创新价值,包括重塑产品、重组制造、重构业务。 首先,3D打印技术可以大幅度缩短模具制造的生产周期,提高生产效率。传统的模具制造需要经过多个工序和加工过程,而3D打印技术通过打印完成…

Struts2 数据校验之四兄弟

现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。 有了这验证就很好的保证了我们的信息的准确性和安全性。 接下来我给大家讲解一下用struts2怎么实…

开启数据库审计 db,extended级别或os级别)并将审计文件存放到/opt/oracle/audit/下

文章目录 1、登录到数据库2、查看审计状态3、创建审计目录4、启用审计5、设置审计文件路径6、再次查看结果 1、登录到数据库 使用SQL*Plus或者其他Oracle数据库客户端登录到数据库。 sqlplus / as sysdba;2、查看审计状态 show parameter audit;目前是DB状态,并且…

三菱FX3U小项目—运料小车自动化

目录 一、项目描述 二、IO口分配 三、项目流程图 四、项目程序 五、总结 一、项目描述 设备如下图所示,其中启动按钮SB1用来开启运料小车,停止按钮SB2用来手动停止运料小车(其工作方式任务模式要求)。当小车在原点SQ1位置,按下启动按钮S…

【Gradle构件工具深度学习】

Gradle构件工具深度学习 1. 课程大纲1.1 Gradle入门1.2 与Idea整合1.3 Gradle进阶 2. 常见项目构建工具3. 安装gradle 1. 课程大纲 1.1 Gradle入门 基本介绍、常用指令、项目目录、项目应用 1.2 与Idea整合 Groovy语法、整合IDEA、搭建web工程、项目部署 1.3 Gradle进阶 生命周…

CVE-2021-42287CVE-2021-42278 域内提权

倘见玉皇先跪奏:他生永不落红尘 本文首发于先知社区,原创作者即是本人 前言 网络安全技术学习,承认⾃⼰的弱点不是丑事。只有对原理了然于⼼,才能突破更多的限制。拥有快速学习能力的白帽子,是不能有短板的&#xf…

【HarmonyOS开发】配置开发工具DevEco Studio

1、下载 注意: 1、安装过程中,一定要自定义安装位置,包比较大,包比较大,包比较大!!! 2、可以将该工具添加到右键中,否则,如果你的项目不是HarmonyOS&#xff…

基于PLC的污水厌氧处理控制系统(论文+源码)

1. 系统设计 污水厌氧由进水系统通过粗格栅和清污机进行初步排除大块杂质物体以及漂浮物等,到达除砂池中。在除砂池系统中细格栅进一步净化污水厌氧中的细小颗粒物体,将污水厌氧中的细小沙粒滤除后进入氧化沟反应池。在该氧化沟系统中进行生化处理&…

Android 实现三维空间坐标系(WebView与JS交互,支持多条曲线,可设置坐标轴翻转等)

全部代码已经上传&#xff0c;点击上方进行下载 支持多条曲线的绘制&#xff0c;可旋转拖动放大缩小 1.布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/…

vb.net U盘或移动硬盘 插入 自动(静默)复制指定格式文件

U盘或移动硬盘 插入 自动复制指定格式文件至系统盘符 开发语言&#xff1a;vb.net 重要申明&#xff1a;该程序只是防止本人不在电脑旁时&#xff0c;别人偷偷copy你的电脑文件&#xff0c;让他偷鸡成了也要蚀把米。严禁从事黑客或违反道德等不良行为&#xff0c;故而不发布程…

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer&#xff1a;表现层状态转移)是一种软件架构风格&#xff0c;其核心是面向资源的一种设计。何为面向资源&#xff0c;意思是网络上的所有事物都可以抽象为资源&#xff0c;而每个资源都有唯一的资源标识&…

UnoCss(原子化css引擎) 让你的开发更轻松愉快

什么是原子化CSS&#xff0c;UnoCSS又是什么&#xff0c;对此有疑问的推荐看下antfu的这篇文章——重新构想原子化 CSS (antfu.me) 相信看完这篇文章的你也会跟我一样热衷于UnoCSS. 介绍 今天介绍一个CSS开发利器 UnoCSS , 是一个具有高性能且极具灵活性的即时原子化 CSS 引擎…

识别代理IP:保障网络安全的重要一环

在互联网的世界中&#xff0c;代理服务器被广泛用于隐藏用户真实IP地址&#xff0c;带来了一些挑战&#xff0c;特别是在网络安全和欺诈检测方面。本文将探讨如何识别代理IP&#xff0c;以确保网络的安全性和可靠性。 1. 代理IP的背景与用途 代理服务器是位于用户和目标服务器…

融合语言模型中的拓扑上下文和逻辑规则实现知识图谱补全11.18

融合语言模型中的拓扑上下文和逻辑规则实现知识图谱补全 摘要1 引言2 相关工作2.1 事实嵌入法2.2 拓扑嵌入方法2.3 规则融合方法2.4 基于LM的方法 3 准备3.1 知识图谱和拓扑上下文3.2 KG中的逻辑规则4.3 三元组嵌入 5 实验和结果5.1 数据集和评价指标 摘要 知识图补全&#xf…

【C++】——阶段性测验(帮助巩固C++前半部分知识)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

深度学习数据集—文本、数字、文字识别大合集

最近收集了一大波关于文本、数字识别相关的数据集&#xff0c;有数字识别、也有语言文字识别&#xff0c;废话不多说现在分享给大家&#xff01;&#xff01; 1、500张手写拼音数据集 500张手写拼音数据集&#xff0c;包含对应txt格式标注及图片&#xff0c;&#xff0c;并提…

STM32/N32G455国民科技芯片驱动DS1302时钟---笔记

这次来分享一下DS1302时钟IC&#xff0c;之前听说过这个IC&#xff0c;但是一直没搞过&#xff0c;用了半天时间就明白了原理和驱动&#xff0c;说明还是很简单的。 注&#xff1a;首先来区分一下DS1302和RTC时钟有什么不同&#xff0c;为什么不直接用RTC呢&#xff1f; RTC不…

asp.net心理健康管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 心理健康管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 系统视频链接 https://www.bilibili.com/video/BV19w411H7P4/ 二、功能介绍 本系统使用Microsoft Visual Studio…

【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理

1. 基本定义 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。一般的相机传感器都是采用彩色滤光片阵列(CFA)放置在光感测单元上&#xff0c;在每个像素处仅捕获三种原色成分中的一种。 去马赛克方法主要关注于复原非常规区域&#xff0c;比如边缘…