What is LoRA?

    參數高效微調技術,將小型可訓練低秩矩陣注入凍結的預訓練模型。

    Definition

    LoRA(大型語言模型的低秩適配)是 Hu 等人在 2021 年提出的微調方法,完全避免修改原始模型權重。它凍結預訓練的權重矩陣,並在每個 Transformer 層的注意力投射中注入成對的小型可訓練低秩分解矩陣(通常稱為 A 和 B)。在前向傳遞期間,層的輸出變為原始凍結權重乘以輸入加上低秩適配器貢獻之和。由於這些適配器矩陣的秩(r)遠小於原始維度,可訓練參數的數量降低了數個數量級——通常從數十億降至僅數百萬。

    這種方法有兩個深遠的實際好處。首先,它使微調在消費級和中階 GPU 上變得可行:一個需要 28 GB VRAM 進行全量微調的 7B 參數模型,結合 4 位元量化(QLoRA)時,用 LoRA 微調只需 6 GB。其次,適配器權重很小——通常 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 x k 的給定權重矩陣 W,LoRA 引入兩個矩陣:維度為 d x r 的 A 和維度為 r x 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 會自動為秩、alpha 和目標模組設定 LoRA(或對較大模型使用 QLoRA)的合理預設值——同時仍為想要完全控制的進階使用者開放這些參數。產生的適配器權重高效地儲存在 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.