1.為什么要對(duì)Yuan2.0做微調(diào)???
Yuan2.0(https://huggingface.co/IEITYuan)是浪潮信息發(fā)布的新一代基礎(chǔ)語(yǔ)言大模型,該模型擁有優(yōu)異的數(shù)學(xué)、代碼能力。自發(fā)布以來(lái),Yuan2.0已經(jīng)受到了業(yè)界廣泛的關(guān)注。當(dāng)前Yuan2.0已經(jīng)開(kāi)源參數(shù)量分別是102B、51B和2B的3個(gè)基礎(chǔ)模型,以供研發(fā)人員做進(jìn)一步的開(kāi)發(fā)。
LLM(大語(yǔ)言模型)微調(diào)方案是解決通用大模型落地私有領(lǐng)域的一大利器?;陂_(kāi)源大模型的微調(diào),不僅可以提升LLM對(duì)于指令的遵循能力,也能通過(guò)行業(yè)知識(shí)的引入,來(lái)提升LLM在專業(yè)領(lǐng)域的知識(shí)和能力。當(dāng)前,學(xué)界和業(yè)界已經(jīng)基于LLM開(kāi)發(fā)及實(shí)踐出了眾多的微調(diào)方法,如指令微調(diào)、基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF,Reinforcement Learning from Human Feedback)、直接偏好優(yōu)化(DPO,Direct Preference Optimization)等。內(nèi)存和計(jì)算資源是制約LLM微調(diào)的兩大瓶頸,通過(guò)使用高效微調(diào)(PEFT,Parameter-Efficient Fine-Tuning)方案可以有效緩解上述問(wèn)題,當(dāng)前業(yè)界已經(jīng)出現(xiàn)了LoRA和QLoRA等高效微調(diào)技術(shù),可以實(shí)現(xiàn)在單張GPU上完成千億參數(shù)的微調(diào)訓(xùn)練。因此,一個(gè)能夠?qū)崿F(xiàn)上述功能的簡(jiǎn)潔、高效、易用、與時(shí)俱進(jìn)的微調(diào)框架是開(kāi)展LLM微調(diào)工作的最佳抓手。
LLaMA-Factory(https://github.com/hiyouga/LLaMA-Factory)是零隙智能(SeamLessAI)開(kāi)源的低代碼大模型訓(xùn)練框架,它集成了業(yè)界最廣泛使用的微調(diào)方法和優(yōu)化技術(shù),并支持業(yè)界眾多的開(kāi)源模型的微調(diào)和二次訓(xùn)練,開(kāi)發(fā)者可以使用私域數(shù)據(jù)、基于有限算力完成領(lǐng)域大模型的定制開(kāi)發(fā)。LLaMA-Factory還為開(kāi)發(fā)者提供了可視化訓(xùn)練、推理平臺(tái),一鍵配置模型訓(xùn)練,實(shí)現(xiàn)零代碼微調(diào)LLM。自2023年5月開(kāi)源以來(lái),成為社區(qū)內(nèi)最受歡迎的微調(diào)框架,github星數(shù)已超9K。
目前LLaMA-Factory已完成與Yuan2.0的適配微調(diào),通過(guò)使用LLaMA-Factory可以方便快捷的對(duì)不同尺寸的Yuan2.0基礎(chǔ)模型進(jìn)行全量微調(diào)及高效微調(diào)。本文將介紹如何使用alpaca中文數(shù)據(jù)集、ShareGPT數(shù)據(jù)集和llama-factory提供的模型認(rèn)知數(shù)據(jù)集,對(duì)Yuan2.0進(jìn)行微調(diào),來(lái)構(gòu)建自己的人工智能助手。
2.資源需求評(píng)估和環(huán)境準(zhǔn)備
下面的表格給出了使用llama-factory微調(diào)Yuan2.0模型的最低顯存需求。大家可以根據(jù)手頭GPU資源的顯存情況來(lái)評(píng)估使用的模型以及對(duì)應(yīng)的微調(diào)算法。比如選擇Yuan2.0-2B模型,使用QLoRA微調(diào)方法,只需要最小5GB顯存,當(dāng)前業(yè)界絕大多數(shù)的GPU都可以滿足。
表格2?1:Yuan2.0不同微調(diào)策略所需要的最低顯存需求評(píng)估。
微調(diào)方法 |
Yuan2.0-2B |
Yuan2.0-51B |
Yuan2.0-102B |
全參微調(diào) |
40GB |
1000GB |
2000GB |
LoRA |
7GB |
120GB |
230GB |
QLoRA |
5GB |
40GB |
80GB |
Llama-factory的部署可以參考其github上的部署文檔,yuan2.0的github上也提供了完整的llama-factory的環(huán)境部署流程(https://github.com/IEIT-Yuan/Yuan-2.0/blob/main/docs/Yuan2_llama-factory.md)可供參考。在本文的部署實(shí)踐中,使用了ngc-torch2308作為基礎(chǔ)docker鏡像。
3.Yuan2.0 Lora微調(diào)Step by step流程
下面以Yuan2.0-2B模型的LoRA微調(diào)為例,進(jìn)行step by step的流程介紹。
Step by Step? ,yuan2.0模型微調(diào)演示demo
- step1:基于torch2308鏡像啟動(dòng)容器,可以映射容器內(nèi)的7860端口到宿主機(jī),以便后期微調(diào)及推理測(cè)試使用;克隆llama-factory項(xiàng)目,使用pip清華源,按照如下命令安裝相關(guān)依賴。
cd /workspace/sa/LLM_test/LLaMA-Factory-main
vim src/train_web.py
#如下文件內(nèi)容可以修改server_port為自己映射的端口
from llmtuner import create_ui
def main():
demo = create_ui()
demo.queue()
demo.launch(server_name="0.0.0.0",server_port=6666, share=False, inbrowser=True)
if __name__ == "__main__":
main()
#使用如下命令在終端啟動(dòng)web服務(wù),并在瀏覽器中打開(kāi)web界面
python src/train_web.py
- step2 :獲取yuan2.0 huggingface模型,微調(diào)使用的huggingface模型可以在給出鏈接中獲取。
- step3:?啟動(dòng)Web UI服務(wù),訓(xùn)練自己的私有大模型智能助手。我們將使用llama-factory內(nèi)置的中文數(shù)據(jù)集(GPT-4優(yōu)化后的alpaca中文數(shù)據(jù)集、ShareGPT數(shù)據(jù)集和llama-factory提供的模型認(rèn)數(shù)據(jù)集)完成此次微調(diào)。
cd /workspace/sa/LLM_test/LLaMA-Factory-main
vim src/train_web.py
#如下文件內(nèi)容可以修改server_port為自己映射的端口
from llmtuner import create_ui
def main():
demo = create_ui()
demo.queue()
demo.launch(server_name="0.0.0.0",server_port=6666, share=False, inbrowser=True)
if __name__ == "__main__":
main()
#使用如下命令在終端啟動(dòng)web服務(wù),并在瀏覽器中打開(kāi)web界面
python src/train_web.py
- step4:在web界面上配置參數(shù)微調(diào)Yuan2.0-2B。如下圖為模型、微調(diào)方式、數(shù)據(jù)等的配置樣例,具體信息參考圖中注釋。
(1)模型路徑,數(shù)據(jù)集選擇,訓(xùn)練精度,樣本截?cái)嚅L(zhǎng)度,與訓(xùn)練優(yōu)化相關(guān)的學(xué)習(xí)率、batchsize等參數(shù)的設(shè)置
|
(2)日志、高效微調(diào)lora、模型保存等相關(guān)參數(shù)配置
(3)命令行執(zhí)行命令顯示
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--model_name_or_path /workspace/sa/LLM_test/LLM_models/yuan2-2B/ \
--do_train \
--dataset alpaca_gpt4_zh,self_cognition,sharegpt_zh \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir yuan2_2B_test_1gpu_qlora_checkpoint\
--overwrite_cache \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 16 \
--preprocessing_num_workers 16 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 10000 \
--learning_rate 5e-4 \
--max_grad_norm 0.5 \
--num_train_epochs 3 \
--evaluation_strategy no \
--bf16 \
--template yuan \
--overwrite_output_dir \
--cutoff_len 1024\
--quantization_bit 4 \
(4)訓(xùn)練日志及l(fā)oss曲線展示
本次微調(diào)使用的微調(diào)數(shù)據(jù)集約有25.6K個(gè)sample,微調(diào)3個(gè)epoch,單塊L20 GPU約6小時(shí)可以完成。如果要微調(diào)類似alpaca-data(52K)的數(shù)據(jù)集,tokenizer后其平均序列長(zhǎng)度為226,拼接后sample個(gè)數(shù)為11.5K,微調(diào)3個(gè)epoch,單塊L20 GPU約2.5小時(shí)可以完成。如果使用消費(fèi)級(jí)顯卡如RTX 4090等來(lái)微調(diào)Yuan2.0-2B,其實(shí)際算力水平約為L(zhǎng)20的1.2~1.3X,微調(diào)所花費(fèi)時(shí)間約為L(zhǎng)20的80%;其余GPU設(shè)備均可做類似比對(duì)。
- step5:測(cè)試推理及效果展示
(1)寫作
(2)代碼
(3)歷史
(4)數(shù)學(xué)
4.訓(xùn)練加速
在step-by-step流程中介紹了如何利用web UI界面微調(diào)和使用Yuan2.0-2B模型。接下來(lái)將在上述流程的基礎(chǔ)上,展示如何使用llama-factory中的超參設(shè)置來(lái)加速模型的微調(diào)。
下述命令行大致對(duì)應(yīng)了web UI啟動(dòng)微調(diào)所調(diào)用的命令,我們可以添加gradient_checkpointing True參數(shù)進(jìn)一步節(jié)省顯存,增大per_device_train_batchsize??梢蕴砑?-sft_packing參數(shù),該參數(shù)能夠?qū)⒍鄠€(gè)樣本拼接在一起,防止計(jì)算資源浪費(fèi)。
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--model_name_or_path /workspace/sa/LLM_test/LLM_models/yuan2-2B/ \
--do_train \
--dataset alpaca_gpt4_zh,self_cognition,sharegpt_zh \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir yuan2_2B_test_1gpu_qlora_checkpoint\
--overwrite_cache \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 16 \
--preprocessing_num_workers 16 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 10000 \
--learning_rate 5e-4 \
--max_grad_norm 0.5 \
--num_train_epochs 3 \
--evaluation_strategy no \
--bf16 \
--template yuan \
--overwrite_output_dir \
--cutoff_len 1024\
--quantization_bit 4 \
--sft_packing
另外我們可以使用deepspeed-zero進(jìn)行多機(jī)多卡的微調(diào)訓(xùn)練。使用torchrun或deepspeed啟動(dòng)腳本,并添加deepspeed config參數(shù),使用多機(jī)多卡并行可以加快模型收斂;zero并行策略可以降低模型顯存占用,讓大模型的微調(diào)門檻降低。如下所示為啟動(dòng)多機(jī)多卡微調(diào)訓(xùn)練的命令行。
torchrun --nnodes 2 --node_rank 0 --nproc_per_node=8 \
--master-addr *.*.*.* --master_port 10086 src/train_bash.py \
--stage sft \
--model_name_or_path path-to-yuan-hf-model \
--do_train \
--dataset alpaca_gpt4_zh,self_cognition,sharegpt_zh \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir yuan2_2B_lora_fintuning_checkpoint\
--overwrite_cache \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 4 \
--preprocessing_num_workers 16 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 10000 \
--learning_rate 5e-5 \
--max_grad_norm 0.5 \
--num_train_epochs 3 \
--evaluation_strategy no \
--bf16 \
--deepspeed ./zero2_ds_woloading.json \
--template yuan \
--overwrite_output_dir \
--cutoff_len 2048\
--sft_packing \
--gradient_checkpointing True
5.實(shí)測(cè)性能數(shù)據(jù)
我們基于浪潮信息的NF5468M7服務(wù)器(內(nèi)置8個(gè)L40s加速卡),進(jìn)行了Yuan2.0不同模型的微調(diào)性能對(duì)比,性能數(shù)據(jù)如下表,供讀者參考。實(shí)驗(yàn)使用的數(shù)據(jù)集為yuan-sample-2W-data,單個(gè)yuan-sample-2W-datasample平均長(zhǎng)度為167。
表格5?1:基于llama-factory微調(diào)源2.0模型的實(shí)測(cè)性能(NF5468M7+L40s)
微調(diào)方法(基于llama-factory) |
Model |
序列長(zhǎng)度 |
Micro/global??BS |
Samples/per-GPU |
Tokens/per-GPU |
顯存/per-GPU |
訓(xùn)練耗時(shí) |
全參微調(diào) |
Yuan2.0-2B |
2048 |
4/128 |
2.23 |
4567 |
19G |
0.15h |
LoRA |
Yuan2.0-51B |
2048 |
1/128 |
0.097 |
199 |
34G |
3.54h |
LoRA |
Yuan2.0-102B |
2048 |
1/128 |
0.049 |
100 |
47G文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-809394.html |
7h |
我們基于浪潮信息的NF5468M7服務(wù)器(內(nèi)置8個(gè)L20加速卡),進(jìn)行了Yuan2.0不同模型的微調(diào)性能對(duì)比,性能數(shù)據(jù)如下表,供讀者參考。實(shí)驗(yàn)使用的數(shù)據(jù)集為yuan-sample-2W-data,單個(gè)yuan-sample-2W-datasample平均長(zhǎng)度為167。
表格5?2:基于llama-factory微調(diào)源2.0模型的實(shí)測(cè)性能(NF5468M7+L20)
微調(diào)方法(基于llama-factory) | Model |
序列長(zhǎng)度 |
Micro/global??BS |
Samples/per-GPU |
Tokens/per-GPU |
顯存/per-GPU |
訓(xùn)練耗時(shí) |
全參微調(diào) |
Yuan2.0-2B |
2048 |
4/128 |
1.74 |
3559 |
19G |
0.2h |
LoRA |
Yuan2.0-51B |
2048 |
1/128 |
0.078 |
160 |
34G |
4.4h |
LoRA |
Yuan2.0-102B |
2048 |
1/128 |
0.039 |
81 |
47G |
8.7h文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809394.html |
到了這里,關(guān)于快速上手!LLaMa-Factory最新微調(diào)實(shí)踐,輕松實(shí)現(xiàn)專屬大模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!