透過微調模型可以讓其回覆更加符合個人需求,這篇文章將教你如何微調 DeepSeek R1 Distill Llama 8B,並讓 LLM 能夠模仿你的口吻來回覆!
More...
微調前的前置準備與介紹
微調模型跟 RAG 的差別
微調模型跟 RAG 的差別在於,RAG 是透過檢索機制從外部知識庫中獲取相關資訊,並將抓取的資訊與模型回覆結合。
微調則是讓知識能夠嵌入在模型本身,所以能夠針對特定領域去優化,讓模型成為該領域的專家
所以假設你希望 LLM 能夠內建特定領域知識,並根據你當下的問題來回覆,就適合使用微調,但如果希望 LLM 能夠查詢並回應即時資訊,則適合使用 RAG
說明目標
這次微調的模型是 DeepSeek R1 Distill Llama 8B,目標是讓模型在回覆時,以我平時撰寫社群貼文、部落格文章時常用的口吻回覆。
所以我希望能夠讓模型保有原本的知識量,只不過在回覆時能夠以我習慣的用語回覆,所以如果你也想根據自己的需求來微調模型,就需要調整一下我這次提供的模板
前置準備
如果你也想試著一起微調模型,需要準備的有
- 註冊 HuggingFace 帳號,並拿到 API Key
- 微調所需的訓練資料
- Glows AI 帳號:透過註冊連結能夠免費拿到 10 Credit,剛好適合這次微調
- 這次有幫大家準備好模板,只需要調整參數即可使用
這次的訓練資料是我將之前的 Threads 社群貼文、部落格文章轉為問答,且使用 Alpaca 格式(Instruction + input + output)
之後也會分享我是如何將這整個流程自動化的,不過如果你暫時只是想玩玩,且懶得調整代碼,也可以先到 HuggingFace 上搜尋 Alpaca 就可以找到相同格式的訓練資料
但其實如果你有特定想使用的資料,也可以透過 ChatGPT 或 Claude 來幫你修改我提供的這份代碼,讓他符合你想使用的資料格式
此外這次 Glows AI 提供給我的讀者只要註冊就可獲得 10 Credits,大約可以使用 2.5 小時的 RTX 4090,對於一次微調來說剛好足夠
Glows.ai 平台介紹
這是我第一次微調模型,透過在這個平台,你可以很快的部署各種需要算力的服務,另外如果你是有在架設自己的 AI 服務,也能很彈性的擴展算力。
最喜歡的部分是相比其他雲平臺,他的介面算很簡單易用,從開 VM 到執行代碼,沒有過多繁雜的前置設定即可使用!
透過官方提供已設置好的模板與環境,你就可以更快部署架設各種服務,此外也可以將自己的應用快照儲存,就算暫停機器也可以保留原本的訓練資料與環境。
之後可以再重新啟用時保留原始文件,就不需要再從頭開始設置環境、抓取檔案。
Pricing
定價相比其他雲平臺也更便宜,此外也可以根據你的使用情境,彈性購買 Credit、根據你的 AI 服務用量自動調整算力資源!
而且現在一張 H100 售價約為 30,000 美元,如果是在 Glows.ai 上租用,一天約為 84 美元,可以租用一張 H100 約一年。
不過如果在初期就花太多錢在顯卡上顯然成本太高,對於資源有限的新創較不實際,另外當服務的算力需求上升,也無需購買額外顯卡,而是直接多租用一張顯卡會更加彈性。
訓練資料準備
這次使用的訓練資料是 Alpaca 格式,幫大家找了一個可以參考的訓練資料 HuggingFace Alpaca zh
另外我這次的訓練資料則是透過將 WordPress、Threads 貼文結合 Gemini 生成的合成資料問答集,之後再來分享模板!
開始微調訓練
文末會放上模板讓大家可以複製使用!首先先到 Glows.ai 註冊帳號,註冊之後會看到有 10 點免費 Credit,點擊 Create New,選擇 img-9rp4yp3k(滑到底就看到了),在點擊 Complete Checkout
之後等他一下,變成 Running 後,選擇 Access > Http Port > Open,打開之後會看到 JupyterLab 的介面
選擇左上角的 Upload,將模板上傳上去,上傳成功後會看到左邊有顯示上傳的代碼文件,雙擊打開之後繼續,在開始前先過一次代碼,將參數調整成你的數值再開始
首先是配置參數,在這步驟先將你的 HuggingFace 基本資訊貼上,像是 Username、API Token、Dataset Name、Model Name 設置好
此外如果你是新手則不建議更動預計微調的模型,像是 DeepSeek R1 常見的蒸餾模型有 Qwen 與 Llama,兩者的訓練資料設置有些微不同,如果有更動後續的設定也要跟著調整
參數部分則根據你的需求來設置,像是我這次的調整是希望維持原有知識下調整語氣,所以在學習率、MAX_STEPS 及其他參數設置都與此目標有關
如果你是想要微調模型,讓其具備特定領域知識,我會建議先複製個 3 筆訓練資料樣本,加上提供這份的代碼去詢問 AI,並說明清楚你的需求,讓他協助你調整設置
Ex. 我希望透過微調模型來達到 XXX,以下是我的訓練資料樣本 XXX,如果想達到該目標,有哪些參數需要調整等等的
同時我也建議配置參數都可以問過一輪,才會知道根據你的需求,假設訓練出來不理想,可以調整哪些參數來接近目標
接下來下一個需要查看的是 LoRA 參數,也是與訓練目標有關的調整參數,如果沒有要變更設定,那就維持原樣即可
接下來是 Cell 9開始訓練,要特別注意的點有兩個,首先是 Training Loss 用來評估模型是否有充分學習你所提供的訓練資料知識,越低則代表學習越充分。
但也不是越低越好,當他跳動的幅度太大,可能會有過擬合(Over Fitting)的情況發生,也就是模型太沈浸在你提供的訓練資料中。
這樣的情況下,微調出的模型可能在回覆時鬼打牆,不斷重複你提供的資訊,這當然不是我們樂見的。不過,我們可以透過調整學習率、MAX STEP 等參數來優化。
接著在訓練完成後,一步步執行後續的流程,就會自動將你訓練好的模型上傳到 HuggingFace了,不過你可能會想問,要如何測試訓練好的模型?下一步驟接續!
測試模型
分別有兩種方法,第一種是下載 LM Studio,點擊左側 Discover 接著搜尋你的使用者名稱,就會顯示出你上傳的模型囉,不過這樣測試效率很慢,所以使用第二種!
Open Web UI
這時一樣會先打開 Glows.ai,選擇 RTX 4090、LLAMA-3.1 8B, WebUI,等待安裝完成後點擊 Http Port 的 Open,會看到註冊頁(這裡的註冊資料會在刪除虛擬機後一併移除,無需擔心)。
這樣做還有另一個好處是,如果你的網速沒有特別快,且只是想要測試模型,透過 Glows.ai 下載的速度很快,且不會佔用本地空間,可以測試到覺得模型微調符合效果再實際下載到本地端。
點擊右上角的頭像進入管理員控制台
選擇設定 > 模型 > 輸入前綴 hf.co/Username/Model_Name,並且在模型名稱後面加上 : 與模型參數,輸入完點擊右側下載。
範例:hf.co/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF:Q8_0
這裡的用戶名稱與模型名稱可以直接到 HuggingFace 上直接複製,模型參數會在右側顯示。
下載完後點擊左上角選擇模型,就可以開始測試效果囉,另外可以點擊右側的加號,一次測試多個模型在單一問題的表現如何。
實際測試訓練後的模型,我覺得是有一定的調整與效果,像是回覆更加口語化、且繁中用語都有與原先 DeepSeek 的回覆做出區別!
只不過由於訓練目標是與用詞習慣相關,原先問答集的知識使用的不夠完善,之後可能會想再針對這方面去優化,讓他保有大部分原先知識的同時結合問答集來回覆。
假設在測試後覺得效果不理想,就直接重跑一次流程測試直到結果滿意即可,另外可以使用 Jupyter Lab 左上的 Kernel 直接清除,即可重新開始,無需再次租用開新機器。
如果在訓練時有遇到任何問題都歡迎透過 Instagram 或 Discord 群組來交流!