大模型高效開發(fā)的秘密武器——大模型低參微調套件MindSpore PET篇
人工智能進入“大模型時代”。
大模型具備更強泛化能力,在各垂直領域落地時,只需要進行參數(shù)微調,就可以適配多個場景。因此,發(fā)展大模型已成為產(chǎn)學研各界共識。
在大模型開發(fā)方面,昇騰推出了大模型開發(fā)使能平臺,基于昇思MindSpore構建了支撐大模型開發(fā)的全流程大模型使能套件,包括TransFormers大模型套件MindSpore TransFormers、以文生圖大模型套件MindSpore Diffusion、人類反饋強化學習套件MindSpore RLHF、大模型低參微調套件MindSpore PET,支撐大模型從預訓練、微調、壓縮、推理及服務化部署。
本期,我們將開啟“大模型高效開發(fā)的秘密武器”系列之首篇,為大家介紹大模型低參微調套件——MindSpore PET。
MindSpore PET(MindSpore Parameter-Efficient Tuning)是基于昇思MindSpore AI融合框架開發(fā)的大模型低參微調套件。當前該套件提供6種算法,包含5種經(jīng)典的低參微調算法LoRA、Prefix-Tuning、Adapter、LowRankAdapter、BitFit,以及1種用于下游任務精度提升的微調算法R_Drop。低參微調算法只需微調極少量的參數(shù),即可在保持全參微調精度的情況下,大大節(jié)約計算和存儲內存,減少微調訓練的時間;精度提升的微調算法在幾乎不增加計算內存及時間情況下,增加模型隨機性,防止模型過擬合從而提高模型的正確率。
套件為所有算法提供了API調用接口及使用案例,實現(xiàn)開箱即用,并為低參微調算法提供了只保存極少的可學習參數(shù)的接口,使得生成的ckpt文件非常小。
開源倉地址:https://github.com/mindspore-lab/MindPet
LoRA: Low-Rank Adaptation of Large Language Models,是微軟提出的一種針對大語言模型的低參微調算法。LoRA假設在適配下游任務時,大模型的全連接層存在一個低內在秩(low intrinsic rank),即包含大量冗余信息。因此提出將可訓練的秩分解矩陣注入Transformer架構的全連接層,并凍結原始預訓練模型的權重,從而可大大減少參與訓練的參數(shù)量。
以悟空畫畫為例,悟空畫畫模型是基于擴散模型的中文文生圖大模型。雖然有強大的能力,但模型網(wǎng)絡規(guī)模巨大,約9億參數(shù)量,適配下游任務時訓練時間長,計算和存儲內存開銷大。
經(jīng)分析,悟空畫畫中使用CLIP模型將人類語言轉換成機器能理解的數(shù)學向量,并通過 U-Net 模型預測噪聲。這兩種模型的Attention結構都包含全連接層,適配下游任務時可能含有大量冗余信息。
因此,我們分別在 U-Net的交叉注意力層q、k、v、output四個模塊上,注入了LoRA模塊,發(fā)現(xiàn)效果異常好。
如下圖所示,適配LoRA后即使僅訓練0.07%參數(shù),也可以生成高質量的圖像!
同時,相比全參微調,應用LoRA算法,訓練性能也得到大幅提升:原本端到端全參微調需17小時,適配后僅需9小時,節(jié)約近50%時間; 計算內存節(jié)約40%,可繼續(xù)增大一倍batch_size,速度更快;最終保存的ckpt大小才3.06MB,不再需要用4個GB保存所有參數(shù)。
這說明當有n個下游任務時,僅需保存n x 3.06MB,避免了n x 4GB的“龐然大物”。而且,我們還做了令人振奮的實驗。如果用戶訓練了多種風格的模型,只需0.5s就可以切換風格,真正的無縫切換“畢加索”和“新海誠”!
原因在于MindSpore框架的靜態(tài)圖特性,只需要在第一次正向訓練時編圖,后續(xù)即使加載其它LoRA-ckpt更新參數(shù),也無需重新編圖。
為大模型減輕負擔的LoRA算法本身用起來也很輕松,端到端僅需簡單五步就可以完成適配。
第一步:將模型CrossAttention結構中qkvo的Dense層替換成LoRADense:
第二步:在訓練腳本中調用凍結方法,僅訓練新增的lora模塊:
第三步:在訓練腳本中將保存ckpt的ModelCheckpoint替換為TrainableParamsCheckPoint,僅保存需要更新的參數(shù):
第四步:根據(jù)訓練目標調整學習率、batch_size等參數(shù):
第五步:訓練完成后,在評估腳本中分別加載預訓練ckpt和微調后生成的ckpt:
目前已經(jīng)開源所有代碼,詳細的接口和用例介紹如下: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,也是一種針對大語言模型的低參微調算法。研究人員提出,使用連續(xù)的向量而不是離散的詞匯來構建前綴模板,即在輸入前加入連續(xù)的token embedding,可以增加query和key的相關性。因此,Prefix-Tuning通過在每個multi-head attention的 key 矩陣和 value 矩陣前注入可訓練的prefix向量k,v,并凍結原始網(wǎng)絡參數(shù),來大幅提升生成類任務的性能。
Prefix-Tuning在GPT-2和盤古Alpha大模型上都有很好的效果。與全參微調相比,在保持原有精度的前提下,使用Prefix-Tuning訓練盤古Alpha僅需5.5%的參數(shù)量,節(jié)約了65%以上的計算內存,并將一個迭代的耗時縮短到一半。
MindSpore PET - Rdrop
R-Drop: Regularized Dropout for Neural Networks,是一種用于提升精度的微調算法,主要通過簡單的“兩次Dropout”來構造正樣本進行對比學習,增加模型隨機性。具體是在模型加載完一個batch的數(shù)據(jù)集之后,復制一份該數(shù)據(jù),并同時輸入到模型中,然后分別計算損失函數(shù),并將結果相加得到最終的loss值。盡管邏輯非常簡單,卻能很好的防止模型過擬合,進一步提高模型的正確率。經(jīng)在Bert上多個下游任務上驗證,幾乎保持同樣的內存和時間開銷,就能提升2.6個點的精度。
大模型開發(fā)到部署是一個高門檻、復雜的過程,大模型使能套件將幫助開發(fā)者,讓大模型更易開發(fā)、易適配、易部署。
想了解更多關于TransFormers大模型套件MindSpore TransFormers、以文生圖大模型套件MindSpore Diffusion、人類反饋強化學習套件MindSpore RLHF的相關信息,請關注昇思MindSpore公眾號,我們將持續(xù)為大家?guī)砣斯ぶ悄茴I域技術干貨和活動消息。