2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

ChatLM-0.2B:最小的中文大語言模型,消費(fèi)級(jí)顯卡也能推理!

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

原創(chuàng) 象量AI 開源AI項(xiàng)目落地 2024-01-18 22:42 發(fā)表于山東

項(xiàng)目簡(jiǎn)介

“ChatLM-mini-Chinese”是一個(gè)極小的中文對(duì)話模型,傳統(tǒng)大型語言模型往往參數(shù)龐大,導(dǎo)致在消費(fèi)級(jí)顯卡上推理很慢。這個(gè)項(xiàng)目不僅提供了一種更為輕量級(jí)的模型,還包含了整個(gè)模型開發(fā)過程的詳細(xì)說明,如數(shù)據(jù)集來源、數(shù)據(jù)清洗、tokenizer訓(xùn)練、模型預(yù)訓(xùn)練、SFT指令微調(diào)和RLHF優(yōu)化等。極大地降低了個(gè)人或小團(tuán)隊(duì)嘗試自行訓(xùn)練語言模型的門檻。

掃碼加入交流群

獲得更多技術(shù)支持和交流

ChatLM-mini-Chinese為中文對(duì)話小模型,模型參數(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ù)集來源的公開:明確要求公開所有預(yù)訓(xùn)練、SFT(Supervised Fine-Tuning)指令微調(diào)、DPO(Data Preference Optimization)偏好優(yōu)化的數(shù)據(jù)集來源。

2.使用HuggingfaceNLP框架:該框架包括了transformers、accelerate、trl、peft等多個(gè)組件。

3.自實(shí)現(xiàn)訓(xùn)練器(Trainer):

·支持單機(jī)單卡、單機(jī)多卡的預(yù)訓(xùn)練和SFT微調(diào)。

·訓(xùn)練過程可在任意位置停止,并可從停止位置繼續(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)存和磁盤占用。

·在配置為batch_size=1, max_len=320的情況下,支持在16GB內(nèi)存+4GB顯存的機(jī)器上進(jìn)行預(yù)訓(xùn)練。

8.訓(xùn)練日志記錄:記錄訓(xùn)練過程的日志。

9.SFT微調(diào):

·開源SFT數(shù)據(jù)集及數(shù)據(jù)處理過程。

·自實(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ì)話能力保持不變。

數(shù)據(jù)集

1.社區(qū)問答:

總量:410萬條數(shù)據(jù)

清洗后:260萬條數(shù)據(jù)

2.百科類問答:

總量:140萬條數(shù)據(jù)

清洗后:130萬條數(shù)據(jù)

3.中國(guó)醫(yī)藥領(lǐng)域問答數(shù)據(jù)集:

總量:79萬條數(shù)據(jù)

清洗后:79萬條數(shù)據(jù)

4.知乎問答數(shù)據(jù):

總量:100萬條數(shù)據(jù)

清洗后:97萬條數(shù)據(jù)

5.belle開源的指令訓(xùn)練數(shù)據(jù):

總量:370萬行

清洗后:338萬行

6.維基百科(Wikipedia)詞條數(shù)據(jù):

使用方式:將詞條拼湊為提示語,百科的前N個(gè)詞為回答

清洗后:119萬的詞條提示語和回答

數(shù)據(jù)集總覽:

總數(shù)量:1023萬條數(shù)據(jù)

預(yù)訓(xùn)練集:930萬條數(shù)據(jù)

評(píng)估集:2.5萬條數(shù)據(jù)(考慮到解碼速度,故未設(shè)定過大)

測(cè)試集:90萬條數(shù)據(jù)

使用說明

·快速開始

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 = '如何評(píng)價(jià)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])

·從克隆倉庫代碼開始

本項(xiàng)目模型為TextToText模型,在預(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

·安裝依賴

本項(xiàng)目推薦使用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

·下載預(yù)訓(xùn)練模型及模型配置文件

用git命令從Hugging Face Hub下載模型權(quán)重及配置文件,需要先安裝Git LFS,然后運(yùn)行:

# 使用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手工下載,將下載的文件移動(dòng)到model_save目錄下即可。

Tokenizer訓(xùn)練

原本打算直接用現(xiàn)成的tokenizer庫訓(xùn)練的(如sentencepiece),但是數(shù)據(jù)集一大就容易OOM。另外預(yù)訓(xùn)練數(shù)據(jù)集各個(gè)領(lǐng)域的語料不平衡,會(huì)產(chǎn)生很多不必要的合并。最后使用jieba分詞對(duì)所有的預(yù)訓(xùn)練語料切詞后統(tǒng)計(jì)詞頻,只保留出現(xiàn)1500次以上的字、詞,參照PreTrainedTokenizerFast的BPE model的保存格式,構(gòu)造tokenzier,最后轉(zhuǎn)換為PreTrainedTokenizerFast。核心代碼如下,詳細(xì)的處理過程見utils/train_tokenizer.py。

# 構(gòu)造merge數(shù)組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))

本項(xiàng)目還提供了使用預(yù)訓(xùn)練模型自帶的tokenizer根據(jù)自己的語料重新訓(xùn)練tokenizer的例子,見train_tokenizer.ipynb。注意,重新訓(xùn)練tokenizer后,預(yù)訓(xùn)練模型的權(quán)重將無法使用,需要重新訓(xùn)練模型權(quán)重,因?yàn)閠oken對(duì)應(yīng)的id變了。

項(xiàng)目鏈接

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

 關(guān)注「開源AI項(xiàng)目落地」公眾號(hào)

開源AI項(xiàng)目落地

分享有價(jià)值的開源項(xiàng)目,并且致力于Ai項(xiàng)目的落地。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多