QLora 里的4-bit NormalFloat Quantization中的分位数量化

目录

正态分布的分位数函数详解

1. 正态分布简介

2. 分位数函数定义

3. 正态分布的分位数函数计算

4-bit NormalFloat Quantization

4-bit NormalFloat Quantization详解

1. 4-bit NormalFloat Quantization的定义和应用

2. 4-bit NormalFloat Quantization的工作原理

3. 4-bit NormalFloat Quantization的优势

4. 4-bit NormalFloat Quantization在QLoRA中的应用


正态分布的分位数函数详解

1. 正态分布简介

正态分布,也被称为高斯分布,是连续概率的一种。它的概率密度函数呈钟形,可以完全由两个参数(均值和标准差)确定。在正态分布中,均值、中位数和众数是相等的。

2. 分位数函数定义

分位数函数,又称为逆累积分布函数,是累积分布函数的逆函数。对于正态分布,其分位数函数可以给出对应于预先指定的累积概率的观测值。例如,如果我们知道某个变量服从标准正态分布,我们可以使用分位数函数来找出对应于累积概率0.975的观测值。

3. 正态分布的分位数函数计算

正态分布的分位数函数无法用初等函数表示,但可以通过数值方法计算。在实际应用中,通常会使用查表或者软件(如R、Python等)来计算正态分布的分位数。

在Python中,可以使用scipy库的norm.ppf函数来计算正态分布的分位数。例如,计算标准正态分布(均值为0,标准差为1)累积概率为0.975的分位数,可以使用以下代码:

from scipy.stats import norm
norm.ppf(0.975, loc=0, scale=1)

这将返回约为1.96的结果,这意味着在标准正态分布中,约有97.5%的值小于或等于1.96。

4-bit NormalFloat Quantization

分位数量化的工作原理是将数据分布的分位数用较少的比特数来表示,从而达到数据压缩的目的。具体来说,它首先通过经验累积分布函数来估计输入数据的分位数,然后将这些分位数进行量化,即将连续的分位数转化为离散的数值。

分位数量化的工作方式是通过估算输入张量的分位数来利用经验累积分布函数。然而,分位数量化的主要挑战在于估计分位数的步骤可能需要较大的计算资源。

在神经网络的环境中,预先训练的权重通常呈现出零中心的正态分布,其标准差为σ。通过调整σ,可以使分布刚好符合NF的范围。对于NF,作者设定了一个随意的范围[-1, 1]。因此,数据类型和神经网络权重的分位数都需要被标准化到这个范围。

对于范围在[-1, 1]内的零均值正态分布,计算了从信息理论角度看最优的数据类型。

这个过程包括:(1) 估计理论N(0, 1)分布的 2**k+1 个分位数,从而得到一个k位的分位数量化数据类型;

(2) 将这个NF的值标准化到[-1, 1]范围;

(3) 通过最大绝对值的重新标定,将输入权重张量标准化到[-1, 1]范围,然后进行量化。一旦模型权重的范围与NF的范围相匹配,就可以像通常那样进行量化。这个过程等同于重新调整权重张量的标准差,使其与k位数据类型的标准差相匹配。更详细地,下面这个公式展示了 2**k+1到分位数的映射关系:

公式中的Qx 是分位数函数的表示。

4-bit NormalFloat Quantization详解

1. 4-bit NormalFloat Quantization的定义和应用

4-bit NormalFloat Quantization是一种改进的量化方法,它是基于之前的8-bit量化方法中提到的Block-wise Quantization和Quantile Quantization^1^。该方法被应用在QLoRA中,一个模型加载和训练的方法,其中模型使用4-bit NormalFloat量化加载,并在训练时将数值反量化为bf16进行训练^1^。

2. 4-bit NormalFloat Quantization的工作原理

Block-wise Quantization通过将数值分批量化,每个批次使用独立的常数c,以解决outlier对量化过程的影响^1^。Quantile Quantization通过将数值分为均匀分布的16个区间来充分利用16个可用的量化值,以避免信息丢失^1^。QLoRA使用双重量化方法,对常数c进行额外的量化,以减少显存开销^1^。

3. 4-bit NormalFloat Quantization的优势

4-bit NormalFloat(NF4)量化数据类型是一种对于正态分布数据而言在信息论上最优的量化数据类型^2^。使用4-bit NormalFloat Quantization,可以有效地减少显存使用,尽管实际训练是在bf16水平上进行的^1^。

4. 4-bit NormalFloat Quantization在QLoRA中的应用

QLoRA使用4位NormalFloat(NF4)量化数据类型,以及分页优化器,用于管理内存波动^2^。使用QLoRA进行微调的Guanaco模型在Vicuna基准测试上达到了ChatGPT性能水平的99.3%^2^。

以上就是关于4-bit NormalFloat Quantization的详细介绍,希望对您有所帮助。

参考文献

  1. "QLoRA: 4bit量化+LoRA训练=瞬间起飞 - 知乎" link
  2. "QLoRA: Efficient Finetuning of Quantized LLMs论文解读" link

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

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

相关文章

Linux字符设备驱动(一) - 框架

字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标、键盘、显示器、串口等等,当我们执行ls -l /dev的时候,就能看到大量…

信号与进程(1):进程创建与进程等待

进程创建 参考博客 fork与vfork的区别 fork()与vfork()函数 fork :子进程拷贝父进程的数据段、代码段等资源 vfork :子进程与父进程共享数据段、代码段等资源fork :父子进程的执行次序不确定 vfork :保证子进程先运行&#xff0…

css实现上下左右对勾选中状态角标

🍥左上角 🍥右上角 🍥左下角 🍥右下角: 🍥左上角: .blueBackground {position: relative;border: 1px solid #91c7f3;background: #F0F8FF !important;&:after {content: "";position: absolute;top:…

今天发现个有意思的问题:java基础篇章网络编程的报错问题,顺便看一下各个GPT的实力

问题: 一个java socket网络编程的引发的异常,具体代码Client.java、Server.java,如下 Client.java package Test2;import java.io.*; import java.net.Socket;public class Client {public static void main(String[] args) throws IOExce…

✌粤嵌—2024/5/6—盛最多水的容器

代码实现&#xff1a; 方法一&#xff1a;暴力解法 #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b))int maxArea(int *height, int heightSize) {int ans 0;for (int i 0; i < heightSize; i) {for (int j i; j < heig…

武汉星起航:跨境电商行业领航者,一站式孵化服务引领全球趋势

在全球化日益深入的今天&#xff0c;跨境电商作为连接各国市场的桥梁&#xff0c;其重要性日益凸显。在这一潮流中&#xff0c;武汉星起航电子商务有限公司以其前瞻性的战略眼光和丰富的运营经验&#xff0c;迅速崛起为跨境电商行业的领军者。公司不仅自营亚马逊跨境电商业务&a…

一、Redis五种常用数据类型

Redis优势&#xff1a; 1、性能高—基于内存实现数据的存储 2、丰富的数据类型 5种常用&#xff0c;3种高级 3、原子—redis的所有单个操作都是原子性&#xff0c;即要么成功&#xff0c;要么失败。其多个操作也支持采用事务的方式实现原子性。 Redis特点&#xff1a; 1、支持…

核心代码分析

核心代码分析 下面的代码主要有两个作用 判断是否为扫描器或者密码爆破工具&#xff0c;进行交互握手&#xff0c;效果是扫描器直接爆3306弱口令。如果是直接连接&#xff0c;去读取设定好的文件&#xff0c;并写入本地保存。 这些函数用于从MySQL数据库中获取指定文件的内容…

3D+仿真分析:高效实现海底石油管道系统设计

Bentley AutoPIPE 助力节省寻找更佳管道路线所需的时间和成本 评估管道完整性以提高石油产量 从墨西哥湾浅水区开采石油通常需要铺设新的海底管道&#xff0c;从而在高压和高温条件下高效、安全地输送原油。 Grupo EspecializadoenObras Marinas (GEOMSA) 是墨西哥湾管道—土体…

iOS ------ JSONModel源码

一&#xff0c;JSONModel的基本使用 1&#xff0c;基本使用方法 - (instancetype)initWithDictionary:(NSDictionary *)dict error:(NSError **)err; - (instancetype)initWithData:(NSData *)data error:(NSError **)error; - (instancetype)initWithString:(NSString *)str…

239 基于matlab的EKF(扩展卡尔曼滤波)_UKF(无迹卡尔曼滤波)_PF(粒子滤波)三种算法的估计结果比较

基于matlab的EKF(扩展卡尔曼滤波)_UKF(无迹卡尔曼滤波)_PF&#xff08;粒子滤波&#xff09;三种算法的估计结果比较&#xff0c;输出估计误差&#xff0c;并单独对粒子滤波进行估计及其置信区间可视化。程序已调通&#xff0c;可直接运行。 239 EKF(扩展卡尔曼滤波) - 小红书 …

Linux中gcc/g++的使用

文章目录 前言gcc/g 前言 gcc和g即为编译器。其中gcc为c语言的编译器&#xff0c;只能编译c语言&#xff1b;g为c的编译器&#xff0c;既能编译c语言&#xff0c;又能编译c。 在前面的文章中&#xff0c;我们提到代码转换成可执行程序需要经过 预处理&#xff08;进行宏替换)…