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