Minillm 0.2B Base
MiniLLM是一個輕量級語言模型項目,完整實現預訓練→指令微調→獎勵建模→強化學習全流程,以經濟高效的方式構建具備基礎對話能力的聊天模型
下載量 41
發布時間 : 3/16/2024
模型概述
該項目致力於打造一個輕量級語言模型,採用bert4torch訓練框架,代碼簡潔高效,訓練所得模型可直接兼容transformers推理生態。當前實驗模型僅具備基礎對話功能。
模型特點
輕量高效
採用bert4torch訓練框架,代碼簡潔高效,優化訓練過程顯存佔用
兼容性強
訓練所得模型可直接兼容transformers推理生態
全流程實現
完整實現預訓練→指令微調→獎勵建模→強化學習全流程
模型能力
中文文本生成
基礎對話
文本續寫
使用案例
教育
學習助手
幫助學生解答基礎學習問題
能夠生成基礎學習內容的解釋和示例
娛樂
簡單聊天
進行日常對話交流
能夠進行基本的問候和簡單話題交流
🚀 小參數量LLM項目
本項目致力於構建一個小參數量的大語言模型(LLM),完整經歷預訓練
-> 指令微調
-> 獎勵模型
-> 強化學習
四個階段,以可控成本打造一個能完成簡單聊天任務的對話模型。
🚀 快速開始
環境安裝
pip install bert4torch==0.4.9.post2 # 若找不到則指定 -i https://pypi.org/simple
腳本說明
# 為防止terminal關閉,可以使用nohup, tmux, screen方式來啟動
# eg. nohup torchrun --standalone --nproc_per_node=4 pretrain.py --name baby > nohup.log&
# 預訓練
cd pretrain
torchrun --standalone --nproc_per_node=4 pretrain.py # 部分反映ddp訓到一般會崩,需設置`export NCCL_IB_DISABLE=1`
# 預訓練推理(命令行聊天)
cd pretrain
python infer.py # python infer_transformers.py
# 指令微調訓練
cd sft
python sft.py
# 指令微調推理(命令行聊天)
cd sft
python infer.py # python infer_transformers.py
# 把ckpt轉化成transformers可以運行的格式
cd docs
python convert.py
✨ 主要特性
- 使用bert4torch訓練框架,代碼簡潔高效。
- 訓練的checkpoint可以直接使用
transformers
包進行推理。 - 優化了訓練時候內存佔用。
- 提供了完整訓練log供復現比對。
📚 詳細文檔
聲明
本實驗訓練出來的模型,目前只具備簡單的聊天功能(受限於語料大小、模型規模、sft語料大小和質量),不具備回答複雜問題的能力。
更新歷史
- 20240316:初始提交,預訓練模型
MiniLLM-MiniLLM-L12_H1024_A8-NoWudao
和MiniLLM-MiniLLM-L12_H1024_A8-WithWudao
;SFT模型MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
。
預訓練
預訓練語料(源於baby-llama2-chinese)
中文預訓練語料 | 描述 |
---|---|
Wiki中文百科 | 中文Wikipedia的數據 |
BaiduBaiKe 提取碼: bwvb | 中文BaiduBaiKe的數據 |
C4_zh:part1 提取碼:zv4r;C4_zh:part2 提取碼:sb83;C4_zh:part3 提取碼:l89d | C4是可用的最大語言數據集之一,收集了來自互聯網上超過3.65億個域的超過1560億個token。C4_zh是其中的一部分 |
WuDaoCorpora | 中文悟道開源的200G數據 |
shibing624/medical | 源自shibing624的一部分醫學領域的預訓練數據 |
項目開源了經過ChatGLM2-6B的分詞器處理後的預訓練語料,共計634億Tokens的數據量,鏈接如下:Corpus 提取碼:6unr。
預訓練權重
預訓練權重 | 預訓練語料 | 下載地址 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | (140億 Tokens) Wiki中文百科、BaiduBaiKe、hibing624/medical、C4_zh |
百度網盤, HuggingFace |
MiniLLM-L12_H1024_A8-WithWudao | (640億 Tokens) Wiki中文百科、BaiduBaiKe、shibing624/medical、C4_zh、WuDaoCorpora |
百度網盤, HuggingFace |
預訓練過程
- 訓練參數配置和訓練時長
權重 | 預訓練設置 | 硬件佔用和訓練時長 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | 140億 Tokens; btz=32*4gpu; lr=3e-4; warmup_steps=5000 | 4×A800(80G), 單卡佔用約60G,耗時20h |
MiniLLM-L12_H1024_A8-WithWudao | 640億 Tokens; btz=32*4gpu; lr=1.5e-4; warmup_steps=5000 | ✅ 4×A800(80G), 單卡佔用約60G,耗時3.79d ✅ baby-llama2項目2×4090,耗時26d ✅ 個人測試單卡btz=8下, gpu佔用約17G,時長未知(可配合梯度累計進一步降低佔用) |
預訓練模型調用
# 以下兩句視網絡情況添加
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"
from transformers import AutoTokenizer, LlamaForCausalLM
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model_name = 'Tongjilibo/MiniLLM-L12_H1024_A8-WithWudao' # 'Tongjilibo/MiniLLM-L12_H1024_A8-NoWudao'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = LlamaForCausalLM.from_pretrained(model_name).to(device)
query = '王鵬是一名'
inputs = tokenizer.encode(query, return_tensors='pt', add_special_tokens=False).to(device)
output_ids = model.generate(inputs)
response = tokenizer.decode(output_ids[0].cpu(), skip_special_tokens=True)
print(response)
預訓練續寫效果
- MiniLLM-L12_H1024_A8-NoWudao
用戶:小明學習優異、身體健康、是一名
續寫:小明學習優異、身體健康、是一名優秀的大連理工大學學生,從大學一年級起,他就對體育十分痴迷,成績名列前茅,還參加了多項比賽,在全校體育活動中,他成績名列前茅,被大連理工大學授予“優秀運動員”稱號。
2006年,高中二年級,小明的同學楊帆來到大連理工大學,他決心要改變自己的命運。他每天放學後,都會跑到操場上練習籃球,練到下午三點多鐘時,小明的籃球技術開始顯現出來,他的籃球動作敏捷,力量大,而且,他經常利用空檔時間練習跳投
用戶:床前明月光,疑是地上霜。舉頭望明月,
續寫:床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉……”
我讀著這些詩句時也倍感親切和親切了!
- MiniLLM-L12_H1024_A8-WithWudao
用戶:小明學習優異、身體健康、是一名
續寫:小明學習優異、身體健康、是一名優秀的教師。他為人誠實、有責任心。在課堂上,他能認真聽講,積極思考,對每節課都積極舉手發言。在課後,他主動要求幫助老師,認真做好作業,按時完成老師佈置的作業,受到同學們的好評。
用戶:床前明月光,疑是地上霜。舉頭望明月,
續寫:床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。”這詩不僅描述了中秋夜月夜的溫馨與寧靜,還寫出了作者對故土深情的眷戀和思鄉之情。“月上柳梢頭”一語,是寫月下所見。“欲將心事付瑤琴”,指欲訴別情; “舉頭望明月”,寫中秋之夜,月上高掛、皓月當空、群星閃耀的景象;“低頭思故鄉”,寫思念故土的深情厚意。
這首詩在寫作手法上,主要運用象徵
指令微調
指令微調語料(篩選的可用數據集)
數據集名稱 | 介紹 |
---|---|
shibing624/alpaca-zh | 參考Alpaca方法基於GPT4得到的self-instruct數據,約5萬條 |
BelleGroup/Belle-0.5M-cn | 包含約50萬條由BELLE項目生成的中文指令數據 |
BelleGroup/Belle-1M-cn | 包含約100萬條由BELLE項目生成的中文指令數據 |
BelleGroup/Belle-school_math_0.25M | Belle開放的0.25M數學指令數據集 |
BelleGroup/Belle-multiturn_chat_0.8M | Belle開放的0.8M多輪任務對話數據集 |
YeungNLP/firefly-train-1.1M | 流螢23種常見的中文NLP任務的數據,並且構造了許多與中華文化相關的數據,如對聯、作詩、文言文翻譯、散文、金庸小說等。對於每個任務,由人工書寫若干種指令模板,保證數據的高質量與豐富度,數據量為115萬 |
fnlp/moss-002-sft-data | MOSS-002所使用的多輪對話數據,覆蓋有用性、忠實性、無害性三個層面,包含由text-davinci-003生成的約57萬條英文對話和59萬條中文對話 |
fnlp/moss-003-sft-data | moss-moon-003-sft所使用的多輪對話數據,基於MOSS-002內測階段採集的約10萬用戶輸入數據和gpt-3.5-turbo構造而成,相比moss-002-sft-data,moss-003-sft-data更加符合真實用戶意圖分佈,包含更細粒度的有用性類別標記、更廣泛的無害性數據和更長對話輪數,約含110萬條對話數據 |
shareAI/CodeChat | 主要包含邏輯推理、代碼問答、代碼生成相關語料樣本。 |
shareAI/ShareGPT-Chinese-English-90k | 中英文平行雙語優質人機問答數據集,覆蓋真實複雜場景下的用戶提問。 |
deepctrl/deepctrl-sft-data | 匠數大模型SFT數據集是一個由匠數科技精心蒐集整理的高質量數據集,包含10M條數據的中文數據集和包含2M條數據的英文數據集 |
指令微調權重
指令微調權重 | 語料 | 下載地址 |
---|---|---|
MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca | shibing624/alpaca-zh | 百度網盤, HuggingFace |
指令微調訓練過程
- 訓練參數配置和訓練時長
權重 | 預訓練設置 | 硬件佔用和訓練時長 |
---|---|---|
MiniLLM-L12_H1024_A8-NoWudao | shibing624/alpaca-zh數據集; btz=8; lr=2e-5; 5epoch | 單卡4090,顯存17G, 耗時45min |
指令微調模型調用
# 以下兩句視網絡情況添加
import os
os.environ['HF_ENDPOINT'] = "https://hf-mirror.com"
from transformers import AutoTokenizer, LlamaForCausalLM
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model_name = 'Tongjilibo/MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = LlamaForCausalLM.from_pretrained(model_name).to(device)
query = '你好'
query = f'<human>{query}<robot>'
inputs = tokenizer.encode(query, return_tensors='pt', add_special_tokens=False).to(device)
output_ids = model.generate(inputs)
response = tokenizer.decode(output_ids[0].cpu(), skip_special_tokens=True)[len(query):]
print(response)
指令微調Chat效果
- MiniLLM-L12_H1024_A8-WithWudao-SFT_Alpaca
User:你好
Assistant:你好!很高興見到你。
User:你能做什麼?
Assistant:你好!我是一個人工智能助手,有什麼我可以為你做的嗎?
User:番茄炒蛋怎麼製作?
Assistant:如果你想要製作一個番茄炒蛋,那麼下面這些步驟可能會幫助你:
1. 準備食材:準備好雞蛋、鹽、香菜、胡蘿蔔絲、黃瓜絲等食材。
2. 清洗雞蛋:在攪拌碗中打散雞蛋,使其表面可以清潔。
3. 準備材料:準備一個鍋,倒入適量的水,將雞蛋液倒入鍋中。
4. 煮雞蛋:用湯鍋或鍋煎至雞蛋表面金黃色,熟透即可。
5. 炒蔬菜:在鍋中加入適量的油,將胡蘿蔔絲和黃瓜絲個人喜歡的,翻炒幾下,直到胡蘿蔔熟透。
6. 加入雞蛋:從鍋中取出雞蛋,倒入鍋中。
7. 調味:將炒好的雞蛋倒入鍋中,與蔬菜一起翻炒幾下即可。
注意:想要炒出更豐富的蔬菜味道,可以適當加入適量的鹽和香菜,增加風味。
📄 許可證
本項目採用Apache-2.0許可證。
Phi 2 GGUF
其他
Phi-2是微軟開發的一個小型但強大的語言模型,具有27億參數,專注於高效推理和高質量文本生成。
大型語言模型 支持多種語言
P
TheBloke
41.5M
205
Roberta Large
MIT
基於掩碼語言建模目標預訓練的大型英語語言模型,採用改進的BERT訓練方法
大型語言模型 英語
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基礎模型的蒸餾版本,在保持相近性能的同時更輕量高效,適用於序列分類、標記分類等自然語言處理任務。
大型語言模型 英語
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一個多語言大語言模型,針對多語言對話用例進行了優化,在常見的行業基準測試中表現優異。
大型語言模型 英語
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基於100種語言的2.5TB過濾CommonCrawl數據預訓練的多語言模型,採用掩碼語言建模目標進行訓練。
大型語言模型 支持多種語言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基於Transformer架構的英語預訓練模型,通過掩碼語言建模目標在海量文本上訓練,支持文本特徵提取和下游任務微調
大型語言模型 英語
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI發佈的開放預訓練Transformer語言模型套件,參數量從1.25億到1750億,旨在對標GPT-3系列性能,同時促進大規模語言模型的開放研究。
大型語言模型 英語
O
facebook
6.3M
198
1
基於transformers庫的預訓練模型,適用於多種NLP任務
大型語言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多語言大語言模型系列,包含8B、70B和405B參數規模,支持8種語言和代碼生成,優化了多語言對話場景。
大型語言模型
Transformers 支持多種語言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基礎版是由Google開發的文本到文本轉換Transformer模型,參數規模2.2億,支持多語言NLP任務。
大型語言模型 支持多種語言
T
google-t5
5.4M
702
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98