CPM-Bee是一個完全開源、允許商用的百億參數(shù)中英文基座模型,也是CPM-live訓(xùn)練的第二個里程碑。它采用Transformer自回歸架構(gòu)(auto-regressive),在超萬億(trillion)高質(zhì)量語料上進(jìn)行預(yù)訓(xùn)練,擁有強大的基礎(chǔ)能力。開發(fā)者和研究者可以在CPM-Bee基座模型的基礎(chǔ)上在各類場景進(jìn)行適配來以創(chuàng)建特定領(lǐng)域的應(yīng)用模型。
?? 開源可商用:OpenBMB始終秉承“讓大模型飛入千家萬戶”的開源精神,CPM-Bee基座模型將完全開源并且可商用,以推動大模型領(lǐng)域的發(fā)展。我們鼓勵全球范圍內(nèi)的科研機構(gòu)、企業(yè)和個人開發(fā)者在遵守開源許可協(xié)議的前提下,自由地在CPM-Bee基座模型上進(jìn)行創(chuàng)新。
?? 中英雙語性能優(yōu)異: CPM-Bee基座模型在預(yù)訓(xùn)練語料上進(jìn)行了嚴(yán)格的篩選和配比,同時在中英雙語上具有亮眼表現(xiàn),具體可參見評測任務(wù)和結(jié)果。
?? 超大規(guī)模高質(zhì)量語料: CPM-Bee基座模型在超萬億語料進(jìn)行訓(xùn)練,是開源社區(qū)內(nèi)經(jīng)過語料最多的模型之一。同時,我們對預(yù)訓(xùn)練語料進(jìn)行了嚴(yán)格的篩選、清洗和后處理以確保質(zhì)量。
OpenBMB大模型系統(tǒng)生態(tài)支持: OpenBMB大模型系統(tǒng)在高性能預(yù)訓(xùn)練、適配、壓縮、部署、工具開發(fā)了一系列工具,CPM-Bee基座模型將配套所有的工具腳本,高效支持開發(fā)者進(jìn)行進(jìn)階使用。
?? 對話和工具使用能力: 結(jié)合OpenBMB在指令微調(diào)和工具學(xué)習(xí)的探索,我們在CPM-Bee基座模型的基礎(chǔ)上進(jìn)行微調(diào),訓(xùn)練出了具有強大對話和工具使用能力的實例模型,API和內(nèi)測將于近期開放。
Read this in English.
您需要克隆該倉庫:
$ git clone -b master --single-branch https://github.com/OpenBMB/CPM-Bee.git
并確保您的環(huán)境符合要求:
- python>=3.7
- torch>=1.10
我們建議使用Anaconda管理環(huán)境并從PyPI安裝其他依賴項:
$ cd src
$ pip install -r requirements.txt
CPM-Bee的基座模型可以準(zhǔn)確地進(jìn)行語義理解,高效完成各類基礎(chǔ)任務(wù),包括:文字填空、文本生成、翻譯、問答、評分預(yù)測、文本選擇題等等。
"填空":{"input": "心理學(xué)領(lǐng)域的研究人員發(fā)現(xiàn),做出重要決定的最好方法之一,比如選擇一所大學(xué)或<mask_0>,都涉及到使用決策工作表。研究優(yōu)化的心理學(xué)家將<mask_1>與理論理想決策進(jìn)行比較,看看它們有多相似。工作表程序的支持者認(rèn)為它會產(chǎn)生最優(yōu)的,也就是說,最好的決策。雖然有<mask_2>可以接受,但它們在本質(zhì)上都是相似的。","<ans>":{"<mask_0>":"","<mask_1>":"","<mask_2>":""}},
"文本生成": {"input": "今天天氣很好,我和媽媽一起去公園,<mask>", "prompt": "往后寫兩句話", "<ans>": ""}
"翻譯": {"input": "北京是中國的首都", "prompt": "中翻英", "<ans>": ""}
"問答": {"input": "NGC 6231是一個位于天蝎座的疏散星團,天球座標(biāo)為赤經(jīng)16時54分,赤緯-41度48分,視覺觀測大小約45角分,亮度約2.6視星等,距地球5900光年。NGC 6231年齡約為三百二十萬年,是一個非常年輕的星團,星團內(nèi)的最亮星是5等的天蝎座 ζ1星。用雙筒望遠(yuǎn)鏡或小型望遠(yuǎn)鏡就能看到個別的行星。NGC 6231在1654年被意大利天文學(xué)家喬瓦尼·巴蒂斯特·霍迪爾納(Giovanni Battista Hodierna)以Luminosae的名字首次紀(jì)錄在星表中,但是未見記載于夏爾·梅西耶的天體列表和威廉·赫歇爾的深空天體目錄。這個天體在1678年被愛德蒙·哈雷(I.7)、1745年被夏西亞科斯(Jean-Phillippe Loys de Cheseaux)(9)、1751年被尼可拉·路易·拉卡伊(II.13)分別再次獨立發(fā)現(xiàn)。", "question": "NGC 6231的經(jīng)緯度是多少?", "<ans>": ""}
"評分預(yù)測": {"input":"之前多次聚餐都選擇這里,有各種大小的包房同時能容納很多人,環(huán)境好有特色還有表演,整體聚餐氛圍一下被帶動起來。現(xiàn)在由于炭火改成了電烤羊,口感真的不如從前,不過其他菜品都還是不錯,烤羊剩下的拆骨肉最后還能再加工一下椒鹽的也很好吃。","question":"評分是多少?(1-5)","<ans>":""},
"選擇題": {"input": "父母都希望自己的孩子誠實、勇敢、有禮貌。要想讓孩子成為這樣的人,父母首先得從自己做起,要是連自己都做不到,又怎能要求孩子做到呢?", "options": {"<option_0>": "少提要求", "<option_1>": "降低標(biāo)準(zhǔn)", "<option_2>": "自己先做好", "<option_3>": "讓孩子拿主意"}, "question": "教育孩子時,父母應(yīng)該:", "<ans>": ""}
基于OpenBMB的大模型系統(tǒng)生態(tài),我們在訓(xùn)練CPM-Bee的過程中實現(xiàn)了全流程高效。同時提供了繼續(xù)訓(xùn)練(基于BMTrain)、微調(diào)(基于OpenPrompt和OpenDelta)、工具使用(基于BMTools)、模型壓縮(基于BMCook)、高效推理(基于BMInf)的全套腳本,可以協(xié)助開發(fā)者快速上手和使用CPM-Bee。
我們提供了基于BMTrain加速的預(yù)訓(xùn)練腳本,大幅提升預(yù)訓(xùn)練效率。
基于OpenDelta,我們給出了兩種微調(diào)方案:全參數(shù)微調(diào)和參數(shù)高效的增量微調(diào),可以將CPM-Bee適配到各類下游場景中。
$ torchrun --nnodes=1 --nproc_per_node=4 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=localhost:12345 finetune_cpm_bee.py
$ torchrun --nnodes=1 --nproc_per_node=4 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=localhost:12345 finetune_cpm_bee.py \
--use-delta \
任務(wù)流程
要在特定任務(wù)上微調(diào)模型,您應(yīng)該準(zhǔn)備數(shù)據(jù)集并按如下方式執(zhí)行:
$ python preprocess_dataset.py --input your/reformated/data/path --output_path your/binary/data/path --output_name data_name
預(yù)處理后,您將獲得:
|-- your/binary/data/path
|-- folder1
| |-- data_name
| |-- meta.bin
|-- folder2
|-- data_name
|-- meta.bin
$ bash scripts/finetune_cpm_bee.sh
或者您可以直接通過torchrun運行finetune_cpm_bee.py。例如,您可以在具有4塊GPU的服務(wù)器上對CPM-Bee進(jìn)行微調(diào),如下所示:
torchrun --nnodes=1 --nproc_per_node=4 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=localhost:12345 finetune_cpm_bee.py \
--model-config your/model/config/path \
--load your/model/checkpoint/path \
--dataset your/binary/data/path/folder1 \
--eval_dataset your/binary/data/path/folder2 \
--use-delta
基于BMCook,我們對原始的CPM-Bee基座模型進(jìn)行壓縮,提供了多種大小的CPM-Bee模型來適應(yīng)各種不同的場景。
模型 | #Attn.層 | #FFN層 | Attn隱狀態(tài)維度 | FFN隱狀態(tài)維度 | 下載 |
---|---|---|---|---|---|
CPM-Bee-10B | 48 | 48 | 4096 | 10240 | 鏈接 |
CPM-Bee-5B | 19 | 24 | 4096 | 10240 | 鏈接 |
CPM-Bee-2B | 19 | 24 | 2048 | 5120 | 鏈接 |
CPM-Bee-1B | 19 | 24 | 1280 | 1024 | 鏈接 |
對于壓縮后的CPM-Bee,普通的消費級顯卡即可完成快速推理,不同大小的模型所占用的推理資源如下:
模型 | 推理內(nèi)存占用 | 推薦硬件 |
---|---|---|
CPM-Bee-10B | 20GB | RTX3090(24 GB) |
CPM-Bee-5B | 11 GB | RTX3090(24 GB) |
CPM-Bee-2B | 6.7 GB | GTX 1080(8 GB) |
CPM-Bee-1B | 4.1 GB | GTX 1660(6 GB) |
對于具體的推理任務(wù),您可以編寫自己的推理代碼。這里我們舉一個簡單的文本生成示例。
from cpm_live.generation.bee import CPMBeeBeamSearch
from cpm_live.models import CPMBeeTorch, CPMBeeConfig
from cpm_live.tokenizers import CPMBeeTokenizer
from opendelta import LoraModel
import torch
prepare your input data.
data_list = [
{"input": "今天天氣是真的<mask>", "prompt": "往后寫一句話", "<ans>": {"<mask>": ""}},
{"input": "北京市氣象臺提示,4月12日午后偏南風(fēng)加大,陣風(fēng)可達(dá)6級左右,南下的沙塵可能伴隨回流北上進(jìn)京,外出仍需注意<mask_0>,做好健康防護(hù)。天津市氣象臺也提示,受<mask_1>影響,我市4月12日有浮塵天氣,PM10濃度<mask_2>。請注意關(guān)好門窗,老人兒童盡量減少戶外活動,外出注意帶好<mask_3>?!?","<ans>":{"<mask_0>":"","<mask_1>":"","<mask_2>":"","<mask_3>":""}},
]
# load model
config = CPMBeeConfig.from_json_file("cpm-bee-5b.json")
ckpt_path = "cpm-bee-5b-ckpt.pt"
tokenizer = CPMBeeTokenizer()
model = CPMBeeTorch(config=config)
# insert LoRA
# delta_model = LoraModel(backbone_model=model, modified_modules=["project_q", "project_v"], backend="hf")
# load checkpoints
model.load_state_dict(torch.load(ckpt_path))
model.cuda()
# use beam search
beam_search = CPMBeeBeamSearch(
model=model,
tokenizer=tokenizer,
)
for data in data_list:
inference_results = beam_search.generate([data], max_length=100)
for res in inference_results:
print(res)
# output:
# {'input': '今天天氣是真的<mask>', 'prompt': '往后寫一句話', '<ans>': {'<mask>': '好??!'}}
# {'input': '北京市氣象臺提示,4月12日午后偏南風(fēng)加大,陣風(fēng)可達(dá)6級左右,南下的沙塵可能伴隨回流北上進(jìn)京,外出仍需注意<mask_0>,做好健康防護(hù)。天津市氣象臺也提示,受<mask_1>影響,我市4月12日有浮塵天氣,PM10濃度<mask_2>。請注意關(guān)好門窗,老人兒童盡量減少戶外活動,外出注意帶好<mask_3>?!?', '<ans>': {'<mask_0>': '防風(fēng)', '<mask_1>': '沙塵天氣', '<mask_2>': '較高', '<mask_3>': '口罩'}}
我們還將上面的代碼集成到一個python文件text_generation.py
中,為了便于推斷,可以直接運行該文件:
python text_generation.py
您可以設(shè)置不同的輸入格式,以適應(yīng)不同的推理任務(wù)。
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
# save_dir參數(shù)需要寫入模型下載到的位置
if __name__ == '__main__':
text_generation_zh = pipeline(task=Tasks.text_generation, model='OpenBMB/cpm-bee-5b', save_dir='/mnt/workspace/.cache/modelscope/OpenBMB/cpm-bee-5b/', model_revision='v1.0.2')
result_zh = text_generation_zh('{"input": "今天天氣是真的<mask>", "prompt": "往后寫一句話", "<ans>": {"<mask>": ""}}')
print(result_zh)
python modescope_test.py build_ext --inplace
我們對CPM-Bee基座模型進(jìn)行了全方位的中英文能力評測。 在中文的Zero-CLUE評測基準(zhǔn)上,CPM-Bee可以大幅超越其他模型,位列中文大模型第一。在英文評測基準(zhǔn)上,CPM-Bee也展現(xiàn)出了和開源模型LLaMA相當(dāng)?shù)男Ч?/p>
模型 | Score | EPRSTMT | CSLDCP | TNEWSF | IFLYTEKF | OCNLIF | BUSTM | CHIDF | CSLF | CLUEWSCF |
---|---|---|---|---|---|---|---|---|---|---|
CPM-Bee | 78.184 | 85.52 | 58.99 | 78.2 | 58.81 | 77.73 | 83.85 | 89.65 | 83.6 | 87.24 |
Ctyun_Big_Model | 76.217 | 87.25 | 48.02 | 77.13 | 59.62 | 75.5 | 90.05 | 84.6 | 82.9 | 81.72 |
PaddleNLP-UTC | 70.547 | 85.92 | 58.92 | 68.27 | 40.15 | 74.79 | 76.7 | 82.75 | 70.6 | 74.48 |
二郎神-UnifiedMC | 70.295 | 88.71 | 50.18 | 71.67 | 40.58 | 75.5 | 80.15 | 84.85 | 60.6 | 81.72 |
模型 | Average | BoolQ | PIQA | SIQA | HellaSwag | WinoGrande | ARC-e | ARC-c | OBQA |
---|---|---|---|---|---|---|---|---|---|
GPT-3 | 60.5 | 81 | - | 78.9 | 70.2 | 68.8 | 51.4 | 57.6 | |
Gopher | 79.3 | 81.8 | 50.6 | 79.2 | 70.1 | - | - | - | |
Chinchilla | 83.7 | 81.8 | 51.3 | 80.8 | 74.9 | - | - | - | |
PaLM | 84.8 | 80.5 | - | 79.7 | 77 | 75.2 | 52.5 | 50.4 | |
LLaMA-7B | 66.13 | 76.5 | 79.8 | 48.9 | 76.1 | 70.1 | 72.8 | 47.6 | 57.2 |
LLaMA-13B | 68.08 | 78.1 | 80.1 | 50.4 | 79.2 | 73 | 74.8 | 52.7 | 56.4 |
CPM-Bee-0527 | 67.80 | 78.69 | 77.58 | 61.11 | 78.89 | 61.88 | 66.88 | 54.18 | 63.20 |
使用和OpenBMB和THUNLP聯(lián)合自研的Decoder Tuning(將發(fā)表于ACL 2023)技術(shù),可以僅僅使用API的情況下,不訪問和修改模型參數(shù)即可大幅提高下游任務(wù)的性能。
實現(xiàn)代碼鏈接。
樣本數(shù) | 模型 | SST2 | IMDB | Yelp | AGNews | DBpedia | Yahoo | RTE | SNLI | MNLI-m | MNLI-mm | FewNERD | Avg. |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | CPM-Bee | 80.5 | 89.1 | 96.6 | 74.6 | 71.3 | 46.7 | 84.1 | 45.4 | 45.6 | 45.6 | 1.6 | 61.9 |
16 | T5-3B | 89.9 | 92.7 | 94.9 | 87.7 | 96.2 | 66.5 | 55.8 | 52.0 | 52.8 | 52.2 | 51.9 | 72.1 |
LLaMA-7B | 85.1 | 90.5 | 92.8 | 71.4 | 89.8 | 45.1 | 49.1 | 35.2 | 36.3 | 36.2 | 54.6 | 62.4 | |
Vicuna-13B | 82.1 | 88.8 | 95.6 | 86.4 | 74.4 | 55.3 | 62.5 | 61.4 | 54.3 | 48.6 | 52.1 | 69.2 | |
CPM-Bee | 92.7 | 96.2 | 97.5 | 85.5 | 89.8 | 65.2 | 86.0 | 86.4 | 76.3 | 76.3 | 54.6 | 82.4 | |
64 | LLaMA-7B | 87.5 | 85.7 | 96.9 | 75.4 | 93.5 | 47.4 | 51.4 | 39.4 | 36.2 | 38.4 | 59.8 | 64.7 |
Vicuna-13B | 92.0 | 90.8 | 96.5 | 87.7 | 87.8 | 58.7 | 59.1 | 58.7 | 56.7 | 48.4 | 56.8 | 72.1 | |
CPM-Bee | 94.3 | 96.5 | 98.3 | 88.5 | 93.5 | 68.7 | 87.1 | 88.9 | 78.0 | 79.0 | 59.8 | 84.8 | |
256 | LLaMA-7B | 87.6 | 88.8 | 97.1 | 82.4 | 94.2 | 48.5 | 53.4 | 39.8 | 37.3 | 37.4 | 59.1 | 66.0 |
Vicuna-13B | 93.1 | 88.7 | 96.8 | 89.9 | 89.1 | 58.6 | 58.5 | 58.7 | 57.5 | 48.3 | 56.6 | 72.3 | |
CPM-Bee | 94.5 | 96.7 | 98.4 | 89.7 | 94.2 | 69.9 | 87.7 | 89.4 | 81.7 | 80.6 | 59.1 | 85.6 |
CPM-Bee基座采用協(xié)議為“通用模型許可協(xié)議-來源說明-宣傳限制-商業(yè)授權(quán)”,本模型允許商用,如需將模型用于商業(yè)用途,請聯(lián)系cpm@modelbest.cn來獲取書面授權(quán)。
作為一個語言模型,CPM-Bee通過學(xué)習(xí)大量的文本來生成內(nèi)容,但它無法理解、表達(dá)個人觀點或價值判斷,它所輸出的任何內(nèi)容都不代表模型開發(fā)者的觀點和立場。
因此用戶在使用CPM-Bee生成的內(nèi)容時,應(yīng)自行負(fù)責(zé)對其進(jìn)行評估和驗證。