原創(chuàng) 象量AI 開(kāi)源AI項(xiàng)目落地 2024-01-18 22:42 發(fā)表于山東 項(xiàng)目簡(jiǎn)介 “ChatLM-mini-Chinese”是一個(gè)極小的中文對(duì)話(huà)模型,傳統(tǒng)大型語(yǔ)言模型往往參數(shù)龐大,導(dǎo)致在消費(fèi)級(jí)顯卡上推理很慢。這個(gè)項(xiàng)目不僅提供了一種更為輕量級(jí)的模型,還包含了整個(gè)模型開(kāi)發(fā)過(guò)程的詳細(xì)說(shuō)明,如數(shù)據(jù)集來(lái)源、數(shù)據(jù)清洗、tokenizer訓(xùn)練、模型預(yù)訓(xùn)練、SFT指令微調(diào)和RLHF優(yōu)化等。極大地降低了個(gè)人或小團(tuán)隊(duì)嘗試自行訓(xùn)練語(yǔ)言模型的門(mén)檻。 掃碼加入交流群 獲得更多技術(shù)支持和交流 ChatLM-mini-Chinese為中文對(duì)話(huà)小模型,模型參數(shù)只有0.2B(算共享權(quán)重約210M),可以在最低4GB顯存的機(jī)器進(jìn)行預(yù)訓(xùn)練(batch_size=1,fp16或者 bf16),float16加載、推理最少只需要512MB顯存。 特性 1.預(yù)訓(xùn)練數(shù)據(jù)集來(lái)源的公開(kāi):明確要求公開(kāi)所有預(yù)訓(xùn)練、SFT(Supervised Fine-Tuning)指令微調(diào)、DPO(Data Preference Optimization)偏好優(yōu)化的數(shù)據(jù)集來(lái)源。 2.使用HuggingfaceNLP框架:該框架包括了transformers、accelerate、trl、peft等多個(gè)組件。 3.自實(shí)現(xiàn)訓(xùn)練器(Trainer): ·支持單機(jī)單卡、單機(jī)多卡的預(yù)訓(xùn)練和SFT微調(diào)。 ·訓(xùn)練過(guò)程可在任意位置停止,并可從停止位置繼續(xù)訓(xùn)練。 4.預(yù)訓(xùn)練的特點(diǎn): ·采用端到端的Text-to-Text方式,非mask掩碼的預(yù)測(cè)預(yù)訓(xùn)練。 ·支持任意位置斷點(diǎn),可從斷點(diǎn)處繼續(xù)訓(xùn)練。 5.數(shù)據(jù)處理和加載優(yōu)化: ·包括數(shù)據(jù)清洗(例如規(guī)范化、基于mini_hash的文檔去重)。 ·數(shù)據(jù)集構(gòu)造及加載優(yōu)化流程。 6.Tokenizer訓(xùn)練: ·多進(jìn)程詞頻統(tǒng)計(jì)。 ·支持sentencepiece和huggingface tokenizers的tokenizer訓(xùn)練。 7.大數(shù)據(jù)集處理: ·流式加載GB級(jí)別的大數(shù)據(jù)集。 ·支持緩沖區(qū)數(shù)據(jù)打亂,減少內(nèi)存和磁盤(pán)占用。 ·在配置為batch_size=1, max_len=320的情況下,支持在16GB內(nèi)存+4GB顯存的機(jī)器上進(jìn)行預(yù)訓(xùn)練。 8.訓(xùn)練日志記錄:記錄訓(xùn)練過(guò)程的日志。 9.SFT微調(diào): ·開(kāi)源SFT數(shù)據(jù)集及數(shù)據(jù)處理過(guò)程。 ·自實(shí)現(xiàn)trainer支持prompt指令微調(diào),支持任意斷點(diǎn)繼續(xù)訓(xùn)練。 ·支持Huggingface trainer的sequence to sequence微調(diào)。 ·支持傳統(tǒng)的低學(xué)習(xí)率,僅訓(xùn)練decoder層的微調(diào)。 10.偏好優(yōu)化: ·使用DPO進(jìn)行全量偏好優(yōu)化。 ·支持使用peft lora進(jìn)行偏好優(yōu)化。 ·支持模型合并,將Lora adapter合并到原始模型中。 11.下游任務(wù)微調(diào): ·finetune_examples提供三元組信息抽取任務(wù)的微調(diào)示例。 ·微調(diào)后的模型對(duì)話(huà)能力保持不變。 數(shù)據(jù)集 1.社區(qū)問(wèn)答: 總量:410萬(wàn)條數(shù)據(jù) 清洗后:260萬(wàn)條數(shù)據(jù) 2.百科類(lèi)問(wèn)答: 總量:140萬(wàn)條數(shù)據(jù) 清洗后:130萬(wàn)條數(shù)據(jù) 3.中國(guó)醫(yī)藥領(lǐng)域問(wèn)答數(shù)據(jù)集: 總量:79萬(wàn)條數(shù)據(jù) 清洗后:79萬(wàn)條數(shù)據(jù) 4.知乎問(wèn)答數(shù)據(jù): 總量:100萬(wàn)條數(shù)據(jù) 清洗后:97萬(wàn)條數(shù)據(jù) 5.belle開(kāi)源的指令訓(xùn)練數(shù)據(jù): 總量:370萬(wàn)行 清洗后:338萬(wàn)行 6.維基百科(Wikipedia)詞條數(shù)據(jù): 使用方式:將詞條拼湊為提示語(yǔ),百科的前N個(gè)詞為回答 清洗后:119萬(wàn)的詞條提示語(yǔ)和回答 數(shù)據(jù)集總覽: 總數(shù)量:1023萬(wàn)條數(shù)據(jù) 預(yù)訓(xùn)練集:930萬(wàn)條數(shù)據(jù) 評(píng)估集:2.5萬(wàn)條數(shù)據(jù)(考慮到解碼速度,故未設(shè)定過(guò)大) 測(cè)試集:90萬(wàn)條數(shù)據(jù) 使用說(shuō)明 ·快速開(kāi)始
·從克隆倉(cāng)庫(kù)代碼開(kāi)始 本項(xiàng)目模型為T(mén)extToText模型,在預(yù)訓(xùn)練階段、SFT階段、RLFH階段的prompt、response等字段,請(qǐng)務(wù)必加上[EOS]句子結(jié)束標(biāo)記。 ·克隆項(xiàng)目 git clone --depth 1 https://github.com/charent/ChatLM-mini-Chinese.gitcd ChatLM-mini-Chinese ·安裝依賴(lài) 本項(xiàng)目推薦使用python 3.10,過(guò)老的python版本可能不兼容所依賴(lài)的第三方庫(kù)。 pip安裝: pip install -r ./requirements.txt 如果pip安裝了CPU版本的pytorch,可以通過(guò)下面的命令安裝CUDA版本的pytorch: # pip 安裝torch + cu118pip3 install torch --index-url https://download.pytorch.org/whl/cu118 conda安裝: conda install --yes --file ./requirements.txt ·下載預(yù)訓(xùn)練模型及模型配置文件 用git命令從Hugging Face Hub下載模型權(quán)重及配置文件,需要先安裝Git LFS,然后運(yùn)行:
也可以直接從Hugging Face Hub倉(cāng)庫(kù)ChatLM-Chinese-0.2B手工下載,將下載的文件移動(dòng)到model_save目錄下即可。 Tokenizer訓(xùn)練 原本打算直接用現(xiàn)成的tokenizer庫(kù)訓(xùn)練的(如sentencepiece),但是數(shù)據(jù)集一大就容易OOM。另外預(yù)訓(xùn)練數(shù)據(jù)集各個(gè)領(lǐng)域的語(yǔ)料不平衡,會(huì)產(chǎn)生很多不必要的合并。最后使用jieba分詞對(duì)所有的預(yù)訓(xùn)練語(yǔ)料切詞后統(tǒng)計(jì)詞頻,只保留出現(xiàn)1500次以上的字、詞,參照PreTrainedTokenizerFast的BPE model的保存格式,構(gòu)造tokenzier,最后轉(zhuǎn)換為PreTrainedTokenizerFast。核心代碼如下,詳細(xì)的處理過(guò)程見(jiàn)utils/train_tokenizer.py。
本項(xiàng)目還提供了使用預(yù)訓(xùn)練模型自帶的tokenizer根據(jù)自己的語(yǔ)料重新訓(xùn)練tokenizer的例子,見(jiàn)train_tokenizer.ipynb。注意,重新訓(xùn)練tokenizer后,預(yù)訓(xùn)練模型的權(quán)重將無(wú)法使用,需要重新訓(xùn)練模型權(quán)重,因?yàn)閠oken對(duì)應(yīng)的id變了。 項(xiàng)目鏈接 https://github.com/charent/ChatLM-mini-Chinese 關(guān)注「開(kāi)源AI項(xiàng)目落地」公眾號(hào) 分享有價(jià)值的開(kāi)源項(xiàng)目,并且致力于A(yíng)i項(xiàng)目的落地。 |
|
來(lái)自: 風(fēng)聲之家 > 《ps》