【GPT入門】第57課 大模型多卡計算
- 1. 理論
- 2.LLamaFacotory實踐
- 3. xtuner
- 3.1 介紹
- 3.1 安裝
- 3.2 xtuner訓練
- 3.4 訓練后格式轉換
- 3.5 合并基礎模型與lora模型
- 3.6 參數說明
- 3.7 訓練過程主觀檢驗
1. 理論
deepspeed的三種訓練方式
zero-1,優化器狀態分片。的優勢體現在多卡上,對單卡沒起到優化效果
zero-2: 梯度分片+優化器狀態分片,梯度分片就是模型分片,這里是模型中反向過程的拆分
zero-3: 參數分片+梯度分片+優化器狀態分片。前向反向都參與計算。節省顯存,但計算最慢。
LLamaFactory和xtuner都實現了deepspeed來體現訓練性能,下文分別采用這兩個技術實踐訓練過程
2.LLamaFacotory實踐
官網說明:
https://llamafactory.readthedocs.io/zh-cn/latest/advanced/distributed.html#
deepSpeed state = none 不會節省現存,每張卡的現存都一樣的
- 分布訓練介紹
- DeepSpeed集成介紹
- ui中none就是不開啟deepseek
- 單機多卡計算
在llamafactory ui中,直接選DeepSpeed stage=2或3就可以開始單機多卡的計算
-
訓練看看,發現報錯
-
state設置為2
pip install deepspeed
[rank1]: ImportError: deepspeed>=0.10.0,<=0.16.9 is required for a normal functioning of this module, but found deepspeed0.17.5.
[rank1]: To fix: run pip install deepspeed>=0.10.0,<=0.16.9
.
pip install deepspeed0.16.9
運行前截圖:
- 雙卡使用情況可視化
3. xtuner
3.1 介紹
XTuner 是一款由上海人工智能實驗室(Shanghai AI Laboratory)開發的大模型微調工具鏈,專注于為各種規模的預訓練模型提供高效、易用的微調解決方案。它基于 PyTorch 框架構建,兼容主流的大模型(如 LLaMA 系列、GPT 系列、Qwen 系列等),支持多種微調策略,旨在降低大模型微調的技術門檻,同時保證訓練效率和效果。
XTuner 的核心優勢在于其對分布式訓練的優化、內存高效的訓練策略以及豐富的微調算法支持,使得用戶能夠在有限的硬件資源下完成大模型的微調任務。
3.1 安裝
安裝文檔參考官網:https://xtuner.readthedocs.io/zh-cn/latest/get_started/installation.html
- 步驟0
conda create --name xtuner-env python=3.10 -y
create --prefix /root/autodl-tmp/conda_envs/xtuner-env python=3.10 -y
conda activate xtuner-env
- 步驟1: 源碼安裝
git clone https://github.com/InternLM/xtuner.git
cd xtuner
pip install -e '.[deepspeed]'
“-e” 表示在可編輯模式下安裝項目,因此對代碼所做的任何本地修改都會生效
-
步驟2:檢查配置文件
xtuner list-cfg
-
qLoRA開關
qLoRA比LoRA更高效,是目前的主流 -
對話模板存放位置
-
xtuner支持的模型
3.2 xtuner訓練
- 選擇模板
根據自己訓練的模型,選擇相應的模板,本文使用qwen1.5_0.5b
- 量化參數修改
參數修改行業經驗: r=64, lora_alpha設置為r的2倍,即128.
-
對話模板位置
-
訓練數據
/root/autodl-tmp/xtuner/data/target_data.json
使用modelscope上的ruozhiba數據,經過轉換后格式如下:
轉換前:
[{"query": "只剩一個心臟了還能活嗎?","response": "能,人本來就只有一個心臟。"},{"query": "爸爸再婚,我是不是就有了個新娘?","response": "不是的,你有了一個繼母。\"新娘\"是指新婚的女方,而你爸爸再婚,他的新婚妻子對你來說是繼母。"},{"query": "樟腦丸是我吃過最難吃的硬糖有奇怪的味道怎么還有人買","response": "樟腦丸并不是硬糖,而是一種常見的驅蟲藥,不能食用。雖然它的味道可能不太好,但是由于其有效的驅蟲效果,所以仍然有很多人會購買。"},
轉換后格式:
格式要求參考官網:https://xtuner.readthedocs.io/zh-cn/latest/training/open_source_dataset.html
{"conversation": [{"input": "只剩一個心臟了還能活嗎?","output": "能,人本來就只有一個心臟。"}]},{"conversation": [{"input": "爸爸再婚,我是不是就有了個新娘?","output": "不是的,你有了一個繼母。\"新娘\"是指新婚的女方,而你爸爸再婚,他的新婚妻子對你來說是繼母。"}]},{"conversation": [{"input": "樟腦丸是我吃過最難吃的硬糖有奇怪的味道怎么還有人買","output": "樟腦丸并不是硬糖,而是一種常見的驅蟲藥,不能食用。雖然它的味道可能不太好,但是由于其有效的驅蟲效果,所以仍然有很多人會購買。"}]},
- 執行
xtuner train qwen1_5_0_5b_chat_qlora_alpaca_e3.py
提示
79, in validate_environmentfrom ..integrations import validate_bnb_backend_availabilityFile "<frozen importlib._bootstrap>", line 1075, in _handle_fromlistFile "/root/autodl-tmp/conda_envs/xtuner-env/lib/python3.10/site-packages/transformers/utils/import_utils.py", line 1805, in __getattr__module = self._get_module(self._class_to_module[name])File "/root/autodl-tmp/conda_envs/xtuner-env/lib/python3.10/site-packages/transformers/utils/import_utils.py", line 1819, in _get_moduleraise RuntimeError(
RuntimeError: Failed to import transformers.integrations.bitsandbytes because of the following error (look up to see its traceback):
No module named 'triton.ops'
更新torch版本,在runtime.txt中,指定版本,重新安裝
torch==2.5.1
torchvision==0.20.1
- 指定多卡運行
參考官網:https://xtuner.readthedocs.io/zh-cn/latest/acceleration/deepspeed.html
NPROC_PER_NODE=${GPU_NUM} , 指定GPU數量,如果不指定,就是一個GPU,即使機器存在多個GPU
NPROC_PER_NODE=2 xtuner train qwen1_5_0_5b_chat_qlora_alpaca_e3.py --deepspeed deepspeed_zero2
- 觀察訓練過程
3.4 訓練后格式轉換
- 訓練后的文件是pytorch格式,不是huggingface格式
rank0和rank1只分別在兩個卡上訓練
-
基礎模型是huggingface格式
-
轉換格式
轉換格式語法:
xtuner convert pth_to_hf ${FINETUNE_CFG} ${PTH_PATH} ${SAVE_PATH}
本次實驗命令:
(/root/autodl-tmp/conda_envs/xtuner-env) root@autodl-container-89aa47baea-756ca94a:~/autodl-tmp/xtuner# xtuner convert pth_to_hf qwen1_5_0_5b_chat_qlora_alpaca_e3.py /root/autodl-tmp/xtuner/work_dirs/qwen1_5_0_5b_chat_qlora_alpaca_e3/iter_3500.pth /root/autodl-tmp/models/hf
3.5 合并基礎模型與lora模型
3.6 參數說明
從checkpoint恢復方法
load_from = None 默認None,改為自己的checkpoit路徑
load_from=‘/root/autodl-tmp/xtuner/work_dirs/qwen1_5_0_5b_chat_qlora_alpaca_e3/iter_6500.pth’
resume = False
save_steps = 500, 沒500step保存一次checkpoint
save_total_limit = 2 # Maximum checkpoints to keep (-1 means unlimited) 只保存2個checkpoint
3.7 訓練過程主觀檢驗
可以在日志中,檢查訓練效果