使用LLaMA-Factory訓練LLM大模型並用ollama呼叫

hvker發表於2024-10-16

環境搭建

系統環境

需要Nvidia顯示卡,至少8G視訊記憶體,且專用視訊記憶體與共享視訊記憶體之和大於20G
建議將非安裝版的環境檔案都放到非系統盤,方便重灌或移植
以Windows11為例,非安裝環境檔案都放在 E 盤下

設定自定義Path資料夾

建立 E:\mypath 資料夾,將其新增進使用者環境變數Path中,之後會用

CMake

下載 CMake 的 Windows x64 ZIP 對應檔案:Download CMake
解壓到E:\environment\cmake
E:\environment\cmake\bin新增到使用者環境變數Path

C++編譯

下載 Community 版 Visual StudioVisual Studio 2022 IDE
執行後選擇桌面c++板塊內容安裝,若中途取消安裝了,可以在開始選單下欄的新增專案(或推薦專案)中找到該安裝程式
這裡只需要c++的編譯環境,把除了C++板塊以外的安裝專案全部取消勾選(該板塊自動勾選系統SDK等其他相關元件,不要取消勾選)

python環境

python安裝

下載新版Anaconda安裝程式:Download Anaconda
安裝過程中將新增到環境變數等選項全部打勾

用uv管理pip包

將uv所有檔案裝至 E:\uv

安裝

新增 python 3.11 獨立檔案

uv python install 3.11
uv python list # 檢視是否安裝成功

Git環境

安裝Git:Git - 安裝 Git (git-scm.com)

Nvidia CUDA 工具包

安裝12.1版:CUDA Toolkit 12.1 Update 1 Downloads | NVIDIA Developer
注意執行安裝程式後在安裝選單介面只安裝CUDA驅動和工具包,不選其他顯示卡驅動和Nsignt
安裝完後重啟電腦
輸入指令檢視資訊

nvidia-smi # 看當前驅動最大可支援的CUDA版本
nvcc -V # 看當前安裝的CUDA執行時版本

部署訓練框架

部署LLaMA-Factory

拉取原始碼

E:\AI 資料夾下拉取 LLaMA-Factory.git,注意掛代理加速

git config --global http.https://github.com.proxy socks5://127.0.0.1:1080 # 對github設定socks5代理
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
uv venv -p 3.11
uv pip install -e ".[torch,metrics]"

安裝flash-attention訓練加速

在當前目錄(LLaMA-Factory)下繼續操作

uv pip install https://github.com/bdashore3/flash-attention/releases/download/v2.6.3/flash_attn-2.6.3+cu123torch2.3.1cxx11abiFALSE-cp311-cp311-win_amd64.whl

如果下載慢可以在url前加https://ghproxy.cn/用國內節點下載

安裝hqq用於量化

在當前目錄(LLaMA-Factory)下繼續操作

uv pip install hqq

[!tip] 若提示UTF8相關報錯解決

開啟使用UTF-8提供全球語言支援

開啟控制皮膚,更改系統區域設定,勾選Beta 版:使用Unicode UTF-8 提供全球語言支援(U),這個在安裝hqq包時用到
重啟電腦,安裝完後可將該項取消勾選

安裝與當前cuda適配的pytorch

在當前目錄(LLaMA-Factory)下繼續操作
全域性代理加速的情況:
參考 Start Locally | PyTorch
以下直接貼出程式碼

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

沒有全域性代理加速的情況:
先用代理加速去下載torch-2.3.1+cu121-cp311-cp311-win_amd64.whl

uv pip install .\torch-2.3.1+cu121-cp311-cp311-win_amd64.whl
uv pip install torchvision==0.18.1+cu121 torchaudio==2.3.1+cu121 -f https://download.pytorch.org/whl/torch_stable.html

配置之前儲存的引數

在當前目錄(LLaMA-Factory)下繼續操作
修改 .\data\dataset_info.json 檔案,在開頭花括號後加入

  "alpaca_dataset": {
    "file_name": "alpaca_dataset.json"
  },

然後將自定資料集名稱命名為 alpaca_dataset.json 放入 .\data
將之前儲存的.yaml引數配置檔案放入 .\config

新增環境變數

E:\mypath 資料夾內新建 llamafactory-cli.bat 檔案,文字編輯器開啟輸入以下內容並儲存

@echo off
cd /d E:\AI\LLaMA-Factory
.\.venv\Scripts\llamafactory-cli.exe %*

新開一個終端,輸入以下指令開啟web介面

llamafactory-cli webui

下載基礎模型

使用帶 -Chat-Instruct 標籤的模型作為基礎模型
Qwen2.5-7B-Instruct 為例
到魔搭社群點下載模型:通義千問2.5-7B-Instruct · 模型庫 (modelscope.cn)
按說明下載模型檔案到 E:\AI\models 中(注意其中大檔案下載的進度條不是實時顯示,每隔一段進度才顯示一次,並不是卡住不動)

模型微調

LLaMA-Factory 的Web介面中操作
語言選 zh
滑到最下面找到配置路徑
下拉選單選擇之前儲存的配置
點選載入訓練引數按鈕
滑到最上面
模型名稱 Qwen2.5-7B-Instruct
填寫本地模型路徑E:\AI\models\Qwen2.5-7B-Instruct
展開高階設定
量化等級設定4,量化方法選hqq,加速方式選flashattn2
資料集可載入多個
可選調中間位置訓練輪數最大樣本數最大樣本數即要訓練用的最大樣本數量,點選預覽資料集按鈕可檢視當前資料集數量,如果最大樣本數小於當前資料集數量,則按最大樣本數作為實際訓練樣本數,多出的樣本不用於訓練
計算型別fp16
下面輸出目錄按需選填
點選開始進行訓練
訓練結束後檢視損失圖判斷訓練效果,損失值越小且穩定即效果好
在終端 Ctrl+C 退出Web服務

微調後的模型使用

以ollama呼叫為例

部署ollama

設定使用者環境變數:

OLLAMA_ORIGINS			*
OLLAMA_MODELS			E:\AI\ollama_models

下載並安裝:Ollama
安裝後重啟電腦

拉取模型

ollama pull qwen2.5:7b

微調模型格式轉換

部署llama.cpp

E:\AI 目錄下

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
uv venv -p 3.11
uv pip install -r .\requirements\requirements-convert_lora_to_gguf.txt --index-strategy unsafe-best-match

模型檢查點轉換為gguf

E:\AI\llama.cpp 目錄下

.venv\Scripts\activate.ps1
# python ./convert_lora_to_gguf.py --base <basemodel> <loratrain>
python ./convert_lora_to_gguf.py --base "E:\AI\models\Qwen2.5-7B-Instruct" "E:\AI\LLaMA-Factory\saves\Qwen2.5-7B-Instruct\lora\train_xxx"

轉換後的gguf檔案會匯出到<loratrain>的路徑下

部署微調模型

從ollama建立新模型

ollama 的 modelfile 模板:

# set the base model
FROM llama3:8b
 
# set custom parameter values
PARAMETER temperature 1
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
PARAMETER stop <|reserved_special_token
 
# set the model template
TEMPLATE """
{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>
"""
 
# set the system message
SYSTEM You are llama3 from Meta, customized and hosted @ HY's Blog (https://blog.yanghong.dev).
# set Chinese lora support
ADAPTER /root/.ollama/models/lora/ggml-adapter-model.bin

將轉換後的gguf檔案剪下到 E:\models\mymodel 下,命名為 mymodel.gguf
在該目錄下建立 mymodel.modelfile,輸入以下內容並儲存

FROM qwen2.5:7b

SYSTEM """
(可選設定SYSTEM)
"""

ADAPTER .\mymodel.gguf

在ollama建立該模型

ollama create mymodel -f E:\models\mymodel\mymodel.modelfile

模型可以使用了~

相關文章