LoRA 適配器有多大:如何按裝置選擇秩
在 8B 模型上從 r=4 到 r=128 各檔適配器分別佔多少 MB,訓練前就能估算體積的公式,以及不同部署裝置各自適合的秩。
LoRA 適配器正在成為為特定領域客製化 AI 模型的標準方式——而且越來越多地成為AI 硬體的標準部署介面。但並非所有 LoRA 適配器都相同。你為擁有 80 GB VRAM 的雲端 GPU 訓練的適配器,不應該是你部署到只有 4 GB AI 預算的手機的適配器。
本指南涵蓋如何針對邊緣硬體限制優化 LoRA 適配器架構:秩、目標模組和訓練決策如何影響適配器大小、推理速度和輸出品質。
LoRA 適配器解剖
LoRA 適配器透過向基礎模型的特定層添加兩個小矩陣(A 和 B)來運作。與其直接修改原始權重矩陣 W,LoRA 計算:
W' = W + (B × A)
其中:
- W 是凍結的基礎模型權重(保留在基礎模型中,不在你的適配器中)
- A 是形狀為(原始維度 × 秩)的矩陣
- B 是形 狀為(秩 × 原始維度)的矩陣
- 秩(r)控制適配器可以編碼多少資訊
適配器檔案只包含每個目標層的 A 和 B 矩陣。基礎模型保持凍結。
三個槓桿控制適配器大小和品質:
- 秩(r): 適配器有多少個維度。較高的秩 = 較大的適配器 = 更有表達力。
- 目標模組: 模型的哪些層獲得適配器矩陣。更多層 = 較大的適配器 = 更廣泛的適應。
- Alpha(α): 控制適配器對基礎模型影響程度的縮放因子。通常設置為秩的 2 倍。
秩:主要的大小-品質槓桿
秩是邊緣優化最重要的單一參數。
| 秩 | 適配器大小(8B 模型,所有線性層) | 品質 | 最適合 |
|---|---|---|---|
| r=4 | 約 15-25 MB | 尚可 | 極端邊緣,簡單任務 |
| r=8 | 約 30-50 MB | 良好 | 行動裝置、IoT、專用晶片 |
| r=16 | 約 60-100 MB | 非常好 | 筆記型電腦、消費者 GPU |
| r=32 | 約 120-200 MB | 優秀 | 桌機、邊緣伺服器 |
| r=64 | 約 250-400 MB | 接近完整微調 | 雲端 GPU,無大小限制 |
| r=128 以上 | 約 500 MB 以上 | 邊際回報遞減 | 研究,很少需要 |
實際洞察: 對於大多數特定領域任務(分類、擷取、Q&A、結構化輸出),r=16 能捕捉到微調效益的絕大多數。從 r=16 增加到 r=64 通常只帶來不到 2% 的準確率提升,但適配器大小增加四倍。
對於邊緣部署,從 r=8 或 r=16 開始。 測試品質。只有在品質不足時才增加秩。
邊際回報是真實的
研究一致表明,LoRA 的每個參數效益隨著秩的增加而下降。適配器的前 8 個維度捕捉最重要的適應。第 9-16 個維度捕捉精細調整。第 17-64 個維度捕捉逐漸更微妙的模式。
對於「將客戶支援票分類到 10 個類別」這樣的任務,r=8 通常就足夠了。對於「以特定律師事務所的風格產生法律合約條款」這樣的任務,可能需要 r=32 來捕捉風格細節。
目標模組 :廣度-深度取捨
除了秩,你還選擇哪些模型層接收適配器矩陣。兩種常見方法:
僅注意力(預設)
將 LoRA 應用於注意力機制中的查詢(q_proj)、鍵(k_proj)、值(v_proj)和輸出(o_proj)投影矩陣。
適配器大小: 較小(注意力層是總參數的一小部分) 品質: 對大多數任務效果良好,特別是涉及注意力模式變化的任務(模型「專注」的內容) 最適合邊緣: 這是記憶體受限部署的首選
所有線性層
將 LoRA 應用於注意力投影和前饋網路層(gate_proj、up_proj、down_proj)。
適配器大小: 比僅注意力大約 3 倍 品質: 對需要深度知識適應(術語、領域事實、輸出格式)的任務更好 最適合: 優先考慮品質而非大小的生產部署
混合方法
對於邊緣優化,一個明智的中間地帶:
- 在注意力層以 r=16 應用 LoRA(小型,捕捉注意力模式)
- 在前饋層以 r=8 應用 LoRA(捕捉知識,以較低秩)
這在不需要高秩處處的情況下,給你廣泛的適應。Ertas 讓你在設置微調任務時視覺化配置目標模組。
適配器大小估算
在訓練之前,估算你的適配器大小以確認它符合你的邊緣目標:
公式:
大小 ≈ 2 × 秩 × 層維度 × 目標層數量 × 每個參數位元組數
對於典型的 8B 模型(4096 維),LoRA 作用於注意力(每個 transformer 塊 4 層,共 32 塊):
- r=8:約 2 × 8 × 4096 × 128 × 2 位元組 ≈ 16 MB
- r=16:約 2 × 16 × 4096 × 128 × 2 位元組 ≈ 32 MB
- r=32:約 2 × 32 × 4096 × 128 × 2 位元組 ≈ 64 MB
上面這些是僅注意力的數字,而且略為偏高,因為這個速算把 key 與 value 投影都當成全寬處理。在像 Llama 3.1 8B 這樣的 grouped-query 模型上,key 與 value 投影到 1024 而非 4096,因此精確的僅注意力數字更接近 14 MB、27 MB 與 55 MB。改成鎖定所有線性層會讓這個數字大約乘以 3,因為 feed-forward 矩陣遠比注意力矩陣寬,這也正是本文開頭那張表的由來。
這些是很小的數字。即使是所有層上的 r=32 也能舒適地適應任何部署目標,限制更多是推論速度而非儲存。
秩在推論時的代價
秩會不會影響推論速度,取決於你在匯出時做的一個決定。
合併後的適配器是免費的。 把適配器折回基礎權重,也就是 W' = W + BA,會產生一個形狀與層數都與原始模型完全相同的模型。秩在合併後的權重裡不留痕跡,所以 r=64 的合併跑起來和 r=4 的合併完全一樣快,兩者也都和未微調的基礎模型一樣快。GGUF 匯出做的正是這件事,這也是為什麼對多數邊緣部署而言,上面那張大小表是儲存問題而不是延遲問題。
未合併的適配器則按 token 計費。 讓 A 與 B 保持分離,代表每個目標模組在每次前向傳遞時都要多做兩次小矩陣乘法。多出來的算術量相對於基礎模型並不大,真正的代價是記憶體流量:解碼一個 token 受頻寬限制,而適配器權重是額外的讀取,會和基礎模型爭搶同一份頻寬。上面關於 r=32 的註記指的就是這個代價。
有兩個後果值得先規劃:
- 目標模組的數量比秩更重要。 秩加倍會讓每次額外的 matmul 大小加倍;從只做注意力層改成所有線性層,則會讓這類運算的數量大約增為三倍,而且加進來的是區塊中最寬的矩陣。如果你要保持適配器未合併且延遲吃緊,先砍目標模組,再考慮砍秩。
- 除非需要動態切換,否則就合併。 保持未合併的理由是執行期特化:記憶體裡放一個基礎模型,依請求或依租戶切換多個適配器。這是真實可行的架構,也正是下面專用矽晶片與多租戶案例的基礎。如果你一個二進位檔只出貨一種特化,就把它合併,然後完全不必再考慮秩。
邊緣硬體限制
不同的邊緣目標有不同的瓶頸:
專用晶片(Taalas HC1)
限制: 用於適配器權重的晶片上 SRAM 建議: r=8 到 r=16,僅注意力。基礎模型是硬體化的;適配器權重載入到快速 SRAM。保持適配器小型,以便在不同專業化之間快速切換。