其實大致流程應該是:
1. 確定需求
2. 預訓練模型選擇
3. 構建或選擇資料集
4. 微調,對齊
5. 壓縮
6. 評估
極簡流程大概就是:
1. huggingface 找資料集
2. 用taide,breeze,twllm 或白龍等繁中模型微調
3. 壓縮(這個是可選項) 以及評估
只是我因為想把訓練方式根據資料量的差異由大排到小,
所以我就把 ( 預訓練與預訓練模型選擇 ) 放到第二個講。
另外,內容有誤的地方請立刻通知我!!
雖然從維基百科和其他網站找到原始資料很容易,
但在許多環境中收集成對的問答、範例和答案卻很困難。
與傳統的機器學習一樣,資料集的品質直接影響模型的成效,因此可說是微調過程中最重要的環節。
要用到的資料集又被稱為指令資料集(Instruction Dataset),可以簡單理解為問答的資料集。
可參考的整體流程:
Preparing a Dataset for Instruction tuning by Thomas Capelle:
GPT 3.5 for news classification by Kshitiz Sahay:
使用現有的資料集:資料集可以在Kaggle、Huggingface、GitHub和GitLab上尋找。
比較有名的包括TMMLU+ Dataset。此外,Huggingface上還有一些繁體中文訓練集可供使用。
使用工具收集資料並製作成資料集:
使用類 Alpaca的方法產生資料集:使用OpenAI API(GPT)從頭開始產生合成資料。可以指定種子和系統提示來建立多樣化的資料集。
進階技巧:了解如何使用Evol-Instruct改進現有資料集,如何產生和Orca及phi-1論文中類似的高品質合成資料。
資料過濾:傳統技巧包括使用正規表示式、刪除近似重複項、關注具有大量標記的答案等。
提示詞模板:目前還沒有真正的標準方法來格式化說明範本和答案,因此了解不同的聊天範本很重要,如ChatML和Alpaca等。
目前我查詢並經過粗略的使用後覺得應該可使用的繁體中文大模型如下:
國外可用於微調的開放大模型(可在其他家雲端或本地運作)基本是 LLAMA, GEMMA, BLOOM, Mistral。
只能在遠端微調的大概就很多了(Gemini , GPT系列 等等)。
建議要練習的話先從LLAMA 模型開始就可以了,之後再根據情況挑選符合自己需求的就可。
繁體中文的微調可先試試前面三個。
快速入門:Pretraining LLMs-Deeplearning.ai 短課程
預訓練是一個非常漫長且成本高昂的過程,這就是為什麼這不是一般人在工作中的重點。
但是對預訓練期間發生的情況有一定程度的了解是很好的。
簡單來說,了解可以,類似玩具級的 GPT2 預訓練在 vast.ai 租個 4 GPU 的機器或在colab用a100(不過這個時間一定會超過24小時,需要寫checkpoint存儲模型跟腳本定時重新 load 一遍) 應該是可以實現的。
但是目前商業等級的實現沒四千萬別做,目前已知花最少錢訓練的是10萬美元,另外,我從新聞得知通常的訓練成本是120萬美元左右。
不過我想隨著時間的推進,之後應該會有更加高效以及更快速的方法出現。
目前號稱完全開源的預訓練模型:
資料處理流程: 預訓練需要龐大的資料集 (例如: Llama 2 使用 2 兆個tokens進行訓練) ,需要將這些資料集過濾、標記化並與預先定義的詞彙進行整理。
因果語言建模(Causal language modeling): 了解因果語言建模和掩碼語言建模(causal and masked language modeling)之間的區別,以及本例中使用的損失函數。更多高效率的預訓練知識可前往 Megatron-LM 或gpt-neox了解。
縮放的規律: 縮放的規律 根據模型大小、資料集大小和用於訓練的計算量描述預期的模型性能。
高效能運算: 這有點超出了本文的範圍,但如果您打算從頭開始創建自己的LLMs(大語言模型)(硬體、分散式工作負載等),那麼更多有關 HPC 的知識是對你而言是必要的。
📚 參考資料:
預訓練模型僅針對下一個標記(next-token)預測任務進行訓練,這就是為什麼它們不是有用的助手。
SFT 允許您調整它們以回應指令。此外,它允許您根據任何資料(私人資料、GPT-4 無法看到的資料等)微調您的模型並使用它,而無需支付 OpenAI 等 API 的費用。
Decoder Only ,Encoder Only 跟 原始 Transformer 在進行訓練時的差異:
📚 參考資料:
經過監督微調後,RLHF 是用來使 LLM 的答案與人類期望保持一致的一個步驟。這個想法是從人類(或人工)回饋中學習偏好,這可用於減少偏見、審查模型或使它們以更有用的方式行事。它比 SFT 更複雜,並且通常被視為可選項之一。
簡介與入門:
偏好資料集: 這些資料集通常包含具有某種排名的多個答案,這使得它們比指令資料集更難產生.
近端策略最佳化: 此演算法利用獎勵模型來預測給定文字是否被人類排名較高。然後使用該預測來最佳化 SFT 模型,並根據 KL 散度進行獎懲。
直接偏好優化: DPO 透過將其重新定義為分類問題來簡化流程。它使用參考模型而不是獎勵模型(無需訓練),並且只需要一個超參數,使其更加穩定和高效。
📚 參考資料:
評估大型語言模型(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: 最可靠的評估是用戶的接受度或由人類所做的比較。如果你想知道一個模型表現得如何,最簡單但最確定的方式就是自己使用它。
📚 參考文獻:
量化或壓縮是將模型的權重(和啟動值)轉換成更低精度表示的過程。例如,原本使用16位元儲存的權重可以轉換成4位元表示。這種技術愈來愈重要,用來減少與大型語言模型(LLMs)相關的計算與記憶體成本。
簡介:
基礎技術: 瞭解不同的精確度層級(FP32、FP16、INT8等)以及如何使用absmax與零點技術(zero-point techniques)進行簡單的量化。
GGUF和llama.cpp: 最初設計用於在CPU上運行,llama.cpp 和GGUF格式已成為在消費級硬體上運行LLMs的最受歡迎的工具。
GPTQ和EXL2: GPTQ ,特別是 EXL2 ,提供了較快的速度,但只能在GPU上運行。模型量化也需要很長時間。
AWQ: 這種新格式比GPTQ更準確(困惑度更低),但使用的顯存更多,速度也不一定更快。
📚 參考文獻: