iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
生成式 AI

T 大使 AI 之旅系列 第 22

【Day 22】什麼是模型微調,能吃嗎?

  • 分享至 

  • xImage
  •  

前情提要

昨天我們統整了截至目前的一些工具和技術,也實作了一個 Memory 搭配 RAG 功能的聊天機器人。算是一個小小目標的達成,那接下來就要往更進階的部分前進。
https://ithelp.ithome.com.tw/upload/images/20240826/20168336tr8iXlwBTl.png

模型微調 Model Fine Tune

當我們發現 AI 對我們的問題沒辦法正確回答時,我們前面所想到的方式是透過檢索,讓檢索的內容成為 AI 的參考資料,使其回覆的內容達到我們所想要的,這個就是 RAG。那除了 RAG 之外,還有一個方式稱為模型微調,簡單來說我們原本的資料是存進資料庫,現在把這些資料丟給預訓練的模型訓練,讓模型針對特定領域進行學習,這種讓語言模型在既有知識上進行額外訓練的過程就稱為模型微調。

微調資料集

要進行模型微調就要準備給模型訓練的資料,而資料大多是以 json 或 jsonl 的形式呈現。那麼檔案內的架構分為很多種,其中一種最被廣泛使用的是叫作 alpaca dataset,那去 HuggingFace 可以找到很多又這個數據集去擴充或調整的資料集。那我今天實作也只會用到這個資料集的架構,對其他資料集架構有興趣的可以去 HuggingFace 上查詢或看 Axolotl 他們整理的各種資料架構。

LoRA 與 QLoRA

這兩個在微調模型中常常出現的專有名詞是什麼呢,就讓我來好好解釋一下吧!

LoRA(Low-Rank Adaptation)

微調一個大模型通常需要非常多的計算資源,因為模型中有數百萬到數十億個參數,一般人是沒辦法完成這件事的。那 LoRA 可以在不需要大規模調整模型所有參數的情況下,對模型進行微調。具體來說,LoRA 只更新模型中的一部分參數,這部分參數被設計為低秩矩陣(low-rank matrix),從而顯著減少需要更新的參數數量,達到節省資源的目的。

舉個例子

想像你在家裡裝修一個房間。通常,你可能會考慮重新粉刷牆壁、更換地板、重新布置家具等等,但這樣做既費時又費力。如果你只是想改變房間的風格,你可以選擇只更換窗簾和地毯這兩樣東西(就像 LoRA 只調整模型的一部分參數)。這樣,你仍然能夠達到給房間換個新面貌的效果,卻不需要進行大規模的裝修。

QLoRA(Quantized Low-Rank Adaptation)

QLoRA 是 LoRA 的優化版本,它結合了量化技術,使得微調過程更加高效。量化技術將模型中的浮點數據(通常是 32-bit 或 16-bit 浮點數)轉換為更小的數據類型(如 4-bit 或 8-bit),這樣可以減少記憶體的使用並加速計算。QLoRA 在進行 LoRA 微調的同時,還對模型進行了量化,使得整個微調過程更加節省資源。

舉個例子

延續前面的裝修例子,假設你現在不僅想要節省時間和精力,還希望節省金錢。你可能會選擇一些經濟實惠但外觀相似的材料來更換窗簾和地毯,比如用便宜但耐用的布料代替昂貴的絲綢,或者用仿木地板代替實木地板(這就像 QLoRA 中的量化技術)。這樣,你不僅達到了改變房間風格的目的,還在成本和資源使用上做了進一步的優化。

選擇適合你的開源微調框架

就我所知,目前有三個比較熱門的且使用較為廣泛的幾個開源框架,這三個框架分別是 AxolotlUnslothLlamaFactory。那我自己是最常使用 Unsloth,下面來進行一些比較就會知道為何我選擇 Unsloth。

Axolotl -> GitHub

  • 可選模型:HuggingFace 上的多數開源模型皆可拿來微調,支援範圍廣泛。
  • 微調方法:支援完整微調、LoRA、QLoRA、ReLoRA 等多種微調技術,提供靈活的選擇。
  • 微調時間:隨著資料集的大小和模型的複雜度而變長,資料集越大,所需時間越久。
  • 硬體限制:支援多 GPU 訓練,並與 FSDP 和 Deepspeed 等技術集成。但在單核 CPU 或單 GPU 環境下,效能不佳,建議在多 GPU 設備上使用,以獲得顯著的效果。
  • 支援 GPU:主要適合使用具備 CUDA 的 GPU 進行運算,因為它使用 bitsandbytes 進行加速,目前在 Mac 上的支援較差。
  • 微調參數:需要將所有設定參數寫入 YAML 文件中,這對於初學者來說可能有一定的學習曲線。
  • 個人感想:整體來說,使用過程中遇到了一些套件相衝突的問題,尤其在安裝時。更換模型或資料集時也經常出現無法執行的情況。在 Colab 上的運行速度較慢,且缺乏 Mac 支援,使得這個工具對於初學者不太友好,我個人也因此不太常使用。

Unsloth -> GitHub HuggingFace

  • 可選模型:主要支援 LLaMA 3.1、Mistral、Phi 和 Gemma 等模型,範圍較為有限。
  • 微調方法:專注於高效能的 LoRA、QLoRA 微調,特別適合單 GPU 的環境。
  • 微調時間:因為其高效能設計,即使在較小的 GPU 上,微調時間也較短。
  • 硬體限制:主要針對單 GPU 訓練,在單 GPU 上表現出色,特別適合資源有限的環境。
  • 支援 GPU:優化了內存和計算資源使用,使得在較小或較舊的 GPU 上仍能高效運行。主要也是支援 CUDA 的 GPU 進行運算。
  • 微調參數:大部分參數可在使用過程中動態調整,無需複雜的配置文件。
  • 個人感想:對於資源有限的用戶來說,Unsloth 是一個理想的選擇。其高效的微調過程在單 GPU 上的表現非常優異,簡單易用,適合那些不具備多 GPU 硬體的使用者和初學者。

LlamaFactory -> GitHub HuggingFace

  • 可選模型:支援超過 100 種模型,包括 LLaMA、Mistral、Mixtral、Qwen 等,涵蓋範圍廣泛,是三者中支援模型最多的。
  • 微調方法:支援完整微調、LoRA 等微調技術。
  • 微調時間:根據所選模型和微調技術的不同,時間可能會有所不同,但在多 GPU 環境下運行效果佳。
  • 硬體限制:支援多 GPU 訓練,並能根據設備的能力靈活調整精度,適合高效能運算的環境。
  • 支援 GPU:在多 GPU 環境中表現優異,並支援各種先進的計算技術如 FlashAttention-2。
  • 微調參數:使用者可透過圖形介面(LlamaBoard)進行設定,無需撰寫代碼,適合那些希望減少技術細節處理的使用者。
  • 個人感想:LlamaFactory 是一個非常強大且功能豐富的框架,適合有高階需求的使用者。其支援廣泛的模型和技術,使得它在複雜的微調任務中表現出色。不過,對於初學者來說,可能需要花費一些時間來熟悉其各種功能。

為自家模型提供微調程式

大部分的語言模型不管是開源還是沒有開源的,一般都沒有提供微調的程式碼,而是需要使用別人開發好的微調框架。那麼目前我知道的是 OpenAI 和 Mistral 他們有推出自家的模型微調的程式碼,且都有很詳細的說明要如何使用,但我目前還沒有這個機會使用到他們。

OpenAI

OpenAI Fine-Tuning

Mistral

mistral-finetune

HuggingFace

在討論語言模型的微調時,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 的朋友🤣

下一篇文章:調教你的 AI 寵物:用微調讓 LLM 乖乖聽話


上一篇
【Day 21】數據檢索到動態記憶 - Memory 在 RAG 的幫助下延展 AI 的智慧
下一篇
【Day 23】調教你的 AI 寵物:用微調讓 LLM 乖乖聽話
系列文
T 大使 AI 之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言