昨天我們統整了截至目前的一些工具和技術,也實作了一個 Memory 搭配 RAG 功能的聊天機器人。算是一個小小目標的達成,那接下來就要往更進階的部分前進。
當我們發現 AI 對我們的問題沒辦法正確回答時,我們前面所想到的方式是透過檢索,讓檢索的內容成為 AI 的參考資料,使其回覆的內容達到我們所想要的,這個就是 RAG。那除了 RAG 之外,還有一個方式稱為模型微調,簡單來說我們原本的資料是存進資料庫,現在把這些資料丟給預訓練的模型訓練,讓模型針對特定領域進行學習,這種讓語言模型在既有知識上進行額外訓練的過程就稱為模型微調。
要進行模型微調就要準備給模型訓練的資料,而資料大多是以 json 或 jsonl 的形式呈現。那麼檔案內的架構分為很多種,其中一種最被廣泛使用的是叫作 alpaca dataset,那去 HuggingFace 可以找到很多又這個數據集去擴充或調整的資料集。那我今天實作也只會用到這個資料集的架構,對其他資料集架構有興趣的可以去 HuggingFace 上查詢或看 Axolotl 他們整理的各種資料架構。
這兩個在微調模型中常常出現的專有名詞是什麼呢,就讓我來好好解釋一下吧!
微調一個大模型通常需要非常多的計算資源,因為模型中有數百萬到數十億個參數,一般人是沒辦法完成這件事的。那 LoRA 可以在不需要大規模調整模型所有參數的情況下,對模型進行微調。具體來說,LoRA 只更新模型中的一部分參數,這部分參數被設計為低秩矩陣(low-rank matrix),從而顯著減少需要更新的參數數量,達到節省資源的目的。
舉個例子
想像你在家裡裝修一個房間。通常,你可能會考慮重新粉刷牆壁、更換地板、重新布置家具等等,但這樣做既費時又費力。如果你只是想改變房間的風格,你可以選擇只更換窗簾和地毯這兩樣東西(就像 LoRA 只調整模型的一部分參數)。這樣,你仍然能夠達到給房間換個新面貌的效果,卻不需要進行大規模的裝修。
QLoRA 是 LoRA 的優化版本,它結合了量化技術,使得微調過程更加高效。量化技術將模型中的浮點數據(通常是 32-bit 或 16-bit 浮點數)轉換為更小的數據類型(如 4-bit 或 8-bit),這樣可以減少記憶體的使用並加速計算。QLoRA 在進行 LoRA 微調的同時,還對模型進行了量化,使得整個微調過程更加節省資源。
舉個例子
延續前面的裝修例子,假設你現在不僅想要節省時間和精力,還希望節省金錢。你可能會選擇一些經濟實惠但外觀相似的材料來更換窗簾和地毯,比如用便宜但耐用的布料代替昂貴的絲綢,或者用仿木地板代替實木地板(這就像 QLoRA 中的量化技術)。這樣,你不僅達到了改變房間風格的目的,還在成本和資源使用上做了進一步的優化。
就我所知,目前有三個比較熱門的且使用較為廣泛的幾個開源框架,這三個框架分別是 Axolotl
、Unsloth
、LlamaFactory
。那我自己是最常使用 Unsloth,下面來進行一些比較就會知道為何我選擇 Unsloth。
bitsandbytes
進行加速,目前在 Mac 上的支援較差。大部分的語言模型不管是開源還是沒有開源的,一般都沒有提供微調的程式碼,而是需要使用別人開發好的微調框架。那麼目前我知道的是 OpenAI 和 Mistral 他們有推出自家的模型微調的程式碼,且都有很詳細的說明要如何使用,但我目前還沒有這個機會使用到他們。
在討論語言模型的微調時,Hugging Face 平台是一個不可或缺的工具。它不僅支援大多數主流的預訓練模型,還提供了豐富的資源來針對不同的任務進行微調,比如訓練一個屬於自己的標籤分類器。Hugging Face 的生態系統非常靈活,允許用戶根據具體需求自定義模型,無論是進行文本分類、生成、翻譯還是其他自然語言處理任務。當面對大規模參數的模型時,如果希望進行高效的微調,也有與 LoRA 技術兼容的工具來進行微調,比如 peft
(Parameter-Efficient Fine-Tuning)套件。這個套件專為低資源情境下的模型微調而設計,支持用戶以最小的成本對大模型進行有效的調整。透過將 peft
與 LoRA 結合使用,用戶可以更靈活且高效地微調大模型,使其在特定任務中達到最佳性能。
最後來分享一下台智雲,台智雲也可以微調他們自家的語言模型,而且是完全 No-Code,真的非常之方便。只是缺點就是至少需要 524,288 個 tokens。而且如果要有顯著的效果,推薦是 10,000,000 tokens 以上會比較好,然後目前只有他們企業專案的客戶才可以使用這個服務。但我自己實用過的經驗,效果是真的很好很好,從 sentence-bert 和 rouge 的比較結果來看,真的是有非常顯著的效果。
今天我們深入探討了模型微調的概念,包括LoRA與QLoRA的技術原理,以及不同框架如 Axolotl、Unsloth、LlamaFactory 的特點。除了這些開源框架之外,我們還介紹了 OpenAI 和 Mistral 自家提供的微調工具,以及台智雲的 No-Code 微調服務,這些工具與服務在不同的硬體資源和需求下提供了靈活且高效的解決方案。無論是資源有限的單GPU環境,還是需要進行大規模訓練的企業級應用,都有相應的工具可以選擇。明天要來實作程式碼的部分~
今天晚上要跟大學同學玩 Fantasy Basketball,難得身邊有一群這麼愛 NBA 的朋友🤣