Community研究與資料分析github.com

tarioch/unsloth-lora

使用 Unsloth 在本地 NVIDIA GPU 上對指令 LLM 進行 LoRA 微調,從聊天格式的 JSONL 資料集出發,並將結果匯出為 GGUF,同時附帶 run.json 記錄伺服器應如何像訓練時一樣提示模型。適用於訓練或重新訓練模型,或嘗試多個基礎模型。

unsloth-lora 是什麼?

此技能旨在簡化在本地 GPU 上使用 Unsloth 對聊天格式資料集進行 LoRA 微調的完整流程,並最終輸出可供服務的 GGUF 模型檔案。它從 `train.jsonl` 和 `val.jsonl` 資料集開始,透過一系列自動化腳本(資料檢查、預檢、煙霧測試、完整訓練、匯出)引導使用者完成每個步驟。該技能支援多個基礎模型,並會為每個模型建立單獨的執行資料夾,其中包含 GGUF 模型和 `run.json` 設定檔,後者記錄了正確的提示格式,以便後續服務技能(如 `ollama-model`)直接使用。核心在於完全掌控訓練流程,包括處理 GPU 記憶體限制、偵測過擬合、以及在匯出前移除不必要的訓練資料(如檢查點)以節省空間,確保最終產出的是乾淨、可直接部署的模型。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tarioch/llm-finetune-skills/tree/HEAD/skills/unsloth-lora

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Unsloth LoRA 訓練

在本地 GPU 上使用 Unsloth 對聊天格式資料集訓練 LoRA,並將結果匯出為 GGUF。資料集來自使用者(產生資料集取決於具體問題);此技能從 train.jsonl 和 val.jsonl 開始。服務模型是另一個步驟:此技能留下的執行資料夾(GGUF 加上 run.json)是像 ollama-model 這樣的服務技能所需的輸入。

每個腳本都透過啟動器執行,使用 Bash 工具:${CLAUDE_SKILL_DIR}/scripts/run <script.py> [args]。此技能僅允許該確切指令,因此它會以自動模式執行;以其他方式呼叫腳本將會被拒絕。如果使用者在發送新訊息後啟動器指令被拒絕,請再次呼叫此技能。啟動器使用任何 Python 3 執行 check_data.py,並使用 Unsloth 環境的 Python 在其 --out/--run 資料夾的上層資料夾中執行 preflight.py、train.py 和 export_gguf.py(Unsloth 會在當前目錄寫入一個 unsloth_compiled_cache/ 資料夾)。所有路徑都請使用絕對路徑:指令不共享工作目錄。

開始之前,請先確認

  • 資料集資料夾,以及稍後用於比較模型的評估集:評估集不得包含在訓練資料中。如果沒有評估集,建議在訓練前保留一些範例作為評估集。
  • 基礎模型,以 Unsloth 4-bit 名稱表示(例如 unsloth/Qwen2.5-Coder-3B-Instruct-bnb-4bit)。多個基礎模型意味著每個模型一個執行資料夾,並依序執行相同的步驟(參閱 references/base-models.md)。
  • 機器:訓練需要 CUDA GPU 和 Unsloth 環境的 Python。如果未設定 UNSLOTH_PYTHON 且 ~/.config/llm-finetune/unsloth-python 不存在,請向使用者詢問該 Python 的路徑,並在使用者同意的情況下將該路徑寫入該檔案的第一行:啟動器會從那裡讀取。
  • 執行資料夾,用於存放執行資料夾,應位於任何 git 倉庫之外。下面的 <runs> 是其絕對路徑。

步驟

1. 檢查資料

${CLAUDE_SKILL_DIR}/scripts/run check_data.py <data> --eval <eval.jsonl>

必須輸出 ok。它會檢查損毀的行、不以助理回答結尾的對話,以及與訓練集中相同或不同答案的驗證或評估提示:模型已經看過這些資料,因此它們衡量的是召回率。修復方法是將它們從驗證或評估集中移除(或修正資料分割方式),絕對不要為了通過檢查而更改訓練資料。它還會報告系統訊息的使用情況:無、共用一個或混合使用(參閱 references/chat-formats.md)。

2. 機器預檢

${CLAUDE_SKILL_DIR}/scripts/run preflight.py --params-b <十億參數> --out <runs>/<run>

可用的 GPU 記憶體比總記憶體更重要:遊戲、啟用 GPU 加速的瀏覽器,或本地伺服器仍在載入的模型(ollama ps,使用 ollama stop <model> 卸載)都可能導致可用記憶體過少。如果預檢列出其他 GPU 使用者,請告知使用者並讓他們決定,不要殺死程序。使用 --params-b 可以估算需求(一個 3B 模型,4-bit,序列長度 1024,批次大小 4,峰值記憶體為 6.6 GiB;7B 模型則為 8.1 GiB),當可用記憶體不足時,它會建議使用的 --batch-size/--grad-accum 組合。這只是一個基於兩次執行的估算:對於其他大小或序列長度,請傳遞 --need-gib 並觀察煙霧測試報告的峰值記憶體。

如果匯入失敗,表示環境已損壞,請在重新安裝任何東西之前參閱 references/troubleshooting.md。

3. 煙霧測試

${CLAUDE_SKILL_DIR}/scripts/run train.py --model <base> --data <data> --out <runs>/<run>-smoke --max-steps 2

請閱讀輸出,而不僅僅是檢查退出碼:

  • 第一個範例的呈現方式:頂部的系統提示行是模型將學習期望的內容,
  • 接收損失的 token:僅限答案,而非問題,
  • token 長度:截斷警告意味著需要增加 --max-seq-length 或刪除範例,
  • 伺服器必須發送的系統回合,以及關於它的警告。思考模板(Qwen3、Qwen3.5)會在每個訓練過的答案前面放置一個空的 thinking response 區塊:告知使用者應用程式會在答案中收到它,並且必須將其移除。

4. 完整訓練

${CLAUDE_SKILL_DIR}/scripts/run train.py --model <base> --data <data> --out <runs>/<run>

會執行一段時間(對於 3B 模型,數千個範例需要幾分鐘;7B 模型則更久)。使用 Bash 工具的後台選項啟動它,而不是保持會話開啟(工具會將輸出保存在檔案中,這就是日誌:請勿在指令中添加 >、; 或 &&,預先核准的範圍僅涵蓋完全如圖所示的啟動器指令),並使用 ${CLAUDE_SKILL_DIR}/scripts/run train_status.py <runs>/<run> 檢查其狀態:步驟、損失、最低驗證損失的步驟以及預計剩餘時間(截至上次檢查點)。崩潰後可使用 --resume 恢復。報告訓練和驗證損失以及 GPU 記憶體峰值。驗證損失遠高於訓練損失表示過擬合:減少訓練輪數或增加資料量。

5. 匯出

${CLAUDE_SKILL_DIR}/scripts/run export_gguf.py --run <runs>/<run>

需要幾分鐘(3B 模型)到十幾分鐘(7B 模型)(合併、轉換、量化),這比 Bash 工具允許前景指令執行的時間更長:請像訓練一樣在後台啟動它並等待其完成。它會將 GGUF 寫入 <run>/gguf/,並將其大小和校驗碼記錄在 run.json 中。它會移除合併後的 16-bit 模型(數 GB,使用 --keep-merged 可保留它,此時 GGUF 會留在 <run>/gguf_gguf/ 中)以及 Unsloth 寫在 GGUF 旁邊的 Modelfile:該 Modelfile 使用的是標準模板,而非訓練時使用的佈局,因此請不要依照 Unsloth 的提示使用 ollama create 從該 Modelfile 建立模型。每次匯出都會預期看到關於 llama.cpp 轉換器的 [CRITICAL] 警告;請告知使用者其含義(參閱 references/troubleshooting.md),它不會阻止匯出。執行資料夾現在已準備好進行服務:繼續使用 ollama-model 技能,或將 run.json 的 chat 部分交給任何服務模型的程式(參閱 references/run-json.md)。

6. 清理(先詢問)

模型匯出並評估完成後,建議刪除僅用於恢復或檢查設定的檔案:<run>/checkpoints/(用於 --resume,7B 模型約數 GB)和 <run>-smoke 資料夾。說明每個檔案佔用的空間大小,並僅刪除使用者同意的部分。保留 adapter/ 和 run.json:它們很小,且是新的匯出和發行說明所需的。

規則

  • 絕對不要為了讓評估結果更好看而更改資料集,也絕對不要在訓練資料上進行評估。
  • 未經詢問,請勿在 Unsloth 環境中安裝或升級套件:其 torch/CUDA 組合很脆弱。
  • 刪除執行資料夾或檢查點之前務必先詢問使用者。

相關技能