电竞比分网-中国电竞赛事及体育赛事平台

分享

ChatLM-0.2B:最小的中文大語言模型,消費級顯卡也能推理!

 風聲之家 2024-01-19 發(fā)布于江蘇

原創(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萬條數據

使用說明

·快速開始

from transformers import AutoTokenizer, AutoModelForSeq2SeqLMimport torch
model_id = 'charent/ChatLM-mini-Chinese'device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tokenizer = AutoTokenizer.from_pretrained(model_id)model = AutoModelForSeq2SeqLM.from_pretrained(model_id, trust_remote_code=True).to(device)
txt = '如何評價Apple這家公司?'
encode_ids = tokenizer([txt])input_ids, attention_mask = torch.LongTensor(encode_ids['input_ids']), torch.LongTensor(encode_ids['attention_mask'])
outs = model.my_generate(    input_ids=input_ids.to(device),    attention_mask=attention_mask.to(device),    max_seq_len=256,    search_type='beam',)
outs_txt = tokenizer.batch_decode(outs.cpu().numpy(), skip_special_tokens=True, clean_up_tokenization_spaces=True)print(outs_txt[0])

·從克隆倉庫代碼開始

本項目模型為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,然后運行:

# 使用git命令下載huggingface模型,先安裝[Git LFS],否則下載的模型文件不可用git clone --depth 1 https://huggingface.co/charent/ChatLM-mini-Chinese
mv ChatLM-mini-Chinese model_save

也可以直接從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。

# 構造merge數組words_merge_list = []for word in words_dict.keys():    n = len(word)    if n >= 2:        # a, b切分12345示例:1 2345,  12 345,   123 45,   1234 5        for i in range(1, n):            a, b = ''.join(word[0: i]), ''.join(word[i: ])
           if a in words_dict and b in words_dict:                words_merge_list.append((a, b))

本項目還提供了使用預訓練模型自帶的tokenizer根據自己的語料重新訓練tokenizer的例子,見train_tokenizer.ipynb。注意,重新訓練tokenizer后,預訓練模型的權重將無法使用,需要重新訓練模型權重,因為token對應的id變了。

項目鏈接

https://github.com/charent/ChatLM-mini-Chinese

 關注「開源AI項目落地」公眾號

開源AI項目落地

分享有價值的開源項目,并且致力于Ai項目的落地。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多