iT邦幫忙

2024 iThome 鐵人賽

DAY 8
1
生成式 AI

LLM與生成式AI筆記系列 第 8

Day 08: LLM 大致流程:從訓練資料收集, 預訓練模型選擇,微調,對齊,到壓縮和評估

  • 分享至 

  • xImage
  •  

其實大致流程應該是:
1. 確定需求
2. 預訓練模型選擇
3. 構建或選擇資料集
4. 微調,對齊
5. 壓縮
6. 評估

極簡流程大概就是:
1. huggingface 找資料集
2. 用taide,breeze,twllm 或白龍等繁中模型微調
3. 壓縮(這個是可選項) 以及評估

只是我因為想把訓練方式根據資料量的差異由大排到小,

所以我就把 ( 預訓練與預訓練模型選擇 ) 放到第二個講。

另外,內容有誤的地方請立刻通知我!!

1. 構建或選擇資料集

雖然從維基百科和其他網站找到原始資料很容易,

但在許多環境中收集成對的問答、範例和答案卻很困難。

與傳統的機器學習一樣,資料集的品質直接影響模型的成效,因此可說是微調過程中最重要的環節。

要用到的資料集又被稱為指令資料集(Instruction Dataset),可以簡單理解為問答的資料集。

可參考的整體流程:

  1. 使用現有的資料集:資料集可以在Kaggle、Huggingface、GitHub和GitLab上尋找。

    比較有名的包括TMMLU+ Dataset。此外,Huggingface上還有一些繁體中文訓練集可供使用。

    • 如果沒有你需要的資料集,可以將英文或簡中翻譯成繁體中文,參考這個方法
  2. 使用工具收集資料並製作成資料集

  3. 使用類 Alpaca的方法產生資料集:使用OpenAI API(GPT)從頭開始產生合成資料。可以指定種子和系統提示來建立多樣化的資料集。

  4. 進階技巧:了解如何使用Evol-Instruct改進現有資料集,如何產生和Orcaphi-1論文中類似的高品質合成資料。

  5. 資料過濾:傳統技巧包括使用正規表示式、刪除近似重複項、關注具有大量標記的答案等。

  6. 提示詞模板:目前還沒有真正的標準方法來格式化說明範本和答案,因此了解不同的聊天範本很重要,如ChatMLAlpaca等。

    • Chat Template by Matthew Carrigan: 關於提示模板的Hugging Face頁面。

2. 預訓練以及預訓練模型選擇

預訓練模型選擇

目前我查詢並經過粗略的使用後覺得應該可使用的繁體中文大模型如下:

  1. 國研院-Llama3-TAIDE
  2. MediaTek Research -Breeze
  3. 繁體中文專家模型開源專案TAiwan Mixture of Experts」(Project TAME)
    yentinglin's Collections
  4. 群創光電-白龍(這個我不確定)

國外可用於微調的開放大模型(可在其他家雲端或本地運作)基本是 LLAMA, GEMMA, BLOOM, Mistral。

只能在遠端微調的大概就很多了(Gemini , GPT系列 等等)。

建議要練習的話先從LLAMA 模型開始就可以了,之後再根據情況挑選符合自己需求的就可。

繁體中文的微調可先試試前面三個。

預訓練

快速入門:Pretraining LLMs-Deeplearning.ai 短課程

預訓練是一個非常漫長且成本高昂的過程,這就是為什麼這不是一般人在工作中的重點。

但是對預訓練期間發生的情況有一定程度的了解是很好的。

簡單來說,了解可以,類似玩具級的 GPT2 預訓練在 vast.ai 租個 4 GPU 的機器或在colab用a100(不過這個時間一定會超過24小時,需要寫checkpoint存儲模型跟腳本定時重新 load 一遍) 應該是可以實現的。

但是目前商業等級的實現沒四千萬別做,目前已知花最少錢訓練的是10萬美元,另外,我從新聞得知通常的訓練成本是120萬美元左右

不過我想隨著時間的推進,之後應該會有更加高效以及更快速的方法出現。

📚 參考資料:

  • BLOOM by BigScience: 描述如何建立 BLOOM 模型的 Notion 頁面,其中包含大量有關工程部分和遇到問題的有用資訊。
  • OPT-175 Logbook by Meta: 研究日誌顯示出了什麼錯的以及什麼是正確的。如果您計劃預先訓練非常大的語言模型(在本例中為 175B 參數),則非常有用。

3. 監督微調 (Supervised Fine-Tuning)

預訓練模型僅針對下一個標記(next-token)預測任務進行訓練,這就是為什麼它們不是有用的助手。

SFT 允許您調整它們以回應指令。此外,它允許您根據任何資料(私人資料、GPT-4 無法看到的資料等)微調您的模型並使用它,而無需支付 OpenAI 等 API 的費用。

Decoder Only ,Encoder Only 跟 原始 Transformer 在進行訓練時的差異:

  • Decoder Only ,Encoder Only 在訓練或微調時,問與答通常都是放在同一個地方(Decoder 或 Encoder),並在問與答使用 EOS,其他終止符號或模板區分問與答。
  • 只是 Decoder only 的視為生成任務,而Encoder Only的則視為填空,原始 Transformer則是依照原本設定的方式進行訓練。
  • 簡介跟教學:
  • 全微調: 全微調是指訓練模型中的所有參數 ( 就是模型訓練,只是資料量不多,並且資料通常是特定任務或子領域上的 )。這不是一種有效的技術,但它會產生稍微好一點的結果.
  • LoRA: 一種基於低階適配器(low-rank adapters)的高效參數微調技術(PEFT)。我們不訓練所有參數,而是只訓練這些適配器(adapters)。
  • QLoRA: 另一個基於 LoRA 的 PEFT,它還將模型的權重量化為 4 bits,並引入分頁優化器來管理記憶體峰值。將其與Unsloth結合使用,可以在免費的 Colab 筆記本上運行。
  • Axolotl: 一種用戶友好且功能強大的微調工具,用於許多最先進的開源模型。
  • DeepSpeed: 針對多 GPU 和多節點設定的 LLM 的高效預訓練和微調(在 Axolotl 中實現)。

📚 參考資料:


4. 偏好對齊

經過監督微調後,RLHF 是用來使 LLM 的答案與人類期望保持一致的一個步驟。這個想法是從人類(或人工)回饋中學習偏好,這可用於減少偏見、審查模型或使它們以更有用的方式行事。它比 SFT 更複雜,並且通常被視為可選項之一。

📚 參考資料:


6. 評估 Evaluation

評估大型語言模型(LLMs)是流程中一個被低估的部分,因為評估這一個過程耗時且相對可靠性較低。你的下游任務應該指明你想要評估的內容,但記得古德哈特定律(Goodhart's law)提到的:“當一個衡量指標變成了目標,它就不再是一個好的衡量指標。”

  • 簡介與入門:

  • 傳統指標 Traditional metrics: 像困惑度(perplexity)和BLEU分數這樣的指標不再像以前那樣受歡迎,因為在大多數情況下它們是有缺陷的。但了解它們以及它們適用的情境仍然很重要。

  • 通用基準 General benchmarks: 基於語言模型評估工具箱 Language Model Evaluation Harness,Open LLM排行榜 Open LLM Leaderboard 是用於通用大型語言模型(如ChatGPT)的主要基準。還有其他受歡迎的基準,如BigBench, MT-Bench等。

  • 任務特定基準 Task-specific benchmarks: 如摘要、翻譯和問答等任務有專門的基準、指標甚至子領域(醫療、金融等),例如用於生物醫學問答 PubMedQA

  • 人類評估 Human evaluation: 最可靠的評估是用戶的接受度或由人類所做的比較。如果你想知道一個模型表現得如何,最簡單但最確定的方式就是自己使用它。

📚 參考文獻:


7. 壓縮

量化或壓縮是將模型的權重(和啟動值)轉換成更低精度表示的過程。例如,原本使用16位元儲存的權重可以轉換成4位元表示。這種技術愈來愈重要,用來減少與大型語言模型(LLMs)相關的計算與記憶體成本。

📚 參考文獻:


上一篇
Day07: 運行 LLMs 的指南
下一篇
Day 09: LLM 應用學習路線
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言