大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

華為雲開發者聯盟發表於2023-04-10
摘要:本文介紹大模型低參微調套件——MindSpore PET。

本文分享自華為雲社群《大模型高效開發的秘密武器——大模型低參微調套件MindSpore PET篇》,作者:yd_280874276 。

人工智慧進入“大模型時代”。大模型具備更強泛化能力,在各垂直領域落地時,只需要進行引數微調,就可以適配多個場景。因此,發展大模型已成為產學研各界共識。

在大模型開發方面,昇騰推出了大模型開發使能平臺,基於昇思MindSpore構建了支撐大模型開發的全流程大模型使能套件,包括TransFormers大模型套件MindSpore TransFormers、以文生圖大模型套件MindSpore Diffusion、人類反饋強化學習套件MindSpore RLHF、大模型低參微調套件MindSpore PET,支撐大模型從預訓練、微調、壓縮、推理及服務化部署。

本期,我們將開啟“大模型高效開發的秘密武器”系列之首篇,為大家介紹大模型低參微調套件——MindSpore PET。

一、MindSpore PET介紹

MindSpore PET(MindSpore Parameter-Efficient Tuning)是基於昇思MindSpore AI融合框架開發的大模型低參微調套件。當前該套件提供6種演算法,包含5種經典的低參微調演算法LoRA、Prefix-Tuning、Adapter、LowRankAdapter、BitFit,以及1種用於下游任務精度提升的微調演算法R_Drop。低參微調演算法只需微調極少量的引數,即可在保持全參微調精度的情況下,大大節約計算和儲存記憶體,減少微調訓練的時間;精度提升的微調演算法在幾乎不增加計算記憶體及時間情況下,增加模型隨機性,防止模型過擬合從而提高模型的正確率。

套件為所有演算法提供了API呼叫介面及使用案例,實現開箱即用,併為低參微調演算法提供了只儲存極少的可學習引數的介面,使得生成的ckpt檔案非常小。

開源倉地址:https://github.com/mindspore-lab/MindPet

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

二、MindSpore PET - LoRA

2.1 演算法原理

LoRA: Low-Rank Adaptation of Large Language Models,是微軟提出的一種針對大語言模型的低參微調演算法。LoRA假設在適配下游任務時,大模型的全連線層存在一個低內在秩(low intrinsic rank),即包含大量冗餘資訊。因此提出將可訓練的秩分解矩陣注入Transformer架構的全連線層,並凍結原始預訓練模型的權重,從而可大大減少參與訓練的引數量。

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

2.2 應用效果——以悟空畫畫為例

悟空畫畫模型是基於擴散模型的中文文生圖大模型。雖然有強大的能力,但模型網路規模巨大,約9億引數量,適配下游任務時訓練時間長,計算和儲存記憶體開銷大。

經分析,悟空畫畫中使用CLIP模型將人類語言轉換成機器能理解的數學向量,並透過 U-Net 模型預測噪聲。這兩種模型的Attention結構都包含全連線層,適配下游任務時可能含有大量冗餘資訊。

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

因此,我們分別在 U-Net的交叉注意力層q、k、v、output四個模組上,注入了LoRA模組,發現效果異常好。

如下圖所示,適配LoRA後即使僅訓練0.07%引數,也可以生成高質量的影像!

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

同時,相比全參微調,應用LoRA演算法,訓練效能也得到大幅提升:

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET
  1. 原本端到端全參微調需17小時,適配後僅需9小時,節約近50%時間;
  2. 計算記憶體節約40%,可繼續增大一倍batch_size,速度更快;
  3. 最終儲存的ckpt大小才3.06MB,不再需要用4個GB儲存所有引數。

這說明當有n個下游任務時,僅需儲存n x 3.06MB,避免了n x 4GB的“龐然大物”。而且,我們還做了令人振奮的實驗。如果使用者訓練了多種風格的模型,只需0.5s就可以切換風格,真正的無縫切換“畢加索”和“新海誠”!

原因在於MindSpore框架的靜態圖特性,只需要在第一次正向訓練時編圖,後續即使載入其它LoRA-ckpt更新引數,也無需重新編圖。

2.3 使用方式

為大模型減輕負擔的LoRA演算法本身用起來也很輕鬆,端到端僅需簡單五步就可以完成適配。

第一步:

將模型CrossAttention結構中qkvo的Dense層替換成LoRADense:

from tk.delta import LoRADense
# original Dense Layer
# self.to_q = nn.Dense(query_dim, inner_dim, has_bias=False).to_float(dtype)


# replace Dense Layer with LoRADense
self.to_q = LoRADense(query_dim, inner_dim, has_bias=False, lora_rank=4, lora_alpha=4).to_float(dtype)

第二步:

在訓練指令碼中呼叫凍結方法,僅訓練新增的lora模組:

from tk.graph import freeze_delta
# freeze all cells except LoRA and head
freeze_delta(LatentDiffusionWithLoss, 'lora’)

第三步:

在訓練指令碼中將儲存ckpt的ModelCheckpoint替換為TrainableParamsCheckPoint,僅儲存需要更新的引數:

from tk.graph import TrainableParamsCheckPoint
# original callback
# ckpt_callback = ModelCheckpoint(...)
# replace ModelCheckpoint with TrainableParamsCheckPoint
ckpt_callback = TrainableParamsCheckPoint(...)

第四步:

根據訓練目標調整學習率、batch_size等引數:

epochs: 15 
start_learning_rate: 1e-4 
end_learning_rate: 1e-6 
train_batch_size: 3 
warmup_steps: 0
lora_rank: 4
lora_alpha: 4

第五步:

訓練完成後,在評估指令碼中分別載入預訓練ckpt和微調後生成的ckpt:

# 載入預訓練ckpt
pre_trained_pramas = load_checkpoint(pre_trained_ckpt_path)
load_param_into_net(net, pre_trained_pramas)
# 載入微調後生成的ckpt
trainable_pramas = load_checkpoint(trainable_ckpt_path)
load_param_into_net(net, trainable_pramas)
# 開始評估
model.eval()

我們已經開源所有程式碼,並給出了詳細的介面和用例介紹:
https://github.com/mindspore-lab/MindPet/blob/master/doc/TK_DeltaAlgorithm_README.md

需要注意的是相比全參微調,適配LoRA後一般要設定更大的學習率。如適配悟空畫畫時,我們就將學習率從1e-5增大到1e-4。

三、MindSpore PET - Prefix-Tuning

Prefix-Tuning: Optimizing Continuous Prompts for Generation,也是一種針對大語言模型的低參微調演算法。研究人員提出,使用連續的向量而不是離散的詞彙來構建字首模板,即在輸入前加入連續的token embedding,可以增加query和key的相關性。因此,Prefix-Tuning透過在每個multi-head attention的 key 矩陣和 value 矩陣前注入可訓練的prefix向量k,v,並凍結原始網路引數,來大幅提升生成類任務的效能。

Prefix-Tuning在GPT-2和盤古Alpha大模型上都有很好的效果。與全參微調相比,在保持原有精度的前提下,使用Prefix-Tuning訓練盤古Alpha僅需5.5%的引數量,節約了65%以上的計算記憶體,並將一個迭代的耗時縮短到一半。

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

四、MindSpore PET - Rdrop

R-Drop: Regularized Dropout for Neural Networks,是一種用於提升精度的微調演算法,主要透過簡單的“兩次Dropout”來構造正樣本進行對比學習,增加模型隨機性。具體是在模型載入完一個batch的資料集之後,複製一份該資料,並同時輸入到模型中,然後分別計算損失函式,並將結果相加得到最終的loss值。儘管邏輯非常簡單,卻能很好的防止模型過擬合,進一步提高模型的正確率。經在Bert上多個下游任務上驗證,幾乎保持同樣的記憶體和時間開銷,就能提升2.6個點的精度。

大模型高效開發的秘密武器:大模型低參微調套件MindSpore PET

大模型開發到部署是一個高門檻、複雜的過程,大模型使能套件將幫助開發者,讓大模型更易開發、易適配、易部署。

想了解更多關於TransFormers大模型套件MindSpore TransFormers、以文生圖大模型套件MindSpore Diffusion、人類反饋強化學習套件MindSpore RLHF的相關資訊,請關注昇思MindSpore公眾號,我們將持續為大家帶來人工智慧領域技術乾貨和活動訊息。

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章