What is LoRA?

    一种参数高效微调技术,将小型可训练低秩矩阵注入冻结的预训练模型中,大幅减少适配大语言模型所需的内存和计算量。

    Definition

    LoRA(Low-Rank Adaptation of Large Language Models,大语言模型的低秩适配)是Hu等人在2021年提出的微调方法,完全避免修改原始模型权重。相反,它冻结预训练的权重矩阵,并在每个Transformer层的注意力投影中注入成对的小型可训练低秩分解矩阵(通常称为A和B)。在前向传播过程中,某层的输出变为原始冻结权重乘以输入加上低秩适配器贡献的总和。由于这些适配器矩阵的秩(r)远小于原始维度,可训练参数的数量减少了几个数量级——通常从数十亿减少到仅几百万。

    这种方法有两个深远的实际好处。首先,它使消费级和中端GPU上的微调成为可能:全量微调需要28 GB VRAM的7B参数模型,在结合4位量化(QLoRA)时可以用低至6 GB进行LoRA微调。其次,适配器权重很小——通常10到100 MB——意味着组织可以为单个基础模型维护数十个任务特定的适配器,而不会成倍增加存储成本。

    LoRA已成为开源LLM生态系统中占主导地位的微调策略。它被Hugging Face PEFT、Axolotl、LLaMA-Factory以及几乎所有主要训练框架支持。QLoRA(量化基础权重)、DoRA(分解权重更新)和rsLoRA(秩稳定缩放)等变体继续推动效率和质量的前沿。

    Why It Matters

    在LoRA之前,微调大语言模型意味着更新每个参数——这个过程需要多块高端GPU,并为每个任务产生一个完整大小的模型副本。这在经济和运营上对大多数组织来说是不可行的。LoRA通过将硬件需求降低4-10倍、存储需求降低100倍以上来使微调平民化。它还引入了可交换适配器的概念:单个基础模型可以通过在推理时加载不同的LoRA适配器来服务多个用例,实现多租户部署,每个客户获得个性化模型而无需复制完整权重。

    How It Works

    对于原始模型中维度为d × k的给定权重矩阵W,LoRA引入两个矩阵:维度为d × r的A和维度为r × k的B,其中r(秩)远小于d和k——通常为8、16或64。训练期间,W被冻结,只更新A和B。修改后的前向传播计算:output = W·x + (A·B)·x · (α/r),其中α是控制适配器影响的缩放因子。推理时,适配器贡献A·B可以合并到W中,不增加任何延迟。训练目标通常是每个注意力层中的查询和值投影矩阵(q_proj、v_proj),不过扩展到其他模块(k_proj、o_proj、gate、up、down投影)可以以最小代价提升质量。

    python
    from peft import LoraConfig, get_peft_model
    from transformers import AutoModelForCausalLM
    
    # Load base model
    model = AutoModelForCausalLM.from_pretrained(
        "mistralai/Mistral-7B-v0.3",
        load_in_4bit=True,  # QLoRA: 4-bit quantized base
    )
    
    # Configure LoRA adapter
    lora_config = LoraConfig(
        r=16,                          # Rank of the low-rank matrices
        lora_alpha=32,                 # Scaling factor (alpha / r)
        target_modules=[
            "q_proj", "v_proj",        # Attention projections
            "k_proj", "o_proj",        # Optional: more modules = better quality
        ],
        lora_dropout=0.05,             # Dropout for regularization
        bias="none",
        task_type="CAUSAL_LM",
    )
    
    # Apply LoRA — only adapter params are trainable
    model = get_peft_model(model, lora_config)
    model.print_trainable_parameters()
    # Output: trainable params: 13,631,488 || all params: 7,248,023,552 || 0.19%
    使用Hugging Face PEFT在4位量化的Mistral 7B模型上配置LoRA适配器。仅0.19%的参数是可训练的。

    Example Use Case

    一家法律科技公司需要三个任务的专业化模型:合同条款提取、监管合规问答和判例法摘要。他们在单个Llama 2 13B基座上微调了三个各50 MB的LoRA适配器,而不是微调和托管三个单独的13B参数模型(需要约78 GB存储和三个GPU分配)。推理时,根据传入请求的任务类型加载相应的适配器。额外存储总量:150 MB。GPU分配总量:一个实例服务所有三个任务。

    Key Takeaways

    • LoRA冻结原始模型并训练小型低秩适配器矩阵,将可训练参数减少99%以上。
    • 结合量化(QLoRA),它可以在单块消费级GPU上微调7B以上的模型。
    • 适配器权重通常为10-100 MB,允许每个基础模型有多个任务特定的适配器。
    • 适配器可以在推理时合并到基础权重中,不增加额外延迟。
    • LoRA被所有主要微调框架支持,已成为行业标准方法。

    How Ertas Helps

    LoRA是Ertas Studio的默认微调方法。当用户配置训练任务时,Studio自动设置LoRA(或对于较大模型使用QLoRA),提供秩、alpha和目标模块的合理默认值——同时为需要完全控制的高级用户开放这些参数。生成的适配器权重被高效存储在Ertas Hub中,可以进行版本管理、分享和堆叠。在部署时,Ertas Cloud加载一次基础模型并按请求热切换LoRA适配器,实现多租户推理而无需复制模型权重。

    Related Resources

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.