QLoRA和LoRA 微调

QLoRA 其实是一种结合了量化和 LoRA 微调技术的统一方法,而不是同时使用两种不同的微调方式。换句话说,QLoRA 的意思就是:先把大模型的主权重用低精度(例如 4-bit)量化,从而大幅减少存储需求;然后在此基础上,通过 LoRA 技术,仅对少部分参数(比如 1%)进行微调,这部分参数保留在较高的精度(例如 FP16)。


详细解释

  • LoRA 微调:
    LoRA(Low-Rank Adaptation)是一种微调方法,它通过引入低秩矩阵来调整模型的部分参数,而不改变原始模型的全部权重。这种方法适用于在有限数据或计算资源情况下,对大模型进行有效的微调。

  • QLoRA:
    QLoRA 就是结合了量化和 LoRA 的技术。它先将大模型的主权重量化为 4-bit(从而降低存储和计算成本),然后只对模型中的一小部分参数(例如 1%)使用 LoRA 微调,保持这些额外权重为 FP16 精度。这样既能大幅降低资源消耗,又能通过 LoRA 对模型进行有效的微调。


举例说明

假设有一个 10B 参数的模型:

  • 全精度存储需求:
    原始模型采用 FP16,每个参数 2 字节,总共 10B × 2 = 20GB。

  • 使用 QLoRA:

    1. 首先,将大部分 10B 参数用 4-bit 量化保存。4-bit 每个参数大约 0.5 字节,所以量化后占用 10B × 0.5 = 5GB。
    2. 然后,对其中 1% 的参数(即 100M 个参数)应用 LoRA 微调,这部分权重仍使用 FP16,即 100M × 2 字节 = 200MB。
    3. 整个模型最终存储需求约 5GB + 200MB = 5.2GB。

这里的“QLoRA”并不是同时用两种方法,而是一种集成了量化和 LoRA 微调的技术方案。


总结:
QLoRA 本身就是在基于低精度量化的基础上,通过 LoRA 微调来调整一小部分参数。它们不是互斥的,而是互补的,正是这种组合方法使得大模型在节省资源的同时还能达到较好的微调效果。

存储需求

存储需求主要根据模型中参数的总数以及每个参数占用的字节数来计算。简单来说,计算公式为:

存储需求 = 参数数量 × 每个参数所占字节数


具体举例

  1. FP16存储(16位浮点数):

    • 每个参数占用 16 位,也就是 2 字节。
    • 如果模型有 10 亿个参数(1B),那么存储需求就是:
      1B × 2 字节 = 2GB
    • 如果模型有 100 亿个参数(10B),存储需求就是:
      10B × 2 字节 = 20GB
  2. 4-bit量化存储:

    • 4-bit 等于 4/8 = 0.5 字节。
    • 对于 10B 参数的模型,经过 4-bit 量化后的存储需求为:
      10B × 0.5 字节 = 5GB
  3. 使用 LoRA 或 qLoRA 微调时:

    • LoRA 只对模型中一小部分参数进行更新,比如 1% 的参数。
    • 如果一个 10B 参数的 FP16 模型,1% 参数大约是 0.1B,存储需求为:
      0.1B × 2 字节 = 0.2GB
    • 这部分更新的参数就需要额外的存储,而整体模型仍然以原始的量化或全精度格式存在。

总结

  • 如果你用 FP16 格式存储,一个拥有 10B 参数的模型大约需要 20GB 的存储空间;如果量化到 4-bit,则大约只需要 5GB。
  • 使用 LoRA 微调时,你只更新模型的一小部分参数,这部分参数所需的存储相对更少。

这样的计算方法可以帮助你评估训练和部署模型时所需的存储资源。

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

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

相关文章

Qt Concurrent 并发 Map 和 Map-Reduce

并发 Map 和 Map-Reduce QtConcurrent::map()会对容器中的每个项目应用一个函数,对项目进行就地修改。QtConcurrent::mapped() 类似于 map(),但它返回的是一个包含修改内容的新容器。QtConcurrent::mappedReduced() 类似于 mapped(),只不过修…

RT-Thread-线程管理

一、线程管理 RT_Thread线程管理主要是实现线程管理和调度,线程分为用户线程和系统线程。RT_Thread的线程调度器是抢占式的,寻找就绪状态最高优先级线程。 线程管理的API函数 创建线程函数 rt_thread_t rt_thread_create( const char *name, //线程名称 …

【CC2530 教程 十二】CC2530 Z-Stack 硬件抽象层

目录 一、硬件抽象层简介: (1)HAL 硬件抽象层是什么? (2)通俗易懂的解释: (3)具体例子: 二、硬件抽象层HAL: (1)HAL…

Linux如何判断磁盘是否已分区?

在 Linux 系统中,判断磁盘是否已分区可通过以下方法实现: 方法 1:使用 fdisk -l 命令 此命令会列出所有磁盘及其分区的详细信息: sudo fdisk -l输出解读: 若磁盘(如 /dev/sdb)下有类似 /dev/…

《熔化焊接与热切割作业》考试注意事项

考试前的准备 携带必要的证件和材料:考生需携带身份证、准考证等有效证件,以及考试所需的焊接工具、材料等。确保证件齐全,避免因证件问题影响考试。 提前检查焊接设备和工具:在考试前,考生应仔细检查焊接设备和工具是…

Matlab Hessian矩阵计算(LoG算子)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 图像的Hessian矩阵用于描述图像灰度值的二阶导数,可以用来分析图像的局部曲率和变化。例如,在图像边缘检测、特征点检测等任务中,Hessian矩阵能帮助我们识别图像的结构。 Hessian矩阵定义 对于二维图像,Hessian…

selenium之处理弹框(alert、confirm、prompt)

弹框 WebDriver提供了一个API, 用于处理JavaScript提供的三种类型的原生弹窗消息. 这些弹窗由浏览器提供限定的样式.;分别为以下三种 alerts警告框confirm确认框prompt提示框 话不多说,开始实践下就知道怎么一回事了 alerts 警告框,显示…

Visual Studio 2019 Qt QML 项目环境搭建常见问题处理方法

在 Visual Studio 2019 运行 Qt/QML 项目比直接使用QtCreator环境麻烦,主要是有qmake 的一些配置项不能在 Visual Studio中设置。下面整理一些常见问题的处理方法,供参考: 搭建VS Qt 环境,在Visual Studios 2019下面安装 Qt Vis…

【Linux】POSIX信号量与基于环形队列的生产消费者模型

目录 一、POSIX信号量: 接口: 二、基于环形队列的生产消费者模型 环形队列: 单生产单消费实现代码: RingQueue.hpp: main.cc: 多生产多消费实现代码: RingQueue.hpp: main.…

RAG优化:python从零实现GraphRag 一场文档与知识的“恋爱”之旅

嘿,亲爱的算法工程师们,准备好迎接一场文档与知识的“恋爱”之旅了吗?今天我们要介绍的 Graph RAG,就像是一位“红娘”,帮助文档和知识在图的世界里找到彼此,擦出智慧的火花! 文章目录 为什么需要 Graph RAG?Graph RAG 的“恋爱秘籍”准备好了吗?让我们开始吧!环境设…

深入 SVG:矢量图形、滤镜与动态交互开发指南

1.SVG 详细介绍 SVG(Scalable Vector Graphics) 是一种基于 XML 的矢量图形格式,用于描述二维图形。 1. 命名空间 (Namespace) ★ 了解 命名空间 URI:http://www.w3.org/2000/svg 用途:在 XML 或 XHTML 中区分不同标…

HTTPS 加密过程详解

HTTPS 的核心组成是 HTTP 协议与 SSL/TLS 加密层的结合,通过加密传输、身份验证和完整性校验机制,确保数据安全。其加密过程通过以下方式保障数据的机密性、完整性和身份验证: 一、HTTPS 的核心组成 1. HTTP 协议 作为基础通信协议&#xf…

嵌入式硬件工程师从小白到入门-速通版(一)

嵌入式硬件工程师从小白到入门:知识点速通与实战指南 一、基础硬件知识体系 电子电路基础 基本概念:电流、电压、电阻、电容、电感等;电路分析:欧姆定律、基尔霍夫定律、戴维南定理;元器件特性:二极管、三极…

SpringBoot通过Map实现天然的策略模式

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot通过Map实现天然的策略模式 ⏱️ 创作时间: 202…

WordPress WooCommerce 本地文件包含漏洞(CVE-2025-1661)

免责声明 仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 一:产品介绍 HUSKY – WooCommer…

matlab近似计算联合密度分布

在 Matlab 中,当A和B是两个序列数据时,可以通过以下步骤来近似求出A大于B的概率分布:数据准备:确保序列A和B具有相同的长度。如果长度不同,需要进行相应的处理(例如截取或插值)。计算A大于B的逻…

可视化动态表单动态表单界的天花板--Formily(阿里开源)

文章目录 1、Formily表单介绍2、安装依赖2.1、安装内核库2.2、 安装 UI 桥接库2.3、Formily 支持多种 UI 组件生态: 3、表单设计器3.1、核心理念3.2、安装3.3、示例源码 4、场景案例-登录注册4.1、Markup Schema 案例4.2、JSON Schema 案例4.3、纯 JSX 案例 1、Form…

NAT 实验:多私网环境下 NAPT、Easy IP 配置及 FTP 服务公网映射

NAT基本概念 定义:网络地址转换(Network Address Translation,NAT)是一种将私有(保留)地址转化为合法公网 IP 地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。作…

C语言-桥接模式详解与实践

文章目录 C语言桥接模式详解与实践1. 什么是桥接模式?2. 为什么需要桥接模式?3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (display_bridge.h)4.3 实现文件 (display_bridge.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特点 6.…

el-table 合并单元格

vue2使用el-table合并单元格&#xff0c;包括合并行、合并列 <el-table:header-cell-style"handerMethod":span-method"arraySpanMethod"cell-click"handleCellClick":data"tableData"style"width: 100%"><el-tabl…