大模型学习之——初步了解:量化、LoRA、QLoRA

大模型推理加速技术:LoRA、量化、稀疏化对比分析 LoRA(Low-Rank Adaptation)是一种针对大模型微调的高效技术,其核心原理是通过在预训练模型的每一层插入低秩矩阵来实现模型的适应性调整。具体而言,LoRA在每一层的权重矩阵(W)中引入两个低秩矩阵(A)和(B),使得(W)可以表示为(W + AB)的形式,其中(A)和(B)的维度远小于(W),从而大大减少了需要训练的参数数量。:LoRA技术显著降低了模型微调时的参数量。 阅读详情

什么是量化?

量化本质上是一种有损压缩技术。它的核心思想是用更少的比特数来表示模型参数,好比把一本高清彩色百科全书转码成压缩版黑白扫描件,体积大幅减小,虽然损失了一些色彩和细节,但核心内容得以保留。

这个过程在数学上通常通过缩放(scale)​ 和零点(zero_point)​ 两个参数,将浮点数范围的数值线性映射到整数范围。例如,将FP32(32位浮点数)量化为INT8(8位整数),模型体积可减小至约四分之一,从而显著降低内存占用并加速计算。根据应用时机,量化主要分为训练后量化(Post-Training Quantization, PTQ)​ 和量化感知训练(Quantization-Aware Training, QAT)

什么是LoRA?

LoRA(Low-Rank Adaptation,低秩适应)是一种用于微调大型预训练模型的技术,其核心目标是在保持模型性能的同时,大幅降低计算和存储成本。

LoRA的创新点在于它巧妙地假设模型在适应新任务时,权重的变化量(ΔW)是低秩的。这意味着,虽然原始权重矩阵很大,但它的变化可以用两个更小矩阵(A和B)的乘积来近似表示。

在具体操作上,LoRA会冻结预训练模型的所有参数,只在模型的某些层(如Transformer的注意力机制层)旁路添加一对可训练的低秩矩阵(适配器)。训练时,只更新这两个小矩阵;训练完成后,可以将适配器的权重合并回原始模型,因此推理时不会引入任何额外延迟。这是一种非常优雅的“非侵入式”微调方法。

LoRA工作原理详解

可以将LoRA理解为一个精巧的“插件”系统:

  • 冻结主网络:预训练模型学到的通用知识被完整保留,其所有权重参数在训练过程中被固定,不做更新。

  • 注入适配器:在模型的特定层(通常是Transformer架构中的查询Q、键K、值V等投影层)旁,并行添加一对小小的矩阵A和B。矩阵A负责降维,矩阵B负责升维,它们的乘积B·A形成了一个低秩的更新矩阵ΔW。

  • 前向传播:在前向计算时,模型的输出变为原始输出与适配器输出之和,即 h = W0·x + (B·A)·x。

  • 训练与合并:训练时,只优化A和B矩阵的参数。训练完成后,这个更新矩阵ΔW可以直接加到原始权重上,得到一个最终模型(W' = W0 + B·A)。因此在推理时,模型结构和计算量与原始模型完全相同,不会引入任何延迟

如果想尝试LoRA,有几个关键的超参数需要关注:

  • 秩(r):这是最重要的超参数,它决定了适配器矩阵的“容量”。秩越低,参数越少,但能力也可能越受限。通常从较小的值(如8, 16, 32)开始尝试。对于风格学习等简单任务,低秩可能就足够了;对于复杂的知识注入,则需要更高的秩。

  • Alpha(α):这是一个缩放因子,可以理解为适配器学习率,用于控制LoRA更新对原始模型的影响程度。通常设置为 alpha = 2 * r作为一个不错的起点。

  • 目标模块:指定将LoRA适配器添加到模型的哪些层。通常选择注意力机制中的q_proj, k_proj, v_proj, o_proj等模块

QLoRA-二者的强强联合

QLoRA的诞生是为了解决一个更极端的挑战:在单张消费级GPU上微调参数高达数百亿的大模型。它并非新技术,而是将量化和LoRA深度融合,实现了“1+1>2”的效果。

它的工作流程可以概括为以下两步:

  1. 极致量化:首先,将预训练模型的权重量化到极低的精度(如4-bit,甚至更低)。这步操作让模型在加载到显存时占用的空间变得极小。

  2. LoRA微调:然后,在这个已被量化的模型上,应用标准的LoRA方法。这里有一个关键细节:在训练计算前,QLoRA会动态地将4-bit权重反量化回更高精度(如BF16/FP16)以进行前向和反向传播,确保计算精度,因此其最终性能损失非常小。

此外,QLoRA还引入了双重量化(对量化参数再次量化)和分页优化器(将优化器状态临时卸载到CPU内存)等技术,进一步压榨显存空间

如何选择:LoRA vs. QLoRA

了解概念后,在实际项目中该如何选择LoRA与QLoRA?

场景

推荐技术

理由

算力资源充足(多张高性能GPU)

LoRA​

训练速度更快,流程更简单,无需处理量化带来的复杂性。

资源严格受限(单张消费级显卡)

QLoRA​

是唯一可行的方案。它能让你在有限的硬件上微调原本不可能触碰的大模型。

对任务性能有极致要求​

LoRA​

避免任何因量化可能带来的微小精度损失。

快速原型验证或学术研究​

QLoRA​

极低的硬件门槛使得实验和探索变得更容易。

总结与关系图

三者的关系可以概括为:

  • 量化​ 是一种通用的模型压缩技术,用于减小模型体积和加速推理。

  • LoRA​ 是一种参数高效微调(PEFT)技术,核心是低秩适配,用于高效适配新任务。

  • QLoRA = 量化 + LoRA。它首先对基础模型进行量化以节省内存,然后在此基础上应用LoRA进行微调,从而在极有限的资源下实现大模型微调

简单来说,可以将量化、LoRA和QLoRA的关系,看作是一套不断升级的“模型瘦身与定制”组合技。下面这个表格能让你快速抓住它们的核心关联。

技术

核心目标

与LoRA的关系

关键创新

量化​

压缩模型体积,减少内存占用,提升推理速度。

为LoRA提供更极致的内存压缩基础。

将高精度参数(如FP32)转换为低精度(如INT8/INT4),是一种模型压缩技术。

LoRA​

高效微调模型,以极少的计算资源让大模型适应新任务。

基础技术。通过在原始权重旁添加低秩适配器来实现高效微调。

冻结原始模型,只训练少量新增参数,是参数高效微调的核心方法之一。

QLoRA​

在资源极度受限(如单张显卡)下,实现对超大模型的微调。

LoRA的量化增强版。它结合了量化和LoRA两者的优势。

先对预训练模型进行4-bit量化,再基于量化后的模型应用LoRA进行微调

LoRA微调实战示例

通过一个代码生成助手的场景,详细说明使用LoRA微调预训练模型的全过程。

场景设定

目标:让一个通用的代码生成模型(如CodeLlama)更好地适应公司的内部代码规范和私有库API。

具体需求:

  • 遵循公司特定的代码风格(如命名规范、注释格式)

  • 熟练使用内部工具库的API

  • 生成符合公司安全规范的代码

完整实施步骤

环境准备与依赖安装

# 安装必要的库
pip install transformers peft accelerate torch datasets
# 如果使用QLoRA,还需要安装bitsandbytes
pip install bitsandbytes

数据准备

创建符合公司规范的训练数据,格式为指令-代码对:

# training_data.jsonl
{
  "instruction": "使用内部认证库实现用户登录功能",
  "input": "",
  "output": "from company_auth import AuthManager\n\nclass UserLogin:\n    def __init__(self):\n        self.auth_mgr = AuthManager.get_instance()\n    \n    def authenticate_user(self, username: str, password: str) -> bool:\n        \"\"\"\n        用户认证方法\n        @param username: 用户名\n        @param password: 密码\n        @return: 认证结果\n        \"\"\"\n        try:\n            return self.auth_mgr.authenticate(username, password)\n        except AuthError as e:\n            logger.error(f\"认证失败: {e}\")\n            return False"
}

{
  "instruction": "使用内部数据库库实现安全的数据查询",
  "input": "查询用户订单数据",
  "output": "from company_db import SecureQuery\nfrom constants import MAX_ROWS_LIMIT\n\ndef get_user_orders(user_id: int) -> List[Dict]:\n    \"\"\"\n    安全查询用户订单\n    @param user_id: 用户ID\n    @return: 订单列表\n    \"\"\"\n    query = \"\"\"\n        SELECT order_id, amount, status \n        FROM orders \n        WHERE user_id = %s \n        LIMIT %s\n    \"\"\"\n    return SecureQuery.execute(\n        query, \n        params=[user_id, MAX_ROWS_LIMIT],\n        sanitize=True\n    )"
}

模型加载与LoRA配置

from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
import torch

# 加载基础模型和tokenizer
model_name = "codellama/CodeLlama-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token  # 设置pad token

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,
    device_map="auto",
    load_in_4bit=True,  # 使用QLoRA,4位量化
)

# 配置LoRA参数
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,  # 因果语言模型任务
    inference_mode=False,
    r=16,              # LoRA秩,控制适配器大小
    lora_alpha=32,     # 缩放因子
    lora_dropout=0.1,  # 防止过拟合
    target_modules=[   # 指定要添加适配器的层
        "q_proj",
        "k_proj", 
        "v_proj",
        "o_proj",
        "gate_proj",
        "up_proj",
        "down_proj",
    ],
)

# 应用LoRA配置到模型
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 查看可训练参数数量

数据预处理

from datasets import Dataset

def preprocess_function(examples):
    """将指令数据格式化为模型输入"""
    prompts = []
    for i in range(len(examples['instruction'])):
        # 格式化提示词
        prompt = f"<s>[INST] {examples['instruction'][i]}\n{examples['input'][i]} [/INST]"
        prompts.append(prompt)
    
    # Tokenize
    model_inputs = tokenizer(
        prompts,
        max_length=512,
        truncation=True,
        padding="max_length",
    )
    
    # 准备标签(只计算输出部分的loss)
    labels = tokenizer(
        examples['output'],
        max_length=512,
        truncation=True, 
        padding="max_length",
    )
    
    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

# 加载和预处理数据
dataset = Dataset.from_json("training_data.jsonl")
tokenized_dataset = dataset.map(preprocess_function, batched=True)

训练配置与执行

from transformers import Trainer, DataCollatorForLanguageModeling

# 训练参数配置
training_args = TrainingArguments(
    output_dir="./code-lora-output",
    per_device_train_batch_size=4,    # 根据GPU调整
    gradient_accumulation_steps=4,     # 梯度累积
    num_train_epochs=3,
    learning_rate=2e-4,               # LoRA学习率通常稍高
    fp16=True,                        # 混合精度训练
    logging_steps=10,
    save_steps=500,
    evaluation_strategy="no",
    save_total_limit=3,
    report_to="none",                  # 禁用wandb等记录
)

# 数据整理器
data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=False,  # 不是掩码语言模型
)

# 创建Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
    data_collator=data_collator,
)

# 开始训练!
trainer.train()

# 保存LoRA适配器
trainer.save_model()

推理使用

训练完成后,有几种使用方式:

方式一:加载适配器进行推理

from peft import PeftModel

# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained(
    "codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16,
    device_map="auto",
)

# 加载LoRA适配器
model = PeftModel.from_pretrained(base_model, "./code-lora-output")

# 推理
def generate_code(instruction, input_text=""):
    prompt = f"<s>[INST] {instruction}\n{input_text} [/INST]"
    
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    
    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=256,
            temperature=0.7,
            do_sample=True,
            pad_token_id=tokenizer.eos_token_id,
        )
    
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    # 提取生成的代码部分
    generated_code = response.split("[/INST]")[-1].strip()
    return generated_code

# 测试
result = generate_code("使用内部日志库记录错误信息", "数据库连接失败")
print(result)

方式二:合并权重(获得独立模型)

# 将LoRA权重合并到基础模型中
merged_model = model.merge_and_unload()

# 保存完整模型
merged_model.save_pretrained("./company-code-llama")
tokenizer.save_pretrained("./company-code-llama")

LoRA超参数调优建议

根据场景调整关键参数:

场景类型

推荐秩(r)

学习率

Alpha

目标模块

风格适应(代码风格)

8-16

1e-4

16-32

Attention层

知识注入(API学习)

16-32

2e-4

32-64

所有线性层

复杂推理​

32-64

3e-4

64-128

全网络

实际效果对比

微调前模型输出:

def login(user, pwd):
    # 简单的登录实现
    if user == "admin" and pwd == "123":
        return True
    return False

LoRA微调后输出:

from company_auth import AuthManager
from security_utils import validate_input, log_security_event

class UserAuthenticationService:
    def __init__(self):
        self.auth_manager = AuthManager.get_instance()
    
    def authenticate_user(self, username: str, password: str) -> AuthResult:
        """
        用户认证服务
        @param username: 经过验证的用户名
        @param password: 密码(将进行安全处理)
        @return: 认证结果对象
        """
        # 输入验证
        if not validate_input(username) or not validate_input(password):
            log_security_event("INVALID_INPUT", f"User: {username}")
            return AuthResult.failed("输入验证失败")
        
        try:
            result = self.auth_manager.secure_authenticate(username, password)
            log_security_event("LOGIN_ATTEMPT", f"User: {username}, Result: {result.status}")
            return result
        except Exception as e:
            logger.error(f"认证过程异常: {e}")
            return AuthResult.failed("系统异常")

实用技巧

  1. 渐进式训练:先低秩训练风格,再提高秩注入知识

  2. 数据质量:1000条高质量数据 > 10000条噪声数据

  3. 评估指标:除了loss,还要人工评估代码质量和规范性

  4. 安全考虑:避免在训练数据中泄露敏感信息

这个完整流程展示了如何从零开始使用LoRA微调代码生成模型,可以根据具体需求调整数据和参数。

大模型微调技术LoRA与QLoRA QLORA 可以使用 4 位基础模型和低秩适配器 (LoRA) 复制 16 位完全微调性能。QLORA将微调65B参数模型的平均内存需求从>780GB的GPU内存降低到 阅读详情

相关推荐

【大模型实操 | LoRA、QLoRA微调大模型实战技巧分享,含常见QA解答!】

由于GPU内存的限制,在训练过程中更新整个模型权重成本很高。例如,假设有一个7B参数的语言模型,用一个权重矩阵W表示。在反向传播期间,模型需要学习一个ΔW矩阵,旨在更新原始权重,让损失函数值最小。权重更新如下:如果权重矩阵包含7B个参数,则权重更新矩阵也包含7B个参数,计算矩阵非常耗费计算和内存。如上所示,的分解意味着我们需要用两个较小的LoRA矩阵A和B来表示较大的矩阵。如果A的行数与相同,B的列数与相同,可以将以上的分解记为。(AB是矩阵A和B之间的矩阵乘法结果。这种方法节省了多少内存呢?

lhx17673139267的博客 1579

5分钟搞懂LoRA:如何在单卡上微调大模型(附PEFT实战代码)

本文详细介绍了LoRA(Low-Rank Adaptation)技术在单卡上微调大模型的实战方法,通过PEFT库实现高效参数微调。文章从原理到实践,解析了LoRA如何通过低秩分解大幅降低显存需求,并提供了完整的代码示例和配置建议,帮助开发者在有限硬件资源下完成大模型训练。

rgv234567的博客 601

大模型实操 ——LoRA、QLoRA微调大模型实战技巧分享

换句话说,Adam优化器在内存中为每个模型参数存储两个附加值,即如果我们正在训练一个7B参数的模型,那使用Adam就能够在训练的过程中跟踪额外的14B参数,相当于在其他条件不变的情况下,模型的参数量翻了一番。另外,值得注意的是,我的实验中包括两个算术基准测试。在之前的实验中,采用的参数是 r=8,alpha=16,这导致了2倍的扩展。可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。

m0_54851477的博客 1224

告别困惑!一文搞懂深度学习中的修剪、量化与 LoRA 技术

告别困惑!一文搞懂深度学习中的修剪、量化与 LoRA 技术

ytt0523_com的博客 1239

大模型微调---LoRA、QLoRA

LoRA微调是一种高效微调方式,它不直接更新模型的所有参数,而是引用低秩矩阵来对预训练模型进行适应,从而减少训练参数量和计算开销。

2201_75762674的博客 1553

LoRA微调的一些术语:“q_proj“, “k_proj“, “v_proj“, “o_proj“, “gate_proj“, “up_proj“, “down_proj“

列“q_proj”、“k_proj”、“v_proj”、“o_proj”、“gate_proj”、“up_proj”、“down_proj”指的是使用LoRA进行微调涉及到的一些components(或者projections)。

Criss@陈磊 1030

【大模型微调】一文掌握7种大模型微调的方法

本篇文章深入分析了大型模型微调的基本理念和多样化技术,细致介绍了LoRA、适配器调整(Adapter Tuning)、前缀调整(Prefix Tuning)等多个微调方法。详细讨论了每一种策略的基本原则、主要优点以及适宜应用场景,使得读者可以依据特定的应用要求和计算资源限制,挑选最适合的微调方案。大型语言模型(LLM)的训练过程通常分为两大阶段:阶段一:预训练阶段在这个阶段,大型模型会在大规模的无标签数据集上接受训练,目标是使模型掌握语言的统计特征和基础知识。

python123456_的博客 5万+

PID不够用?试试给PID加上‘预言’能力:史密斯预测器(SP)在温控、液位控制中的实战配置

本文深入探讨了史密斯预测器(SP)在温控和液位控制中的应用,特别针对大滞后系统的PID控制难题。通过详细解析SP的核心组件、参数整定技巧及进阶应用FSP,结合西门子PLC的实战配置方案,帮助工程师有效提升控制精度和系统稳定性。文章还提供了S7-1200的完整实现步骤和调试技巧,为工业自动化控制提供了实用解决方案。

weixin_33686714的博客 469

【机器学习】QLoRA:基于PEFT亲手量化微调Qwen2大模型

本文首先对量化和微调的原理进行剖析,接着以Qwen2-7B为例,基于QLoRA、PEFT一步一步带着大家微调自己的大模型,本文参考全网peft+qlora微调教程,一步一排坑,让大家在网络环境不允许的情况下,也能丝滑的开启大模型微调之旅。

人工智能领域博客 9435

WPF+Prism+LiveCharts+materialdesignin 搭建WPF开发框架

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容。

T_Tboy的博客 3051

CorelDRAW 2019安装指南:从下载到激活的完整步骤

本文提供了一份详细的CorelDRAW 2019安装指南,涵盖从下载安装包、检查系统环境到完成激活的完整步骤。文章重点解析了安装过程中的关键选项设置,并分享了首次启动后的优化配置与常见问题解决方案,旨在帮助用户高效、顺利地完成这款经典矢量设计软件的安装与配置。

weixin_29213827的博客 835

【大模型微调】QLoRA微调原理及实战

摘要 本文深入解析了QLoRA和DoRA两种高效微调技术的原理与应用。QLoRA通过4bit量化基座模型(采用NF4非均匀量化)配合全精度LoRA适配器,显著降低显存需求;DoRA则将权重分解为方向与幅度进行独立优化。文章详细对比了对称/非对称量化的区别,剖析了QLoRA的双重量化(Double Quantization)机制——先对权重分块量化,再对量化参数二次压缩。最后给出了HuggingFace生态下的工程配置示例,包括bitsandbytes量化配置和peft的LoRA注入方法。

weixin_51908696的博客 3326

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6389

低秩适应(LoRA)与量化LoRA(QLoRA)技术解析

通过这种技术,我们可以巧妙地绕过直接修改原始模型的庞大参数,而是添加训练一组规模小得多的参数矩阵。QLoRA(Quantized LoRA)是LoRA的进阶版本,它将量化技术与低秩适应相结合。通过将原模型量化到较低精度(如4位整数),同时使用LoRA进行微调,可以实现更高效的内存使用。值得注意的是,LoRA通常不应用于偏置项(bias)和层归一化(layer normalization)参数,这些参数量相对较小,可以直接训练。这样做可以更好地控制微调的程度,α与r的比值影响着学习率的选择。

ngadminq的博客 4557

从圆形到椭圆:CenterNet中高斯热图半径的自适应优化策略

本文深入探讨了CenterNet目标检测模型中高斯热图生成策略的优化,针对传统圆形高斯核在处理长宽比差异大目标时的局限性,提出了自适应椭圆高斯核的解决方案。通过数学推导和代码实战,详细阐述了如何根据目标边界框尺寸动态计算椭圆长短轴半径,生成更贴合目标几何形状的热图监督信号,从而有效提升模型,尤其是对无人机、车辆等不规则目标的定位精度。

alice7model的博客 985

从电商平台到微信私域:构建合规跳转链路的技术实现

在互联网营销与用户增长领域,链接跳转是连接不同平台、引导用户流量的基础技术。其核心原理是通过服务器端路由与参数解析,实现用户请求的接收、处理与重定向。这项技术的价值在于能够突破平台间的生态壁垒,实现流量的合规、可控迁移,尤其适用于跨平台营销、私域沉淀等场景。在实际应用中,常需处理微信环境限制、参数传递与动态内容生成等挑战。本文聚焦于电商平台(如淘宝)到微信生态的跳转需求,详细阐述了如何利用Node.js、Express框架及二维码生成技术,构建一个包含环境检测、参数传递与动态落地页的完整跳转系统,以解决微信

weixin_33889665的博客 323

大模型微调Fine-Tuning(二)核心技术解析:LoRA、Prefix Tuning、量化微调(QLoRA)

随着大模型的参数规模持续攀升,传统的全量微调(Full Fine-tuning)面临显存占用高、计算成本大、部署维护复杂等难题,为了解决这一瓶颈,研究者提出了多种轻量化微调技术,如LoRA、Prefix Tuning、QLoRA等,它们在保留模型性能的同时,大幅降低了资源消耗,成为企业和开发者实现多任务、高效部署的重要手段。在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。,以动态、形象的方式展示技术概念,

老皮的博客 1873

Flutter SDK的删除与重装:一步步教你如何轻松搞定

在Flutter开发过程中,我们可能会遇到一些需要重新安装Flutter SDK的情况,例如升级Flutter版本、解决依赖冲突等。本文将详细介绍如何删除并重新安装Flutter SDK,让你轻松应对各种问题。

理论都是虚的,代码才是王道。 2247

大模型微调笔记:对比LoRA、QLoRA、AdaLoRA、LoRA+

大模型微调笔记:对比LoRA、QLoRA、AdaLoRA、LoRA+

一只努力学习的小碗~ 3835

NX二次开发 计算多个体的最小包围盒

多个体的最小包围盒

weixin_72680115的博客 430

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一文读懂大模型微调:从 LoRA 到 QLoRA 再到全量微调的核心差异

一文读懂大模型微调:从 LoRA 到 QLoRA 再到全量微调的核心差异

xxue345678的博客 1252

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LLM学习记录(lora、Qlora与量化)

PTQ虽然简单,但是有个比较大的弊端是,对训练后的参数直接量化会削弱模型性能,于是有学者提出了QAT的方法,这个方法宗旨是让模型更适应后量化,主要操作是在模型训练阶段,前向推理使用低精度的模型参数,计算得到损失之后,反量化至高精度如FP16,根据这一损失优化fp16的原参数,原参数优化后再量化为低精度,参与下一轮参数更新(大致过程应该是这样,有错误的欢迎指出)。因为硬件资源有限,本来在研究LLM量化的,后来发现这与lora和Qlora有点关系,刚好我对这两个技术知之甚浅,一并进行学习了。

qq_44538746的博客 2397

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[大模型微调技术] LoRA、QLoRA、QA-LoRA 原理笔记

由于 GPU 内存的限制,在训练过程中更新模型权重成本高昂。例如,假设我们有一个 7B 参数的语言模型,用一个权重矩阵 W 表示。在反向传播期间,模型需要学习一个 ΔW 矩阵,旨在更新原始权重,让损失函数值最小。如果权重矩阵 W 包含 7B 个参数,则权重更新矩阵 ΔW 也包含 7B 个参数,计算矩阵 ΔW 非常耗费计算和内存。由等人提出的 LoRA 将权重变化的部分 ΔW 分解为低秩表示。确切地说,它不需要显示计算 ΔW。相反,,如下图所示,这就是 LoRA 节省计算资源的奥秘。

jennycisp的博客 1442

【大模型开发】开源大模型微调:QLoRA(Quantized LoRA)技术

以下内容将为你详细介绍 QLoRA(Quantized LoRA) 技术原理、与传统 LoRA 的区别、应用场景以及一个可落地的完整代码示例(基于 HuggingFace Transformers + bitsandbytes),并对核心实现进行剖析。最后,我们会对如何进一步优化和未来发展方向做一些探讨。

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 1487

低秩适应LoRA和量化低秩适应QLoRA

1. Freeze 方法,即参数冻结,对原始模型部分参数进行冻结操作;2. P-Tuning 方法,参考 ChatGLM 官方代码 ,是针对于大模型的 soft-prompt 方法;3. LoRA 方法,的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练;4. AdaLoRA 方法是对 LoRA 的一种改进,并根据重要性评分动态分配参数预算给权重矩阵;

qq_55736201的博客 1238
上一篇: RAG系统学习之——基于LangChain+Milvus+Ollama+Streamlit搭建本地RAG系统
下一篇: 详解java中的BlockingQueue阻塞队列
Jack_abu
博客等级 码龄10年 633粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Jack_abu

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值