日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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

原創(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)始

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])

·從克隆倉(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)行:

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

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

# 構(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ù)自己的語(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)

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

分享有價(jià)值的開(kāi)源項(xiàng)目,并且致力于A(yíng)i項(xiàng)目的落地。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多