LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的簡(jiǎn)介、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略
導(dǎo)讀:2023年07月31日,哈工大訊飛聯(lián)合實(shí)驗(yàn)室,發(fā)布Chinese-LLaMA-Alpaca-2,本項(xiàng)目基于Meta發(fā)布的可商用大模型Llama-2開(kāi)發(fā),是中文LLaMA&Alpaca大模型的第二期項(xiàng)目,開(kāi)源了中文LLaMA-2基座模型和Alpaca-2指令精調(diào)大模型。這些模型在原版Llama-2的基礎(chǔ)上擴(kuò)充并優(yōu)化了中文詞表,使用了大規(guī)模中文數(shù)據(jù)進(jìn)行增量預(yù)訓(xùn)練,進(jìn)一步提升了中文基礎(chǔ)語(yǔ)義和指令理解能力,相比一代相關(guān)模型獲得了顯著性能提升。相關(guān)模型支持FlashAttention-2訓(xùn)練。標(biāo)準(zhǔn)版模型支持4K上下文長(zhǎng)度,長(zhǎng)上下文版模型支持16K上下文長(zhǎng)度,并可通過(guò)NTK方法最高擴(kuò)展至24K+上下文長(zhǎng)度。
本項(xiàng)目主要內(nèi)容
>> 針對(duì)Llama-2模型擴(kuò)充了新版中文詞表,開(kāi)源了中文LLaMA-2和Alpaca-2大模型;
>>開(kāi)源了預(yù)訓(xùn)練腳本、指令精調(diào)腳本,用戶(hù)可根據(jù)需要進(jìn)一步訓(xùn)練模型;
>>使用個(gè)人電腦的CPU/GPU快速在本地進(jìn)行大模型量化和部署體驗(yàn);
>>支持transformers, llama.cpp, text-generation-webui, LangChain, privateGPT, vLLM等LLaMA生態(tài);
目錄
相關(guān)文章
論文相關(guān)
LLMs:《Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca-4月17日版》翻譯與解讀
LLMs:《Efficient And Effective Text Encoding For Chinese Llama And Alpaca—6月15日版本》翻譯與解讀
LLMs之LLaMA2:LLaMA2的簡(jiǎn)介(技術(shù)細(xì)節(jié))、安裝、使用方法(開(kāi)源-免費(fèi)用于研究和商業(yè)用途)之詳細(xì)攻略
實(shí)戰(zhàn)應(yīng)用相關(guān)
LLMs:Chinese-LLaMA-Alpaca的簡(jiǎn)介(擴(kuò)充中文詞表+增量預(yù)訓(xùn)練+指令精調(diào))、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略
LLMs之Chinese-LLaMA-Alpaca:LLaMA漢化版項(xiàng)目詳細(xì)源碼解讀多個(gè)py文件-基于Ng單機(jī)單卡實(shí)現(xiàn)定義數(shù)據(jù)集(生成指令數(shù)據(jù))→數(shù)據(jù)預(yù)處理(token分詞/合并權(quán)重)→增量預(yù)訓(xùn)練(本質(zhì)是高效參數(shù)微調(diào),LoRA的參數(shù)/LLaMA的參數(shù))→指令微調(diào)LoRA權(quán)重(繼續(xù)訓(xùn)練/全新訓(xùn)練)→模型推理(CLI、GUI【webui/LLaMACha/LangChain】)
LLMs:在單機(jī)CPU+Windows系統(tǒng)上實(shí)現(xiàn)中文LLaMA算法(基于Chinese-LLaMA-Alpaca)進(jìn)行模型部署(llama.cpp)且實(shí)現(xiàn)模型推理全流程步驟的圖文教程(非常詳細(xì))
LLMs之LLaMA-7B-QLoRA:基于Alpaca-Lora代碼在CentOS和多卡(A800+并行技術(shù))實(shí)現(xiàn)全流程完整復(fù)現(xiàn)LLaMA-7B—安裝依賴(lài)、轉(zhuǎn)換為HF模型文件、模型微調(diào)(QLoRA+單卡/多卡)、模型推理(對(duì)比終端命令/llama.cpp/Docker封裝)圖文教程之詳細(xì)攻略
LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的簡(jiǎn)介、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之LLaMA2:基于LocalGPT利用LLaMA2模型實(shí)現(xiàn)本地化的知識(shí)庫(kù)(Chroma)并與本地文檔(基于langchain生成嵌入)進(jìn)行對(duì)話(huà)問(wèn)答圖文教程+代碼詳解之詳細(xì)攻略
LLMs之LLaMA2:基于云端進(jìn)行一鍵部署對(duì)LLaMA2模型實(shí)現(xiàn)推理(基于text-generation-webui)執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)、同時(shí)微調(diào)LLaMA2模型(配置云端環(huán)境【A100】→下載數(shù)據(jù)集【datasets】→加載模型【transformers】→分詞→模型訓(xùn)練【peft+SFTTrainer+wandb】→基于HuggingFace實(shí)現(xiàn)云端分享)之圖文教程詳細(xì)攻略
LLMs之LLaMA2:基于text-generation-webui工具來(lái)本地部署并對(duì)LLaMA2模型實(shí)現(xiàn)推理執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)(一鍵安裝tg webui+手動(dòng)下載模型+啟動(dòng)WebUI服務(wù))、同時(shí)微調(diào)LLaMA2模型(采用Conda環(huán)境安裝tg webui+PyTorch→CLI/GUI下載模型→啟動(dòng)WebUI服務(wù)→GUI式+LoRA微調(diào)→加載推理)之圖文教程詳細(xì)攻略
Chinese-LLaMA-Alpaca-2的簡(jiǎn)介
1、已開(kāi)源的模型
2、可視化本項(xiàng)目以及一期項(xiàng)目推出的所有大模型之間的關(guān)系
3、效果評(píng)估
(1)、生成效果評(píng)測(cè)
(2)、客觀效果評(píng)測(cè):C-Eval
(3)、客觀效果評(píng)測(cè):CMMLU
(3)、長(zhǎng)上下文版模型(16K)評(píng)測(cè)
(4)、量化效果評(píng)測(cè)
Chinese-LLaMA-Alpaca-2的安裝
1、下載模型
1.1、模型選擇指引
1.2、完整模型下載
1.3、LoRA模型下載
(1)、LoRA模型無(wú)法單獨(dú)使用,必須與原版Llama-2進(jìn)行合并才能轉(zhuǎn)為完整模型
2、模型訓(xùn)練與精調(diào)
2.1、預(yù)訓(xùn)練:基于deepspeed框架+Llama-2增量訓(xùn)練+采用120G純文本+ 啟用FlashAttention-2,默認(rèn)fp16訓(xùn)練
(1)、訓(xùn)練步驟
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
(2)、支持的訓(xùn)練模式:基于原版LLaMA-2訓(xùn)練中文LLaMA-2 LoRA、基于中文LLaMA-2/Alpaca-2繼續(xù)預(yù)訓(xùn)練(在新的LoRA上)
(3)、關(guān)于顯存占用:只訓(xùn)練LoRA參數(shù)、減小block_size、開(kāi)啟gradient_checkpointing(但會(huì)降速)
(4)、使用多機(jī)多卡訓(xùn)練
(5)、訓(xùn)練后文件整理
2.2、指令精調(diào):基于deepspeed框架+Chinese-LLaMA-2進(jìn)行指令精調(diào)+500萬(wàn)條(Alpaca格式的json文件)+ 啟用FlashAttention-2,默認(rèn)fp16訓(xùn)練
(0)、??重要提示??
(1)、訓(xùn)練步驟
Stanford Alpaca數(shù)據(jù)集的格式如下:
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
(2)、支持的訓(xùn)練模模式:基于Chinese-LLaMA-2 LoRA進(jìn)行指令精調(diào)、基于Chinese-LLaMA-2訓(xùn)練全新的指令精調(diào)LoRA權(quán)重
(3)、關(guān)于顯存占用:只訓(xùn)練LoRA參數(shù)(單卡21G)、減小max_seq_length
(4)、使用多機(jī)多卡
(5)、訓(xùn)練后文件整理
3、推理與部署
T1、llama.cpp:豐富的量化選項(xiàng)和高效本地推理
T2、Transformers:原生transformers推理接口
T3、Colab Demo:在Colab中啟動(dòng)交互界面
T4、仿OpenAI API調(diào)用:仿OpenAI API接口的服務(wù)器Demo
T5、text-generation-webui:前端Web UI界面的部署方式
T6、LangChain:適合二次開(kāi)發(fā)的大模型應(yīng)用開(kāi)源框架
T7、privateGPT:基于LangChain的多文檔本地問(wèn)答框架
Chinese-LLaMA-Alpaca-2的案例實(shí)戰(zhàn)應(yīng)用
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
相關(guān)文章
論文相關(guān)
LLMs:《Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca-4月17日版》翻譯與解讀
LLMs:《Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca-4月17日版》翻譯與解讀_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs:《Efficient And Effective Text Encoding For Chinese Llama And Alpaca—6月15日版本》翻譯與解讀
https://yunyaniu.blog.csdn.net/article/details/131318974
LLMs之LLaMA2:LLaMA2的簡(jiǎn)介(技術(shù)細(xì)節(jié))、安裝、使用方法(開(kāi)源-免費(fèi)用于研究和商業(yè)用途)之詳細(xì)攻略
LLMs之LLaMA2:LLaMA2的簡(jiǎn)介(技術(shù)細(xì)節(jié))、安裝、使用方法(開(kāi)源-免費(fèi)用于研究和商業(yè)用途)之詳細(xì)攻略_一個(gè)處女座的程序猿的博客-CSDN博客
實(shí)戰(zhàn)應(yīng)用相關(guān)
LLMs:Chinese-LLaMA-Alpaca的簡(jiǎn)介(擴(kuò)充中文詞表+增量預(yù)訓(xùn)練+指令精調(diào))、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略
https://yunyaniu.blog.csdn.net/article/details/130397623
LLMs之Chinese-LLaMA-Alpaca:LLaMA漢化版項(xiàng)目詳細(xì)源碼解讀多個(gè)py文件-基于Ng單機(jī)單卡實(shí)現(xiàn)定義數(shù)據(jù)集(生成指令數(shù)據(jù))→數(shù)據(jù)預(yù)處理(token分詞/合并權(quán)重)→增量預(yù)訓(xùn)練(本質(zhì)是高效參數(shù)微調(diào),LoRA的參數(shù)/LLaMA的參數(shù))→指令微調(diào)LoRA權(quán)重(繼續(xù)訓(xùn)練/全新訓(xùn)練)→模型推理(CLI、GUI【webui/LLaMACha/LangChain】)
https://yunyaniu.blog.csdn.net/article/details/131319010
LLMs:在單機(jī)CPU+Windows系統(tǒng)上實(shí)現(xiàn)中文LLaMA算法(基于Chinese-LLaMA-Alpaca)進(jìn)行模型部署(llama.cpp)且實(shí)現(xiàn)模型推理全流程步驟的圖文教程(非常詳細(xì))
LLMs之Chinese-LLaMA-Alpaca:基于單機(jī)CPU+Windows系統(tǒng)實(shí)現(xiàn)中文LLaMA算法進(jìn)行模型部署(llama.cpp)+模型推理全流程步驟【安裝環(huán)境+創(chuàng)建環(huán)境并安裝依賴(lài)+原版L_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs之LLaMA-7B-QLoRA:基于Alpaca-Lora代碼在CentOS和多卡(A800+并行技術(shù))實(shí)現(xiàn)全流程完整復(fù)現(xiàn)LLaMA-7B—安裝依賴(lài)、轉(zhuǎn)換為HF模型文件、模型微調(diào)(QLoRA+單卡/多卡)、模型推理(對(duì)比終端命令/llama.cpp/Docker封裝)圖文教程之詳細(xì)攻略
https://yunyaniu.blog.csdn.net/article/details/131526139
LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的簡(jiǎn)介、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略
LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的簡(jiǎn)介、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的chec-CSDN博客
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的che_一個(gè)處女座的程序猿的博客-CSDN博客文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-716390.html
LLMs之LLaMA2:基于LocalGPT利用LLaMA2模型實(shí)現(xiàn)本地化的知識(shí)庫(kù)(Chroma)并與本地文檔(基于langchain生成嵌入)進(jìn)行對(duì)話(huà)問(wèn)答圖文教程+代碼詳解之詳細(xì)攻略
LLMs之LLaMA2:基于LocalGPT利用LLaMA2模型實(shí)現(xiàn)本地化的知識(shí)庫(kù)(Chroma)并與本地文檔(基于langchain生成嵌入)進(jìn)行對(duì)話(huà)問(wèn)答圖文教程+代碼詳解之詳細(xì)攻略_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs之LLaMA2:基于云端進(jìn)行一鍵部署對(duì)LLaMA2模型實(shí)現(xiàn)推理(基于text-generation-webui)執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)、同時(shí)微調(diào)LLaMA2模型(配置云端環(huán)境【A100】→下載數(shù)據(jù)集【datasets】→加載模型【transformers】→分詞→模型訓(xùn)練【peft+SFTTrainer+wandb】→基于HuggingFace實(shí)現(xiàn)云端分享)之圖文教程詳細(xì)攻略
LLMs之LLaMA2:基于云端進(jìn)行一鍵部署對(duì)LLaMA2模型實(shí)現(xiàn)推理(基于text-generation-webui)執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)、同時(shí)微調(diào)LLaMA2模型(配置云端環(huán)境【A100】→下載數(shù)_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs之LLaMA2:基于text-generation-webui工具來(lái)本地部署并對(duì)LLaMA2模型實(shí)現(xiàn)推理執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)(一鍵安裝tg webui+手動(dòng)下載模型+啟動(dòng)WebUI服務(wù))、同時(shí)微調(diào)LLaMA2模型(采用Conda環(huán)境安裝tg webui+PyTorch→CLI/GUI下載模型→啟動(dòng)WebUI服務(wù)→GUI式+LoRA微調(diào)→加載推理)之圖文教程詳細(xì)攻略
LLMs之LLaMA2:基于text-generation-webui工具來(lái)本地部署并對(duì)LLaMA2模型實(shí)現(xiàn)推理執(zhí)行對(duì)話(huà)聊天問(wèn)答任務(wù)(一鍵安裝tg webui+手動(dòng)下載模型+啟動(dòng)WebUI服務(wù))、同時(shí)_一個(gè)處女座的程序猿的博客-CSDN博客
Chinese-LLaMA-Alpaca-2的簡(jiǎn)介
?
? ? ? ? 本項(xiàng)目推出了基于Llama-2的中文LLaMA-2以及Alpaca-2系列模型,相比一期項(xiàng)目其主要特點(diǎn)如下:
經(jīng)過(guò)優(yōu)化的中文詞表 |
在一期項(xiàng)目中,我們針對(duì)一代LLaMA模型的32K詞表擴(kuò)展了中文字詞(LLaMA:49953,Alpaca:49954) 在本項(xiàng)目中,我們重新設(shè)計(jì)了新詞表(大?。?5296),進(jìn)一步提升了中文字詞的覆蓋程度,同時(shí)統(tǒng)一了LLaMA/Alpaca的詞表,避免了因混用詞表帶來(lái)的問(wèn)題,以期進(jìn)一步提升模型對(duì)中文文本的編解碼效率 |
基于FlashAttention-2的高效注意力 |
FlashAttention-2是高效注意力機(jī)制的一種實(shí)現(xiàn),相比其一代技術(shù)具有更快的速度和更優(yōu)化的顯存占用; 當(dāng)上下文長(zhǎng)度更長(zhǎng)時(shí),為了避免顯存爆炸式的增長(zhǎng),使用此類(lèi)高效注意力技術(shù)尤為重要; 本項(xiàng)目的所有模型均使用了FlashAttention-2技術(shù)進(jìn)行訓(xùn)練; |
基于PI和NTK的超長(zhǎng)上下文擴(kuò)展技術(shù) |
在一期項(xiàng)目中,我們實(shí)現(xiàn)了基于NTK的上下文擴(kuò)展技術(shù),可在不繼續(xù)訓(xùn)練模型的情況下支持更長(zhǎng)的上下文; 基于位置插值PI和NTK等方法推出了長(zhǎng)上下文版模型,支持16K上下文,并可通過(guò)NTK方法最高擴(kuò)展至24K-32K; 進(jìn)一步設(shè)計(jì)了方便的自適應(yīng)經(jīng)驗(yàn)公式,無(wú)需針對(duì)不同的上下文長(zhǎng)度設(shè)置NTK超參,降低了使用難度; |
簡(jiǎn)化的中英雙語(yǔ)系統(tǒng)提示語(yǔ) |
在一期項(xiàng)目中,中文Alpaca系列模型使用了Stanford Alpaca的指令模板和系統(tǒng)提示語(yǔ); 初步實(shí)驗(yàn)發(fā)現(xiàn),Llama-2-Chat系列模型的默認(rèn)系統(tǒng)提示語(yǔ)未能帶來(lái)統(tǒng)計(jì)顯著的性能提升,且其內(nèi)容過(guò)于冗長(zhǎng); 本項(xiàng)目中的Alpaca-2系列模型簡(jiǎn)化了系統(tǒng)提示語(yǔ),同時(shí)遵循Llama-2-Chat指令模板,以便更好地適配相關(guān)生態(tài); |
地址 |
GitHub地址:GitHub - ymcui/Chinese-LLaMA-Alpaca-2: 中文LLaMA-2 & Alpaca-2大模型二期項(xiàng)目 + 16K超長(zhǎng)上下文模型 (Chinese LLaMA-2 & Alpaca-2 LLMs, including 16K long context models) |
時(shí)間 |
2023年07月31日 |
作者 |
哈工大訊飛聯(lián)合實(shí)驗(yàn)室 |
1、已開(kāi)源的模型
基座模型:Chinese-LLaMA-2-7B, Chinese-LLaMA-2-13B
聊天模型:Chinese-Alpaca-2-7B, Chinese-Alpaca-2-13B
長(zhǎng)上下文模型:Chinese-LLaMA-2-7B-16K, Chinese-LLaMA-2-13B-16K, Chinese-Alpaca-2-7B-16K, Chinese-Alpaca-2-13B-16K
2、可視化本項(xiàng)目以及一期項(xiàng)目推出的所有大模型之間的關(guān)系
?
3、效果評(píng)估
為了評(píng)測(cè)相關(guān)模型的效果,本項(xiàng)目分別進(jìn)行了生成效果評(píng)測(cè)和客觀效果評(píng)測(cè)(NLU類(lèi)),從不同角度對(duì)大模型進(jìn)行評(píng)估。需要注意的是,綜合評(píng)估大模型能力仍然是亟待解決的重要課題,單個(gè)數(shù)據(jù)集的結(jié)果并不能綜合評(píng)估模型性能。推薦用戶(hù)在自己關(guān)注的任務(wù)上進(jìn)行測(cè)試,選擇適配相關(guān)任務(wù)的模型。
(1)、生成效果評(píng)測(cè)
為了更加直觀地了解模型的生成效果,本項(xiàng)目仿照Fastchat Chatbot Arena推出了模型在線(xiàn)對(duì)戰(zhàn)平臺(tái),可瀏覽和評(píng)測(cè)模型回復(fù)質(zhì)量。對(duì)戰(zhàn)平臺(tái)提供了勝率、Elo評(píng)分等評(píng)測(cè)指標(biāo),并且可以查看兩兩模型的對(duì)戰(zhàn)勝率等結(jié)果。題庫(kù)來(lái)自于一期項(xiàng)目人工制作的200題,以及在此基礎(chǔ)上額外增加的題目。生成回復(fù)具有隨機(jī)性,受解碼超參、隨機(jī)種子等因素影響,因此相關(guān)評(píng)測(cè)并非絕對(duì)嚴(yán)謹(jǐn),結(jié)果僅供晾曬參考,歡迎自行體驗(yàn)。部分生成樣例請(qǐng)查看examples目錄。
?? 模型競(jìng)技場(chǎng):http://llm-arena.ymcui.com
系統(tǒng) | 對(duì)戰(zhàn)勝率(無(wú)平局) ↓ | Elo評(píng)分 |
---|---|---|
Chinese-Alpaca-2-13B-16K | 86.84% | 1580 |
Chinese-Alpaca-2-13B | 72.01% | 1579 |
Chinese-Alpaca-Pro-33B | 64.87% | 1548 |
Chinese-Alpaca-2-7B | 64.11% | 1572 |
Chinese-Alpaca-Pro-7B | 62.05% | 1500 |
Chinese-Alpaca-2-7B-16K | 61.67% | 1540 |
Chinese-Alpaca-Pro-13B | 61.26% | 1567 |
Chinese-Alpaca-Plus-33B | 31.29% | 1401 |
Chinese-Alpaca-Plus-13B | 23.43% | 1329 |
Chinese-Alpaca-Plus-7B | 20.92% | 1379 |
Note
以上結(jié)果截至2023年9月1日。最新結(jié)果請(qǐng)進(jìn)入??競(jìng)技場(chǎng)進(jìn)行查看。
(2)、客觀效果評(píng)測(cè):C-Eval
C-Eval是一個(gè)全面的中文基礎(chǔ)模型評(píng)估套件,其中驗(yàn)證集和測(cè)試集分別包含1.3K和12.3K個(gè)選擇題,涵蓋52個(gè)學(xué)科。實(shí)驗(yàn)結(jié)果以“zero-shot / 5-shot”進(jìn)行呈現(xiàn)。C-Eval推理代碼請(qǐng)參考本項(xiàng)目:??GitHub Wiki
LLaMA Models | Valid | Test | Alpaca Models | Valid | Test |
---|---|---|---|---|---|
Chinese-LLaMA-2-13B | 40.6 / 42.7 | 38.0 / 41.6 | Chinese-Alpaca-2-13B | 44.3 / 45.9 | 42.6 / 44.0 |
Chinese-LLaMA-2-7B | 28.2 / 36.0 | 30.3 / 34.2 | Chinese-Alpaca-2-7B | 41.3 / 42.9 | 40.3 / 39.5 |
Chinese-LLaMA-Plus-33B | 37.4 / 40.0 | 35.7 / 38.3 | Chinese-Alpaca-Plus-33B | 46.5 / 46.3 | 44.9 / 43.5 |
Chinese-LLaMA-Plus-13B | 27.3 / 34.0 | 27.8 / 33.3 | Chinese-Alpaca-Plus-13B | 43.3 / 42.4 | 41.5 / 39.9 |
Chinese-LLaMA-Plus-7B | 27.3 / 28.3 | 26.9 / 28.4 | Chinese-Alpaca-Plus-7B | 36.7 / 32.9 | 36.4 / 32.3 |
(3)、客觀效果評(píng)測(cè):CMMLU
CMMLU是另一個(gè)綜合性中文評(píng)測(cè)數(shù)據(jù)集,專(zhuān)門(mén)用于評(píng)估語(yǔ)言模型在中文語(yǔ)境下的知識(shí)和推理能力,涵蓋了從基礎(chǔ)學(xué)科到高級(jí)專(zhuān)業(yè)水平的67個(gè)主題,共計(jì)11.5K個(gè)選擇題。CMMLU推理代碼請(qǐng)參考本項(xiàng)目:??GitHub Wiki
LLaMA Models | Test (0/few-shot) | Alpaca Models | Test (0/few-shot) |
---|---|---|---|
Chinese-LLaMA-2-13B | 38.9 / 42.5 | Chinese-Alpaca-2-13B | 43.2 / 45.5 |
Chinese-LLaMA-2-7B | 27.9 / 34.1 | Chinese-Alpaca-2-7B | 40.0 / 41.8 |
Chinese-LLaMA-Plus-33B | 35.2 / 38.8 | Chinese-Alpaca-Plus-33B | 46.6 / 45.3 |
Chinese-LLaMA-Plus-13B | 29.6 / 34.0 | Chinese-Alpaca-Plus-13B | 40.6 / 39.9 |
Chinese-LLaMA-Plus-7B | 25.4 / 26.3 | Chinese-Alpaca-Plus-7B | 36.8 / 32.6 |
(3)、長(zhǎng)上下文版模型(16K)評(píng)測(cè)
LongBench是一個(gè)大模型長(zhǎng)文本理解能力的評(píng)測(cè)基準(zhǔn),由6大類(lèi)、20個(gè)不同的任務(wù)組成,多數(shù)任務(wù)的平均長(zhǎng)度在5K-15K之間,共包含約4.75K條測(cè)試數(shù)據(jù)。以下是本項(xiàng)目16K系列模型在該中文任務(wù)(含代碼任務(wù))上的評(píng)測(cè)效果。LongBench推理代碼請(qǐng)參考本項(xiàng)目:??GitHub Wiki
Models | 單文檔QA | 多文檔QA | 摘要 | Few-shot學(xué)習(xí) | 代碼補(bǔ)全 | 合成任務(wù) | Avg |
---|---|---|---|---|---|---|---|
Chinese-Alpaca-2-13B-16K | 48.1 | 26.0 | 12.8 | 23.3 | 45.5 | 21.5 | 29.5 |
Chinese-Alpaca-2-13B | 38.4 | 20.0 | 12.2 | 18.0 | 46.2 | 9.0 | 24.0 |
Chinese-Alpaca-2-7B-16K | 46.6 | 23.6 | 14.5 | 29.0 | 47.1 | 9.0 | 28.3 |
Chinese-Alpaca-2-7B | 32.0 | 17.2 | 11.5 | 21.5 | 48.8 | 5.0 | 22.7 |
Chinese-LLaMA-2-13B-16K | 37.3 | 18.1 | 3.4 | 30.8 | 13.0 | 3.0 | 17.6 |
Chinese-LLaMA-2-13B | 26.7 | 14.0 | 4.4 | 16.3 | 9.8 | 5.5 | 12.8 |
Chinese-LLaMA-2-7B-16K | 33.7 | 16.5 | 5.3 | 24.3 | 9.9 | 4.2 | 15.6 |
Chinese-LLaMA-2-7B | 20.7 | 14.5 | 6.5 | 12.8 | 11.5 | 5.3 | 11.9 |
(4)、量化效果評(píng)測(cè)
以Chinese-LLaMA-2-7B為例,對(duì)比不同精度下的模型大小、PPL(困惑度)、C-Eval效果,方便用戶(hù)了解量化精度損失。PPL以4K上下文大小計(jì)算,C-Eval匯報(bào)的是valid集合上zero-shot和5-shot結(jié)果。
精度 | 模型大小 | PPL | C-Eval |
---|---|---|---|
FP16 | 12.9 GB | 9.373 | 28.2 / 36.0 |
8-bit量化 | 6.8 GB | 9.476 | 26.8 / 35.4 |
4-bit量化 | 3.7 GB | 10.132 | 25.5 / 32.8 |
特別地,以下是在llama.cpp下不同量化方法的評(píng)測(cè)數(shù)據(jù),供用戶(hù)參考,速度以ms/tok計(jì),測(cè)試設(shè)備為M1 Max。具體細(xì)節(jié)見(jiàn)??GitHub Wiki
llama.cpp | F16 | Q2_K | Q3_K | Q4_0 | Q4_1 | Q4_K | Q5_0 | Q5_1 | Q5_K | Q6_K | Q8_0 |
---|---|---|---|---|---|---|---|---|---|---|---|
PPL | 9.128 | 11.107 | 9.576 | 9.476 | 9.576 | 9.240 | 9.156 | 9.213 | 9.168 | 9.133 | 9.129 |
Size | 12.91G | 2.41G | 3.18G | 3.69G | 4.08G | 3.92G | 4.47G | 4.86G | 4.59G | 5.30G | 6.81G |
CPU Speed | 117 | 42 | 51 | 39 | 44 | 43 | 48 | 51 | 50 | 54 | 65 |
GPU Speed | 53 | 19 | 21 | 17 | 18 | 20 | x | x | 25 | 26 | x |
Chinese-LLaMA-Alpaca-2的安裝
1、下載模型
1.1、模型選擇指引
以下是中文LLaMA-2和Alpaca-2模型的對(duì)比以及建議使用場(chǎng)景。如需聊天交互,請(qǐng)選擇Alpaca而不是LLaMA。
對(duì)比項(xiàng) | 中文LLaMA-2 | 中文Alpaca-2 |
---|---|---|
模型類(lèi)型 | 基座模型 | 指令/Chat模型(類(lèi)ChatGPT) |
已開(kāi)源大小 | 7B、13B | 7B、13B |
訓(xùn)練類(lèi)型 | Causal-LM (CLM) | 指令精調(diào) |
訓(xùn)練方式 | LoRA + 全量emb/lm-head | LoRA + 全量emb/lm-head |
基于什么模型訓(xùn)練 | 原版Llama-2(非chat版) | 中文LLaMA-2 |
訓(xùn)練語(yǔ)料 | 無(wú)標(biāo)注通用語(yǔ)料(120G純文本) | 有標(biāo)注指令數(shù)據(jù)(500萬(wàn)條) |
詞表大小[1] | 55,296 | 55,296 |
上下文長(zhǎng)度[2] | 標(biāo)準(zhǔn)版:4K(12K-18K) 長(zhǎng)上下文版:16K(24K-32K) |
標(biāo)準(zhǔn)版:4K(12K-18K) 長(zhǎng)上下文版:16K(24K-32K) |
輸入模板 | 不需要 | 需要套用特定模板[3],類(lèi)似Llama-2-Chat |
適用場(chǎng)景 | 文本續(xù)寫(xiě):給定上文,讓模型生成下文 | 指令理解:?jiǎn)柎稹?xiě)作、聊天、交互等 |
不適用場(chǎng)景 | 指令理解 、多輪聊天等 | 文本無(wú)限制自由生成 |
Note
[1]?本項(xiàng)目一代模型和二代模型的詞表不同,請(qǐng)勿混用。二代LLaMA和Alpaca的詞表相同。
[2]?括號(hào)內(nèi)表示基于NTK上下文擴(kuò)展支持的最大長(zhǎng)度。
[3]?Alpaca-2采用了Llama-2-chat系列模板(格式相同,提示語(yǔ)不同),而不是一代Alpaca的模板,請(qǐng)勿混用。
1.2、完整模型下載
以下是完整版模型,直接下載即可使用,無(wú)需其他合并步驟。推薦網(wǎng)絡(luò)帶寬充足的用戶(hù)。
模型名稱(chēng) | 類(lèi)型 | 大小 | 下載地址 |
---|---|---|---|
Chinese-LLaMA-2-13B | 基座模型 | 24.7 GB | [百度]?[Google]?[??HF] |
Chinese-LLaMA-2-7B | 基座模型 | 12.9 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-13B | 指令模型 | 24.7 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-7B | 指令模型 | 12.9 GB | [百度]?[Google]?[??HF] |
以下是長(zhǎng)上下文版模型,推薦以長(zhǎng)文本為主的下游任務(wù)使用,否則建議使用上述標(biāo)準(zhǔn)版。
模型名稱(chēng) | 類(lèi)型 | 大小 | 下載地址 |
---|---|---|---|
Chinese-LLaMA-2-13B-16K | 基座模型 | 24.7 GB | [百度]?[Google]?[??HF] |
Chinese-LLaMA-2-7B-16K | 基座模型 | 12.9 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-13B-16K ?? | 指令模型 | 24.7 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-7B-16K ?? | 指令模型 | 12.9 GB | [百度]?[Google]?[??HF] |
Important
使用長(zhǎng)上下文模型推理時(shí),必須按照文檔要求進(jìn)行設(shè)置,具體請(qǐng)參考各推理部署工具的Wiki。
1.3、LoRA模型下載
以下是LoRA模型(含emb/lm-head),與上述完整模型一一對(duì)應(yīng)。需要注意的是LoRA模型無(wú)法直接使用,必須按照教程與重構(gòu)模型進(jìn)行合并。推薦網(wǎng)絡(luò)帶寬不足,手頭有原版Llama-2且需要輕量下載的用戶(hù)。
模型名稱(chēng) | 類(lèi)型 | 合并所需基模型 | 大小 | LoRA下載地址 |
---|---|---|---|---|
Chinese-LLaMA-2-LoRA-13B | 基座模型 | Llama-2-13B-hf | 1.5 GB | [百度]?[Google]?[??HF] |
Chinese-LLaMA-2-LoRA-7B | 基座模型 | Llama-2-7B-hf | 1.1 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-LoRA-13B | 指令模型 | Llama-2-13B-hf | 1.5 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-LoRA-7B | 指令模型 | Llama-2-7B-hf | 1.1 GB | [百度]?[Google]?[??HF] |
以下是長(zhǎng)上下文版模型,推薦以長(zhǎng)文本為主的下游任務(wù)使用,否則建議使用上述標(biāo)準(zhǔn)版。
模型名稱(chēng) | 類(lèi)型 | 合并所需基模型 | 大小 | LoRA下載地址 |
---|---|---|---|---|
Chinese-LLaMA-2-LoRA-13B-16K | 基座模型 | Llama-2-13B-hf | 1.5 GB | [百度]?[Google]?[??HF] |
Chinese-LLaMA-2-LoRA-7B-16K | 基座模型 | Llama-2-7B-hf | 1.1 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-LoRA-13B-16K ?? | 指令模型 | Llama-2-13B-hf | 1.5 GB | [百度]?[Google]?[??HF] |
Chinese-Alpaca-2-LoRA-7B-16K ?? | 指令模型 | Llama-2-7B-hf | 1.1 GB | [百度]?[Google]?[??HF] |
(1)、LoRA模型無(wú)法單獨(dú)使用,必須與原版Llama-2進(jìn)行合并才能轉(zhuǎn)為完整模型
Important
LoRA模型無(wú)法單獨(dú)使用,必須與原版Llama-2進(jìn)行合并才能轉(zhuǎn)為完整模型。請(qǐng)通過(guò)以下方法對(duì)模型進(jìn)行合并。
- 在線(xiàn)轉(zhuǎn)換:Colab用戶(hù)可利用本項(xiàng)目提供的notebook進(jìn)行在線(xiàn)轉(zhuǎn)換并量化模型
- 手動(dòng)轉(zhuǎn)換:離線(xiàn)方式轉(zhuǎn)換,生成不同格式的模型,以便進(jìn)行量化或進(jìn)一步精調(diào)
2、模型訓(xùn)練與精調(diào)
2.1、預(yù)訓(xùn)練:基于deepspeed框架+Llama-2增量訓(xùn)練+采用120G純文本+ 啟用FlashAttention-2,默認(rèn)fp16訓(xùn)練
- 在原版Llama-2的基礎(chǔ)上,利用大規(guī)模無(wú)標(biāo)注數(shù)據(jù)進(jìn)行增量訓(xùn)練,得到Chinese-LLaMA-2系列基座模型
- 訓(xùn)練數(shù)據(jù)采用了一期項(xiàng)目中Plus版本模型一致的數(shù)據(jù),其總量約120G純文本文件
- 訓(xùn)練代碼參考了??transformers中的run_clm.py,使用方法見(jiàn)??預(yù)訓(xùn)練腳本W(wǎng)iki
(1)、訓(xùn)練步驟
訓(xùn)練腳本:scripts/training/run_clm_pt_with_peft.py
進(jìn)入項(xiàng)目的scripts/training
目錄,運(yùn)行bash run_pt.sh
進(jìn)行指令精調(diào),默認(rèn)使用單卡。運(yùn)行前用戶(hù)應(yīng)先修改腳本并指定相關(guān)參數(shù),腳本中的相關(guān)參數(shù)值僅供調(diào)試參考。run_pt.sh
的內(nèi)容如下:
部分參數(shù)的解釋如下:
-
--dataset_dir
: 預(yù)訓(xùn)練數(shù)據(jù)的目錄,可包含多個(gè)以txt
結(jié)尾的純文本文件 -
--data_cache_dir
: 指定一個(gè)存放數(shù)據(jù)緩存文件的目錄 -
--flash_attn
: 啟用FlashAttention-2加速訓(xùn)練 -
--load_in_kbits
: 可選擇參數(shù)為16/8/4,即使用fp16或8bit/4bit量化進(jìn)行模型訓(xùn)練,默認(rèn)fp16訓(xùn)練。
這里列出的其他訓(xùn)練相關(guān)超參數(shù),尤其是學(xué)習(xí)率以及和total batch size大小相關(guān)參數(shù)僅供參考。請(qǐng)?jiān)趯?shí)際使用時(shí)根據(jù)數(shù)據(jù)情況以及硬件條件進(jìn)行配置。
########參數(shù)設(shè)置########
lr=2e-4
lora_rank=64
lora_alpha=128
lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save="embed_tokens,lm_head"
lora_dropout=0.05
pretrained_model=path/to/hf/llama-2/dir
chinese_tokenizer_path=path/to/chinese/llama-2/tokenizer/dir
dataset_dir=path/to/pt/data/dir
data_cache=temp_data_cache_dir
per_device_train_batch_size=1
gradient_accumulation_steps=1
output_dir=output_dir
block_size=512
deepspeed_config_file=ds_zero2_no_offload.json
########啟動(dòng)命令########
torchrun --nnodes 1 --nproc_per_node 1 run_clm_pt_with_peft.py \
--deepspeed ${deepspeed_config_file} \
--model_name_or_path ${pretrained_model} \
--tokenizer_name_or_path ${chinese_tokenizer_path} \
--dataset_dir ${dataset_dir} \
--data_cache_dir ${data_cache} \
--per_device_train_batch_size ${per_device_train_batch_size} \
--do_train \
--seed $RANDOM \
--fp16 \
--num_train_epochs 1 \
--lr_scheduler_type cosine \
--learning_rate ${lr} \
--warmup_ratio 0.05 \
--weight_decay 0.01 \
--logging_strategy steps \
--logging_steps 10 \
--save_strategy steps \
--save_total_limit 3 \
--save_steps 500 \
--gradient_accumulation_steps ${gradient_accumulation_steps} \
--preprocessing_num_workers 8 \
--block_size ${block_size} \
--output_dir ${output_dir} \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--lora_rank ${lora_rank} \
--lora_alpha ${lora_alpha} \
--trainable ${lora_trainable} \
--modules_to_save ${modules_to_save} \
--lora_dropout ${lora_dropout} \
--torch_dtype float16 \
--load_in_kbits 16 \
--gradient_checkpointing \
--ddp_find_unused_parameters False
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
https://yunyaniu.blog.csdn.net/article/details/132613501
(2)、支持的訓(xùn)練模式:基于原版LLaMA-2訓(xùn)練中文LLaMA-2 LoRA、基于中文LLaMA-2/Alpaca-2繼續(xù)預(yù)訓(xùn)練(在新的LoRA上)
【務(wù)必仔細(xì)核對(duì)】?以下是腳本支持的訓(xùn)練模式,請(qǐng)根據(jù)相應(yīng)情況傳入model_name_or_path
。本項(xiàng)目中LLaMA-2模型與Alpaca-2模型使用相同的tokenizer,不再進(jìn)行區(qū)分。不支持未在表格中的模式,如要修改請(qǐng)自行debug。
用途 | model_name_or_path | tokenizer_name_or_path | 最終模型詞表大小 |
---|---|---|---|
基于原版LLaMA-2訓(xùn)練中文LLaMA-2 LoRA | 原版HF格式的LLaMA-2 | 中文LLaMA-2的tokenizer(55296) | 55296 |
基于中文LLaMA-2,在新的LoRA上繼續(xù)預(yù)訓(xùn)練 | HF格式的完整中文LLaMA-2 | 中文LLaMA-2的tokenizer(55296) | 55296 |
基于中文Alpaca-2,在新的LoRA上繼續(xù)預(yù)訓(xùn)練 | HF格式的完整中文Alpaca-2 | 中文LLaMA-2的tokenizer(55296) | 55296 |
(3)、關(guān)于顯存占用:只訓(xùn)練LoRA參數(shù)、減小block_size
、開(kāi)啟gradient_checkpointing(但會(huì)降速)
- 如果機(jī)器的顯存比較緊張,可以刪去腳本中的
--modules_to_save ${modules_to_save} \
, 即不訓(xùn)練embed_tokens和lm_head(這兩部分參數(shù)量較大),只訓(xùn)練LoRA參數(shù)。- 僅可在基于中文LLaMA-2或Alpaca-2的基礎(chǔ)上訓(xùn)練時(shí)進(jìn)行此操作
-
減小
block_size
也可降低訓(xùn)練時(shí)顯存占用,如可將block_size
設(shè)置為256。 - 開(kāi)啟gradient_checkpointing可有效降低顯存占用,但是會(huì)拖慢訓(xùn)練速度。
(4)、使用多機(jī)多卡訓(xùn)練
請(qǐng)參考以下啟動(dòng)方式:
torchrun \
--nnodes ${num_nodes} \
--nproc_per_node ${num_gpu_per_node}
--node_rank ${node_rank} \
--master_addr ${master_addr} \
--master_port ${master_port} \
run_clm_pt_with_peft.py \
--deepspeed ${deepspeed_config_file} \
...
(5)、訓(xùn)練后文件整理
訓(xùn)練后的LoRA權(quán)重和配置存放于${output_dir}/pt_lora_model
,可用于后續(xù)的合并流程。
2.2、指令精調(diào):基于deepspeed框架+Chinese-LLaMA-2進(jìn)行指令精調(diào)+500萬(wàn)條(Alpaca格式的json文件)+ 啟用FlashAttention-2,默認(rèn)fp16訓(xùn)練
- 在Chinese-LLaMA-2的基礎(chǔ)上,利用有標(biāo)注指令數(shù)據(jù)進(jìn)行進(jìn)一步精調(diào),得到Chinese-Alpaca-2系列模型
- 訓(xùn)練數(shù)據(jù)采用了一期項(xiàng)目中Pro版本模型使用的指令數(shù)據(jù),其總量約500萬(wàn)條指令數(shù)據(jù)(相比一期略增加)
- 訓(xùn)練代碼參考了Stanford Alpaca項(xiàng)目中數(shù)據(jù)集處理的相關(guān)部分,使用方法見(jiàn)??指令精調(diào)腳本W(wǎng)iki
指令精調(diào)代碼腳本:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/blob/main/scripts/training/run_clm_sft_with_peft.py
(0)、??重要提示??
-
該代碼僅適用于特定PEFT版本,運(yùn)行腳本前請(qǐng)依照requirements安裝要求的依賴(lài)版本
-
如果使用其他版本的PEFT或修改部分訓(xùn)練參數(shù)設(shè)置(如不使用deepspeed),不能保證模型可以正常訓(xùn)練。
-
運(yùn)行前確保拉取倉(cāng)庫(kù)最新版代碼:
git pull
(1)、訓(xùn)練步驟
進(jìn)入項(xiàng)目的scripts/training
目錄,運(yùn)行bash run_sft.sh
進(jìn)行指令精調(diào),默認(rèn)使用單卡。運(yùn)行前用戶(hù)應(yīng)先修改腳本并指定相關(guān)參數(shù),腳本中的相關(guān)參數(shù)值僅供調(diào)試參考。run_sft.sh的內(nèi)容如下:
其中一些參數(shù)的含義不言自明。部分參數(shù)的解釋如下:
-
--tokenizer_name_or_path
: Chinese-LLaMA-2 tokenizer所在的目錄。???本項(xiàng)目中LLaMA-2模型與Alpaca-2模型使用相同的tokenizer,不再進(jìn)行區(qū)分。 -
--dataset_dir
: 指令精調(diào)數(shù)據(jù)的目錄,包含一個(gè)或多個(gè)以json
結(jié)尾的Stanford Alpaca格式的指令精調(diào)數(shù)據(jù)文件 -
--validation_file
: 用作驗(yàn)證集的單個(gè)指令精調(diào)文件,以json
結(jié)尾,同樣遵循Stanford Alpaca格式 -
--flash_attn
: 啟用FlashAttention-2加速訓(xùn)練 -
--load_in_kbits
: 可選擇參數(shù)為16/8/4,即使用fp16或8bit/4bit量化進(jìn)行模型訓(xùn)練,默認(rèn)fp16訓(xùn)練。
這里列出的其他訓(xùn)練相關(guān)超參數(shù)(尤其是學(xué)習(xí)率,以及和total batch size大小相關(guān)的參數(shù))僅供參考。請(qǐng)?jiān)趯?shí)際使用時(shí)根據(jù)數(shù)據(jù)情況以及硬件條件進(jìn)行配置。
########參數(shù)部分########
lr=1e-4
lora_rank=64
lora_alpha=128
lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save="embed_tokens,lm_head"
lora_dropout=0.05
pretrained_model=path/to/hf/llama-2/or/merged/llama-2/dir/or/model_id
chinese_tokenizer_path=path/to/chinese/llama-2/tokenizer/dir
dataset_dir=path/to/sft/data/dir
per_device_train_batch_size=1
per_device_eval_batch_size=1
gradient_accumulation_steps=1
output_dir=output_dir
peft_model=path/to/peft/model/dir
validation_file=validation_file_name
max_seq_length=512
deepspeed_config_file=ds_zero2_no_offload.json
########啟動(dòng)命令########
torchrun --nnodes 1 --nproc_per_node 1 run_clm_sft_with_peft.py \
--deepspeed ${deepspeed_config_file} \
--model_name_or_path ${pretrained_model} \
--tokenizer_name_or_path ${chinese_tokenizer_path} \
--dataset_dir ${dataset_dir} \
--per_device_train_batch_size ${per_device_train_batch_size} \
--per_device_eval_batch_size ${per_device_eval_batch_size} \
--do_train \
--do_eval \
--seed $RANDOM \
--fp16 \
--num_train_epochs 2 \
--lr_scheduler_type cosine \
--learning_rate ${lr} \
--warmup_ratio 0.03 \
--weight_decay 0 \
--logging_strategy steps \
--logging_steps 10 \
--save_strategy steps \
--save_total_limit 3 \
--evaluation_strategy steps \
--eval_steps 250 \
--save_steps 500 \
--gradient_accumulation_steps ${gradient_accumulation_steps} \
--preprocessing_num_workers 8 \
--max_seq_length ${max_seq_length} \
--output_dir ${output_dir} \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--lora_rank ${lora_rank} \
--lora_alpha ${lora_alpha} \
--trainable ${lora_trainable} \
--modules_to_save ${modules_to_save} \
--lora_dropout ${lora_dropout} \
--torch_dtype float16 \
--validation_file ${validation_file} \
--peft_path ${peft_model} \
--load_in_kbits
Stanford Alpaca數(shù)據(jù)集的格式如下:
[
{"instruction" : ...,
"input" : ...,
"output" : ...},
...
]
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
https://yunyaniu.blog.csdn.net/article/details/132958044
(2)、支持的訓(xùn)練模模式:基于Chinese-LLaMA-2 LoRA進(jìn)行指令精調(diào)、基于Chinese-LLaMA-2訓(xùn)練全新的指令精調(diào)LoRA權(quán)重
該腳本支持以下訓(xùn)練模式。不支持未在表格中的模式,如要修改請(qǐng)自行debug。
模型 | model_name_or_path | peft_path | lora params |
---|---|---|---|
基于Chinese-LLaMA-2 LoRA進(jìn)行指令精調(diào) | 原版HF格式的LLaMA-2 | Chinese-LLaMA-2 LoRA | 無(wú)需指定 |
基于Chinese-Alpaca-2 LoRA進(jìn)行指令精調(diào) | 原版HF格式的LLaMA-2 | Chinese-Alpaca-2 LoRA | 無(wú)需指定 |
基于Chinese-LLaMA-2訓(xùn)練全新的指令精調(diào)LoRA權(quán)重 | 完整(合并Chinese-LLaMA-2-LoRA后)的HF格式Chinese-LLaMA-2模型 | 勿提供此參數(shù),并且從腳本中刪除?--peft_path
|
需設(shè)置--lora_rank 、--lora_alpha 、--lora_dropout 、--trainable 和--modules_to_save 參數(shù) |
基于Chinese-Alpaca-2訓(xùn)練全新的指令精調(diào)LoRA權(quán)重 | 完整(合并Chinese-Alapca-2-LoRA后)的HF格式Chinese-Alpaca-2模型 | 勿提供此參數(shù),并且從腳本中刪除?--peft_path
|
需設(shè)置--lora_rank 、--lora_alpha 、--lora_dropout 、--trainable 和--modules_to_save 參數(shù) |
(3)、關(guān)于顯存占用:只訓(xùn)練LoRA參數(shù)(單卡21G)、減小max_seq_length
- 默認(rèn)配置訓(xùn)練llama,單卡24G會(huì)OOM,可以刪去腳本中的
--modules_to_save ${modules_to_save} \
, 即不訓(xùn)練embed_tokens和lm_head(這兩部分參數(shù)量較大),只訓(xùn)練LoRA參數(shù),單卡使用顯存約21G。- 如果是在已有LoRA基礎(chǔ)上繼續(xù)微調(diào),需要修改
peft_path
下的adapter_config.json
文件,改為"modules_to_save": null
- 如果是在已有LoRA基礎(chǔ)上繼續(xù)微調(diào),需要修改
-
減小
max_seq_length
也可降低訓(xùn)練時(shí)顯存占用,可將max_seq_length
設(shè)置為256或者更短。
(4)、使用多機(jī)多卡
請(qǐng)參考以下啟動(dòng)方式:
torchrun \
--nnodes ${num_nodes} \
--nproc_per_node ${num_gpu_per_node}
--node_rank ${node_rank} \
--master_addr ${master_addr} \
--master_port ${master_port} \
run_clm_sft_with_peft.py \
...
(5)、訓(xùn)練后文件整理
訓(xùn)練后的LoRA權(quán)重和配置存放${output_dir}/sft_lora_model
,可用于后續(xù)的合并流程。
3、推理與部署
本項(xiàng)目中的相關(guān)模型主要支持以下量化、推理和部署方式,具體內(nèi)容請(qǐng)參考對(duì)應(yīng)教程。
工具 | 特點(diǎn) | CPU | GPU | 量化 | GUI | API | vLLM§ | 16K? | 教程 |
---|---|---|---|---|---|---|---|---|---|
llama.cpp | 豐富的量化選項(xiàng)和高效本地推理 | ? | ? | ? | ? | ? | ? | ? | link |
??Transformers | 原生transformers推理接口 | ? | ? | ? | ? | ? | ? | ? | link |
Colab Demo | 在Colab中啟動(dòng)交互界面 | ? | ? | ? | ? | ? | ? | ? | link |
仿OpenAI API調(diào)用 | 仿OpenAI API接口的服務(wù)器Demo | ? | ? | ? | ? | ? | ? | ? | link |
text-generation-webui | 前端Web UI界面的部署方式 | ? | ? | ? | ? | ?? | ? | ? | link |
LangChain | 適合二次開(kāi)發(fā)的大模型應(yīng)用開(kāi)源框架 | ?? | ? | ?? | ? | ? | ? | ? | link |
privateGPT | 基于LangChain的多文檔本地問(wèn)答框架 | ? | ? | ? | ? | ? | ? | ? | link |
Note
??工具支持該特性,但教程中未實(shí)現(xiàn),詳細(xì)說(shuō)明請(qǐng)參考對(duì)應(yīng)官方文檔
??指是否支持16K長(zhǎng)上下文模型(需要第三方庫(kù)支持自定義RoPE)
§?vLLM后端不支持16K長(zhǎng)上下文模型
T1、llama.cpp:豐富的量化選項(xiàng)和高效本地推理
教程地址:llamacpp_zh · ymcui/Chinese-LLaMA-Alpaca-2 Wiki · GitHub
T2、Transformers:原生transformers推理接口
教程地址:
T3、Colab Demo:在Colab中啟動(dòng)交互界面
教程地址:
T4、仿OpenAI API調(diào)用:仿OpenAI API接口的服務(wù)器Demo
教程地址:
T5、text-generation-webui:前端Web UI界面的部署方式
教程地址:
T6、LangChain:適合二次開(kāi)發(fā)的大模型應(yīng)用開(kāi)源框架
教程地址:
T7、privateGPT:基于LangChain的多文檔本地問(wèn)答框架
教程地址:privategpt_zh · ymcui/Chinese-LLaMA-Alpaca-2 Wiki · GitHub
Chinese-LLaMA-Alpaca-2的案例實(shí)戰(zhàn)應(yīng)用
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(監(jiān)督式任務(wù)的數(shù)據(jù)收集器+指令數(shù)據(jù)集【json格式】)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_sft_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的che_一個(gè)處女座的程序猿的博客-CSDN博客
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的checkpoint+加載預(yù)訓(xùn)練模型和tokenizer)→數(shù)據(jù)預(yù)處理(處理【標(biāo)記化+分塊】+切分txt數(shù)據(jù)集)→優(yōu)化模型配置(量化模塊+匹配模型vocabulary大小與tokenizer+初始化PEFT模型【LoRA】+梯度累積checkpointing等)→模型訓(xùn)練(繼續(xù)訓(xùn)練+評(píng)估指標(biāo)+自動(dòng)保存中間訓(xùn)練結(jié)果)/模型評(píng)估(+PPL指標(biāo))
LLMs之Chinese-LLaMA-Alpaca-2:源碼解讀(run_clm_pt_with_peft.py文件)—模型訓(xùn)練前置工作(參數(shù)解析+配置日志)→模型初始化(檢測(cè)是否存在訓(xùn)練過(guò)的chec_一個(gè)處女座的程序猿的博客-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716390.html
到了這里,關(guān)于LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的簡(jiǎn)介、安裝、案例實(shí)戰(zhàn)應(yīng)用之詳細(xì)攻略的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!