天天看點

阿裡雲 PAI 大語言模型微調訓練實踐

作者:DataFunTalk

導讀 人工智能平台 PAI 是面向開發者和企業的 AI 工程化平台,提供了覆寫資料準備、模型開發、模型訓練、模型部署的全流程服務。本文将分享阿裡雲 PAI 大語言模型微調實踐。

主要内容包括以下幾大部分:

1. 大語言模型微調簡介

2. 使用 PAI-QuickStart 微調大語言模型

3. 模型微調實踐

分享嘉賓|梁權 阿裡雲 人工智能平台 PAI 技術專家

編輯整理|阿東同學

内容校對|李瑤

出品社群|DataFun

01

大語言模型微調簡介

在機器學習的發展過程中,模型的開發與應用模式一直在不斷疊代。傳統的機器學習年代,機器學習工程師在采集資料之後,需要通過特征工程處理資料,使用模型訓練。在深度學習的年代,計算資源更加豐富,模型層數增加,模型能夠支援直接從原始的資料中端到端地進行訓練,而不大量依賴于特征工程。到了預訓練模型的階段,在模型開發流程中,工程師更多得采用在基礎的預訓練模型上,使用少量資料微調的方式建構下遊應用的模型。

而到了大語言模型階段之後,以 ChatGPT,Llama 為代表的語言模型,他們能力更加強大,擁有海量的知識,能夠了解複雜的語義,有了一定的邏輯推理能力,支援通過 Prompt 工程的方式,直接應用于下遊各類不同的任務。

阿裡雲 PAI 大語言模型微調訓練實踐

1. LLM 的應用限制

在過去的一年中,大語言模型領域呈現出了極為火熱的發展勢态。然而,在實踐運用過程中,我們發現大語言模型仍然存在一系列亟待解決的應用難題。

由于語言模型的知識實際上是在預訓練階段被壓縮進模型的,是以模型本身是靜态,并不能動态更新知識。其使用的大規模資料大多是源自于網際網路上可以公開擷取的資料,缺少企業獨有的,或者是長尾的資料。其次,大語言模型本身是一種機率模型,由于長尾知識的缺失,或者在訓練過程中存在的不一緻或沖突,大語言模型會有幻覺問題。基于 Transformer 架構的語言模型,其上下文長度是固定受限的。模型參數量較大,随之帶來推理的成本和延遲也是實際産品化中不容忽視的問題。

阿裡雲 PAI 大語言模型微調訓練實踐

2. LLM 性能優化:檢索增強生成(RAG)

針對大語言模型性能的優化方案,檢索增強生成(RAG)如今已被廣泛采納為一項關鍵技術。其核心原理在于,對使用者輸入的問題,不再直接提供給模型,而是首先到知識庫中進行檢索,繼而将檢索得到的資訊拼接到使用者問題作為 prompt 一起作為語言模型輸入資訊。

ChatGPT 和 Kimi 等工具都是 RAG 的典型應用,都支援從網際網路擷取資料,來提升互動過程中的性能表現。盡管 RAG 通過對輸入上下文的優化,以提供更多資訊的方式來提升模型性能,但它并不能使一個 LLM 成為法律專家,或者讓其掌握一門全新的語言。

阿裡雲 PAI 大語言模型微調訓練實踐

3. LLM 性能優化:RAG vs Fine-Tuning

OpenAI 的一篇關于如何改進與優化大語言模型性能的文章中提出,推薦的路徑是從提示式工程到檢索增強生成(RAG),再到微調,其關鍵在于性能與成本之間的權衡。通常情況下,檢索增強生成的實施更為簡便,其效果亦相當顯著。而模型的微調訓練則需要使用者收集高品質的資料,并具備足夠的計算資源進行訓練。此外,通常還需進行多次實驗。然而,這兩者并非完全對立的關系,RAG 是通過上下文優化輸入,更類似于我們在考試時攜帶試卷和參考答案答題,而微調則更像是在考試前或複習後,将知識内化到模型中。實際應用中,這兩者是可以互相配合的,在 RAG 應用建構過程中也通常需要這兩者的配合,才能達到最佳的效果。

阿裡雲 PAI 大語言模型微調訓練實踐

4. 推理成本和性能

在推理成本與性能優化上,毫無疑問,采用較小的模型比大模型更具優勢。以 Qwen(千問) 7B 為例,大概需要 16G 左右的顯存,通過 A10 提供推理服務,在實際應用中,其成本遠低于 GPT-3 和 GPT-4 等大型模型。

另一個制約大語言模型實際應用的因素是其推理性能延遲,由于大語言模型自身的推理機制,需要經過兩個階段的推理,先是 prefill,然後是 decoding,其 prompt 複雜度以及輸出長度都決定了推理請求的延遲。

阿裡雲 PAI 大語言模型微調訓練實踐

在使用 RAG 等複雜提示工程擴充其上下文作為提示輸入時,往往會導緻模型推理的延遲,直接影響到實際使用者體驗。在建構更為複雜的 RAG 應用可能并非僅調用一次語言模型。例如,RAG 可能會依賴于使用者的輸入,使用模型識别使用者意圖,确定下遊應調用哪些函數或功能;或是通過知識庫檢索回的資訊,可能會依賴于模型進行一次重新排序,然後選擇使用排名靠前的資料作為下遊的語言模型輸入。如果全部使用大模型,服務的成本較高,帶來的延遲會對使用者體驗産生較大的影響。

阿裡雲 PAI 大語言模型微調訓練實踐

使用小模型能夠降低成本和推理延遲,在一定的場景中替代大模型。圖示是 Anyscale 的一項實驗,其中自左向右依次展示了将文本抽象為函數表示、基于使用者意圖建構 SQL 和數學推理等三個任務。需要注意的是,實驗中的任務難度是從低到高逐漸提升的。從與 GPT 4 的比較來看,小模型在簡單任務上經過微調後,其性能甚至可能超過大模型。同時模型本身的參數量是大模型能夠解決複雜任務的基礎。

那麼,何時應該對小模型進行微調替代大模型呢?業界應用的一種範式,在業務啟動初期,使用如 GPT-4 這樣的大模型進行業務驗證,并在此過程中收集資料。當業務驗證成功且可行後,使用采集到的資料對開源模型微調進行替換,後續通過資料飛輪持續優化自持的模型的表現。

5. 微調能做什麼?

總結一下微調究竟能為我們實作哪些目标。首先便是對模型進行優化,通過将知識與資訊添加到大語言模型中,提升模型在特定領域的表現,減少模型幻覺。此外,通過微調在一些領域場景中使用小模型替換,優化推理成本和推理延遲。

阿裡雲 PAI 大語言模型微調訓練實踐

02

使用 PAl-QuickStart 微調大語言模型

1. PAI 産品架構

PAI 是一款雲端的機器學習平台,屬 PaaS 産品範疇。在計算資源層面,PAI支援使用雲上通用計算資源,例如 ECS(彈性計算)與 ACK(容器服務)等,同時亦支援 PAI 靈駿計算資源。PAI 靈駿是高性能計算叢集,提供高性能 GPU,支援 RDMA 網絡及高性能檔案存儲,尤其适用于大語言模型的訓練。

阿裡雲 PAI 大語言模型微調訓練實踐

在平台産品方面,PAI 提供了标注服務 PAI-iTag、Notebook 互動式模組化 PAI-DSW、大規模分布式訓練服務 PAI-DLC,以及極緻彈性的模型推理服務 PAI-EAS。計算加速和引擎架構方面,PAI 提供了 DatasetAcc,TorchAcc,Blade 等一系列架構和産品,幫助使用者能夠在 PAI 上獲得極緻的性能。在算法方面,PAI 提供 Alink,EasyRec,EasyNLP 等一系列庫和算法,支援使用者在 PAI 開箱即用。

這些工具和産品幫助 PAI 的使用者可以在雲上能夠更加輕松、高效地完成機器學習模型的開發和應用。

2. PAI 快速開始 ModelGallery

如前所述,機器學習的模型開發應用的範式逐漸遷移到以模型為中心。越來越多的開發者傾向于基于預訓練模型開發自己的模型或直接将模型進行部署應用。為此 PAI 也提供了新的産品支援——PAI 快速開始 ModelGallery。ModelGallery 提供了大量的預訓練模型,包括大語言模型、文生圖模型、圖檔 caption、語音識别等,并支援模型一鍵微調訓練,以及一鍵部署建立推理服務。

阿裡雲 PAI 大語言模型微調訓練實踐

在大語言模型方面,ModelGallery 支援目前主流的開源大語言模型,包括 Qwen,ChatGLM,Baichuan,Gemma,Mixtral 等,并且在這些模型上都預置了相應的微調算法,以及推理服務配置。使用者可以通過控制台頁面,或是 PAI SDK 的方式調用這些模型。

阿裡雲 PAI 大語言模型微調訓練實踐

3. 模型訓練和部署

以下是 Qwen1.5-7B-Chat 模型的 SDK 調用示例,我們通過數行代碼即可調用PAI 預置的鏡像和腳本完成對模型的微調訓練和部署。通過 RegisteredModel 對象配置 model_provider=“pai“,即可獲得 PAI ModelGallery 提供的模型。模型可以通過 deploy 方法直接部署,也支援通過 get_estimator 方法擷取模型關聯的微調算法,指定 OSS,NAS,或是 MaxCompute 表資料後送出模型微調訓練任務,産出的模型将被儲存到使用者的 OSS Bucket 中。

阿裡雲 PAI 大語言模型微調訓練實踐

4. LLM 微調算法

PAI 預置的模型微調訓練算法針對雲上訓練做了一系列的算法工程工作。微調算法支援全參,LoRA,QLoRA 的微調訓練方式,支援 OSS,MaxCompute,NAS 等雲上資料源上作為訓練資料。同時模型也根據不同的訓練方法提供了相應的預設機型配置,以及優化的訓練作業超參。送出的訓練作業支援通過 TensorBoard 進行訓練作業監控和任務比對。針對支援的 GPU 卡,預設會開啟使用 FlashAttention 優化訓練性能。對于更小型的機型,在訓練大模型時,會采用 DeepSpeed 技術來優化模型整體的資源占用,以及模型的顯存使用率。

阿裡雲 PAI 大語言模型微調訓練實踐

5. 模型評測

在完成模型微調訓練後,至關重要的一步是對模型進行評測,以了解模型性能。PAI 目前也提供了針對大型語言模型的一鍵微調評測功能,借助預置算法元件,我們可以友善地對現有的預訓練模型或微調後的模型進行評測。

目前,我們提供的模型評測支援使用公開的資料集對模型進行評測,以評估其通用知識能力是否存在退化;同時也支援通過自定義資料集的評測,以評估其在特定領域的相關性,以及在實際業務場景下的表現,包括其精度如何。此外,我們還可以在頁面上将多個評估任務進行彙總,以便對比多個模型的評估結果。

阿裡雲 PAI 大語言模型微調訓練實踐

6. 模型推理部署

微調後模型的典型應用場景是将其進行部署為線上推理服務。借助于預置的推理服務鏡像,我們可以便捷地将模型部署至 PAI-EAS,進而建構一個推理服務。通過預置鏡像部署的服務支援通過 Web 應用方式直接進行互動,也支援以 OpenAI API 方式進行調用。

在推理優化領域,PAI 的推理服務支援 BladeLLM 以及開源的 vLLM 等多種方式進行優化。BladeLLM 是 PAI 自主研發的推理優化引擎,它支援更為豐富的量化政策,在模型的首個 token 傳回上表現顯著優于 vLLM,而在推理吞吐性能方面則略勝于 vLLM。

阿裡雲 PAI 大語言模型微調訓練實踐

03

模型微調實踐

我們一直緻力于對模型進行精細調整,并在為使用者提供服務的過程中積累了豐富的實踐經驗,主要包括以下四個方面,即模型微調、模型選擇、資料準備以及模型評估。目前PAI 系統支援全參數微調、LoRA 和 QLoRA 三種方法,它們在資源占用和實際性能方面存在差異。

阿裡雲 PAI 大語言模型微調訓練實踐

1. 微調方法

首先,最為基本且常見的一種微調方法是全參數微調。在訓練過程中,全參數微調不會當機參數,也不會為參數添加新的層,因為每個參數都會直接參與模型的訓練。當使用 Adam 優化器時,使用混合精度進訓練,每個參數對應的模型權重、梯度、優化器狀态需要占用 16Bytes 的顯存空間。以 Qwen(千問) 7B 為例,每個模型的副本實際占用的顯存空間高達 112G,這至少需要兩張 80GB 顯存的 A100 才能完成對 7B 模型的全參數微調。

阿裡雲 PAI 大語言模型微調訓練實踐

可訓練參數帶來的梯度,優化器狀态會大大增加顯存的需求,LoRA 的思路是通過減少可訓練參數來降低顯存占用。其基本假設是在模型訓練過程中引入的權重變化是低秩的,可以用兩個較小的矩陣來近似表示。通過在模型的線性層添加 Adaptor,僅對 Trainable Adaptor 進行訓練,可以顯著減少可訓練參數,進而降低顯存占用。

阿裡雲 PAI 大語言模型微調訓練實踐

以 Qwen(千問) 7B 為例,如果我們在 q_proj 和 v_proj 這兩層上添加 LoRA 的 Adapter,那麼整個模型的可訓練參數将占模型總參數的約 0.3%,即約為 21 million。由于隻有這 21 million 是可訓練參數,才會産生梯度和優化器的顯存占用,是以,這些可訓練參數的顯存占用會大大降低,降至約 0.3GB。結合模型本身的權重 14GB,使用 LoRA 後,可以将顯存占用降低到約 14.3GB。

QLoRA 的思路則是在 LoRA 的基礎上優化模型權重占用。LoRA 微調訓練中,顯存占用主要由模型的權重為主。模型的權重是以 16bit 的形式存儲的,QLoRA 的思路是在顯存中采用量化的方式将模型壓縮到 4bit,在計算時再反量化為高精度參與計算。

以 Qwen 7B 為例,通過使用 QLoRA 對模型進行訓練,其實際模型的權重僅需 4GB,結合可訓練參數的顯存占用,每個模型的副本僅需 4.5GB 的顯存占用。

阿裡雲 PAI 大語言模型微調訓練實踐

下圖中的表格列出了 Qwen(千問)模型在實際運作過程中使用不同訓練方式的顯存占用分值和訓練速度之間的比較。與前文所述是一緻的,當然也存在一些偏差,主要源于的超參數、序列長度、顯存配置設定等影響。

阿裡雲 PAI 大語言模型微調訓練實踐

從原理來看,SFT 全參數微調的可調參數規模更大,能夠取得比 LoRA 和 QLoRA 更高的性能。然而,在實際操作中,我們發現通過 SFT 容易導緻模型過拟合。是以,我們更傾向于建議使用者從 LoRA、QLoRA 基于 Chat 模型開始,通過适當增加 Lora Rank 的方式擴大模型可調空間。若仍無法滿足需求,再考慮采用 SFT 全參數微調。

此外,值得注意的是,LoRA 和 QLoRA 的可訓練參數規模較小,并不适用于基礎模型的訓練過程。通常我們期望微調後的模型具備指令遵循、對話的能力,而 LoRA 和 QLoRA 由于可調參數空間較小,較難實作這一目标。

2. 模型選擇

在微調基座模型選擇上,模型的基礎性能是關鍵因素,目前的開源模型更新疊代迅速,HuggingFace,OpenCompass 等社群提供的 Leaderboard 可以作為模型基礎性能的參考。右圖是 LMSys 提供的 Chatbot Leaderboard,是一個基于人類回報打分作為評價标準的榜單,涵蓋了主流閉源模型和開源模型。在開源模型中,阿裡雲的 Qwen 系列模型在 Leaderboard 整體表現不錯,在社群中受到廣泛認可,歡迎大家進行試用。

阿裡雲 PAI 大語言模型微調訓練實踐

語言模型在訓練過程中因為使用的語料,不同領域資料配比,最終獲得模型也不是六邊形戰士,在各個領域都能夠完勝其他模型。微調模型的目标通常是針對業務場景進行定制,選擇模型時對下遊場景進行測試是非常有必要的。如果語言模型本身在下遊的領域,例如某一種語言、編碼能力,或是某一個領域知識内表現出色,這些能力最終也會展現在微調後的模型上。

選擇模型大小的權衡是模型的性能和成本。通常模型微調訓練的頻率較低,是一次性或是周期性的任務,微調後的模型會被用于部署為線上推理服務,對一定規模的産品,模型會大量部署,長期線上上服務,推理成本是高于訓練成本地。另外一點,量化對語言模型的性能影響并不顯著,int8 的量化通常被認為是免費午餐,能夠很好得提升推理性能,降低推理資源需求。因而通常推薦選擇更大的模型進行微調訓練,在推理服務部署時使用量化的政策降低資源需求,提高推理性能。

在推理資源需求上,另外一個值得考慮的點是模型架構上是否支援分組注意力(GQA,Grouped Query Attention)。目前的語言模型主要基于 Transformer Decoder 架構,支援通過 KV cache 的加速模型推理。GQA 能夠顯著降低 KV cache 占用,降低推理資源需求。同時推理的 Decode 階段是訪存密集型的任務,KV cache 的減小能夠提升單個請求的推理速度,提升推理服務的整體吞吐。

語言模型經過預訓練階段獲得的 Base 模型的能力是預測下一次 token,經過後訓練,包括指令微調,基于人類回報的強化學習,獲得的 Chat/Instruct 模型則能夠遵循指令,支援對話。在 Chat 模型和 Base 模型選擇上,與使用者資料量關系緊密。通常下遊的場景需要模型具有指令遵循的能力,而資料集較小則較難讓 Base 模型學會指令遵循的能力,因而通常推薦基于 Chat 模型進行微調。

3. 資料準備

采用預訓練模型能夠加速模型的開發疊代,但是要達到理想的效果,往往需要圍繞資料展開工作。在實際的微調過程中,至少需要 200 條高品質的資料才能對 Chat 模型進行有效的微調,同時資料量較少的情況下需要适當增加 epoch,才能讓模型學習到相應的資訊。如果是對 Base 模型進行訓練,則至少需要數千條高品質資料。

阿裡雲 PAI 大語言模型微調訓練實踐

模型微調資料需要準備問答對形式的資料,資料标注的成本不低。一種解決的方法是通過大型語言模型來生成資料。例如,使用者可以将知識庫按照知識點進行拆分,然後讓語言模型基于這些内容生成問答對,再使用這些問答對進行微調。另一種方法是使用開源的資料集。目前,ModelScope 和 HuggingFace 上提供了一系列開源的對話資料集,使用者可以直接使用。

語言模型的輸入是一個序列,當将問答對給到語言模型時,需要按一定的規則模版生成序列,這個模版通常被稱為 ChatTemplate。不同的模型使用的 ChatTemplate 并不相同,Qwen、ChatGLM 等使用 ChatML格式,而 Llama2、Mixtral 等則是另外一種格式。經過指令微調訓練後,Chat 模型能夠學會按指定模版格式進行對話和指令。是以,在對 Chat 模型進行微調時,需要注意使用它們已有的 ChatTemplate 生成語言模型輸入,否則會與已有知識産生沖突,導緻模型無法收斂或指令遵循能力的丢失。

阿裡雲 PAI 大語言模型微調訓練實踐

4. 模型評測

目前對大語言模型的評測方式主要包括使用标準資料集、裁判員模型(LLM as Judge),或是基于人類回報的競技場模式等方式。标準資料集接入簡單,不過存在評測資料洩漏,無法很好的評估複雜生成,或是領域相關任務。基于大語言模型的評估方式對裁判員模型能力要求較高,采用 GPT4 也能夠獲得接近人類水準的結果,不過裁判員模型也存在傾向于開頭部分的、較長的,或是自己生成的答案。基于人類的評估主要局限還是成本高,效率低。

PAI 提供的語言模型評測支援對公開資料集的評測,以及自定義資料集的評測,對自定義資料集的評測采用基于規則的 BLEU 和 ROUGE 系列名額計算模型和标注資料之間的差距。實踐中,對公開資料集的評測主要用于評估微調後語言模型是否存在能力退化或是知識遺忘,如果模型的目标任務比較簡單确定,例如意圖識别,或是 SQL 生成,前者也并非是必須的。目前我們也在規劃支援裁判員模型模式,進而提高能夠對一些非确定性、生成類任務的評測效果。實際上,在較為複雜的領域任務、内容生成相關的任務中,領域專家的評估結果往往最為準确。由領域專家對模型進行評估,不僅可以評估結果,還可以标記相應的資料。利用标注的資料疊代訓練模型,可以取得更好的效果。

阿裡雲 PAI 大語言模型微調訓練實踐

5. 實際案例

在此,以一家電視制造商的案例作為參考。他們希望通過引入語言模型來優化整體使用者體驗。例如,當使用者詢問“霸王别姬的導演是誰?”等問題時,他們可以調用下遊的功能子產品來進行查詢,因為其功能子產品衆多,達到上千個,且對推理延遲有一定要求,是以選擇通過微調的方式對模型進行定制。

阿裡雲 PAI 大語言模型微調訓練實踐

從最終結果來看,由于該任務相對簡單,在 Qwen1.5 7B 上的函數識别即能達到較高的效果。不過這裡仍有優化空間,因為識别過程分為兩步,一部分是函數識别,另一部分是針對函數的參數,如“霸王别姬”中的槽位(slot)識别,目前後者的精度略低,需要進一步優化。

以上就是本次分享的内容,謝謝大家。

阿裡雲 PAI 大語言模型微調訓練實踐

繼續閱讀