CPM-Bee大模型官网,百亿参數的開源中英文双语基座大模型
CPM-Bee是一个開源的双语预訓练语言模型,参數量為10B,擁有十余种原生能力和强大的通用语言能力,并支持結构化输入和输出。它是CPM-Live直播訓练过程中的第二个里程碑。訓练过程是低成本和環境友好的。我们將發布各种压缩版本以适应不同的硬體配置。CPM-Bee采用了開放的許可协議,發布后的模型和代碼將完全開放。
CPM-Bee大模型官网: https://live.openbmb.org/models/bee
Github地址: https://github.com/OpenBMB/CPM-Bee
Hugging Face地址: https://huggingface.co/openbmb/cpm-bee-10b
➤ CPM-Bee商用申请通道 發送申请郵件至 [email protected] 獲取授權證書
自OpenBMB開源社区成立以来,我们就堅定不移地践行“让大模型飛入千家万户”的理念,開發模型全流程加速系統以高效支持大模型的预訓练、微调、应用和推理,并發起 百亿大模型訓练直播專案CPM-Live。
終于!CPM-Live 第二阶段的进度条終于拉到了100%,我们迎来了CPM-Live第二个里程碑:CPM-Bee 開源發布!
✨ 模型介绍
CPM-Bee是一个完全開源、允許商用的百亿参數中英文基座模型,也是CPM-Live訓练的第二个里程碑。它采用Transformer自回歸架构(auto-regressive),在超万亿(trillion)高质量语料上进行预訓练,擁有强大的基礎能力。開發者和研究者可以在CPM-Bee基座模型的基礎上在各类場景进行适配来以創建特定领域的应用模型。
-
👐 開源可商用:OpenBMB始終秉承“让大模型飛入千家万户”的開源精神,CPM-Bee基座模型將完全開源并且可商用,以推动大模型领域的發展。我们鼓勵全球范围内的科研机构、企業和个人開發者在遵守開源許可协議的前提下,自由地在CPM-Bee基座模型上进行創新。
-
💫 中英双语性能優異: CPM-Bee基座模型在预訓练语料上进行了嚴格的筛選和配比,同时在中英双语上具有亮眼表现,具体可参見評测任務和結果。
-
📖 超大規模高质量语料: CPM-Bee基座模型在超万亿语料进行訓练,是開源社区内經过语料最多的模型之一。同时,我们對预訓练语料进行了嚴格的筛選、清洗和后處理以确保质量。
-
OpenBMB大模型系統生態支持: OpenBMB大模型系統在高性能预訓练、适配、压缩、部署、工具開發了一系列工具,CPM-Bee基座模型將配套所有的工具脚本,高效支持開發者进行进阶使用。
-
🔨 對话和工具使用能力: 結合OpenBMB在指令微调和工具学習的探索,我们在CPM-Bee基座模型的基礎上进行微调,訓练出了具有强大對话和工具使用能力的實例模型,API和内测將于近期開放。
Read this in English.
說明:CPM-Bee是一个基座模型,即从零開始透過预訓练得来。我们鼓勵用户在自己的場景和資料上适配/微调/對齊后再进行使用。例如,WebCPM 以CPM-Bee為基座,在人类網路检索的序列化資料上进行适配,獲得了复雜問答和上网检索的能力。后續我们將会發布更多在CPM-Bee基座模型基礎上适配的模型。
📰 更新信息
- [2023/06/08] 更新了使用CPM-Bee进行基礎任務微调的教程。
- [2023/05/27] 百亿参數,允許商用的中英双语基座模型CPM-Bee開源了,它是CPM-Live的第二个里程碑。
🚀 安装和使用
您需要克隆该仓库:
$ git clone -b main --single-branch https://github.com/OpenBMB/CPM-Bee.git
并确保您的環境符合要求:
- python>=3.7
- torch>=1.10
我们建議使用Anaconda管理環境并从PyPI安装其他依賴项:
$ cd src
$ pip install -r requirements.txt
模型
-
模型權重下载链接
-
CPM-Bee的基座模型可以准确地进行语義理解,高效完成各类基礎任務,包括:文字填空、文本生成、翻译、問答、評分预测、文本選择题等等。
"填空":{"input": "心理学领域的研究人员發现,做出重要决定的最好方法之一,比如選择一所大学或<mask_0>,都涉及到使用决策工作表。研究優化的心理学家將<mask_1>与理論理想决策进行比較,看看它们有多相似。工作表程式的支持者认為它会產生最優的,也就是說,最好的决策。虽然有<mask_2>可以接受,但它们在本质上都是相似的。","<ans>":{"<mask_0>":"","<mask_1>":"","<mask_2>":""}},
"文本生成": {"input": "今天天氣很好,我和妈妈一起去公园,", "prompt": "往后寫約100字", "<ans>": ""}
"翻译": {"input": "北京是中国的首都", "prompt": "中翻英", "<ans>": ""}
"問答": {"input": "NGC 6231是一个位于天蝎座的疏散星團,天球座标為赤經16时54分,赤纬-41度48分,視觉觀测大小約45角分,亮度約2.6視星等,距地球5900光年。NGC 6231年齡約為三百二十万年,是一个非常年轻的星團,星團内的最亮星是5等的天蝎座 ζ1星。用双筒望遠镜或小型望遠镜就能看到个别的行星。NGC 6231在1654年被意大利天文学家乔瓦尼·巴蒂斯特·霍迪尔納(Giovanni Battista Hodierna)以Luminosae的名字首次紀錄在星表中,但是未見記载于夏尔·梅西耶的天体列表和威廉·赫歇尔的深空天体目錄。这个天体在1678年被愛德蒙·哈雷(I.7)、1745年被夏西亞科斯(Jean-Phillippe Loys de Cheseaux)(9)、1751年被尼可拉·路易·拉卡伊(II.13)分别再次独立發现。", "question": "NGC 6231的經纬度是多少?", "<ans>": ""}
"評分预测": {"input":"之前多次聚餐都選择这里,有各种大小的包房同时能容納很多人,環境好有特色还有表演,整体聚餐氛围一下被帶动起来。现在由于炭火改成了電烤羊,口感真的不如从前,不过其他菜品都还是不错,烤羊剩下的拆骨肉最后还能再加工一下椒鹽的也很好吃。","question":"評分是多少?(1-5)","<ans>":""},
"選择题": {"input": "父母都希望自己的孩子誠實、勇敢、有礼貌。要想让孩子成為这样的人,父母首先得从自己做起,要是連自己都做不到,又怎能要求孩子做到呢?", "options": {"<option_0>": "少提要求", "<option_1>": "降低标准", "<option_2>": "自己先做好", "<option_3>": "让孩子拿主意"}, "question": "教育孩子时,父母应该:", "<ans>": ""}
OpenBMB
基于OpenBMB的大模型系統生態,我们在訓练CPM-Bee的过程中實现了全流程高效。同时提供了繼續訓练(基于BMTrain)、微调(基于OpenPrompt和OpenDelta)、工具使用(基于BMTools)、模型压缩(基于BMCook)、高效推理(基于BMInf)的全套脚本,可以协助開發者快速上手和使用CPM-Bee。
预訓练
我们提供了基于BMTrain加速的预訓练脚本,大幅提升预訓练效率。
模型微调
基于OpenDelta,我们给出了两种微调方案:全参數微调和参數高效的增量微调,可以將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 \
任務流程 要在特定任務上微调模型,您应该准備資料集并按如下方式执行:
- 调整資料格式。 您可以將分类問题集成到選择题的格式中。有關資料格式的更多信息,您可以查看CPM-Bee資料格式
应当注意,由于我们選定<...>
作為特殊token的标記,可能与文本中的<
混淆,所以您应当對文本資料中的非特殊token的部分,做轉義處理。例如,我们有如下資料{"input": "團队配合非常重要,如果不能做到<mask_0>,则可能会造成1+1<2的結果,所以,要更加注意<mask_1>", "<ans>": {"<mask_0>": "", "<mask_1>": ""}}
该資料中,
<mask_0>
与<mask_1>
是特殊token,应保持不變,其余<
均替换為<<
,轉義處理后的資料如下:{"input": "團队配合非常重要,如果不能做到<mask_0>,则可能会造成1+1<<2的結果,所以,要更加注意<mask_1>", "<ans>": {"<mask_0>": "", "<mask_1>": ""}}
- 將資料集预處理為二进制文件。 要构建预處理資料集,您可以運行
$ python preprocess_dataset.py --input your/reformated/data/path --output_path your/binary/data/path --output_name data_name
预處理后,您將獲得:
|-- your/binary/data/path
|-- folder1
| |-- data_name
| |-- meta.bin
|-- folder2
|-- data_name
|-- meta.bin
- 微调CPM-Bee 要開始微调,您可以運行:
$ bash scripts/finetune_cpm_bee.sh
或者您可以直接透過torchrun運行finetune_cpm_bee.py。例如,您可以在具有4块GPU的伺服器上對CPM-Bee进行增量微调,如下所示:
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基座模型进行压缩,提供了多种大小的CPM-Bee模型来适应各种不同的場景。
模型 | #Attn層 | #FFN層 | Attn隐状態维度 | FFN隐状態维度 | 下载 |
---|---|---|---|---|---|
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,普通的消費級顯卡即可完成快速推理,不同大小的模型所占用的推理資源如下:
模型 | 推理記憶體占用 | 推荐硬體 |
---|---|---|
CPM-Bee-10B | 20GB | RTX 3090(24 GB) |
CPM-Bee-5B | 11 GB | RTX 3090(24 GB) |
CPM-Bee-2B | 6.7 GB | GTX 1080(8 GB) |
CPM-Bee-1B | 4.1 GB | GTX 1660(6 GB) |
對于具体的推理任務,您可以编寫自己的推理代碼。这里我们舉一个简單的文本生成示例。
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": "今天天氣是真的", "prompt": "往后寫一句话", "<ans>": ""},
{"input": "北京市氣象台提示,4月12日午后偏南風加大,阵風可达6級左右,南下的沙尘可能伴随回流北上进京,外出仍需注意<mask_0>,做好健康防護。天津市氣象台也提示,受<mask_1>影响,我市4月12日有浮尘天氣,PM10濃度<mask_2>。请注意關好門窗,老人兒童尽量減少户外活动,外出注意帶好<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")
# lora_ckpt_path = "path/to/lora.pt"
# model.load_state_dict(torch.load(lora_ckpt_path), strict=False)
# load checkpoints
model.load_state_dict(torch.load(ckpt_path), strict=False)
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, repetition_penalty=1.1)
for res in inference_results:
print(res)
# output:
# {'input': '今天天氣是真的', 'prompt': '往后寫一句话', '<ans>': {'<mask>': '好啊!'}}
# {'input': '北京市氣象台提示,4月12日午后偏南風加大,阵風可达6級左右,南下的沙尘可能伴随回流北上进京,外出仍需注意<mask_0>,做好健康防護。天津市氣象台也提示,受<mask_1>影响,我市4月12日有浮尘天氣,PM10濃度<mask_2>。请注意關好門窗,老人兒童尽量減少户外活动,外出注意帶好<mask_3>。” ', '<ans>': {'<mask_0>': '防風', '<mask_1>': '沙尘天氣', '<mask_2>': '較高', '<mask_3>': '口罩、護目镜等防護用品'}}
我们还將上面的代碼集成到一个python文件text_generation.py
中,為了便于推斷,可以直接運行该文件:
python text_generation.py
您可以設置不同的输入格式,以适应不同的推理任務。
💫 性能表现
零样本評测
我们對CPM-Bee基座模型进行了全方位的中英文能力評测。 在中文的Zero-CLUE評测基准上,CPM-Bee可以大幅超越其他模型,位列中文大模型第一。在英文評测基准上,CPM-Bee也展现出了和開源模型LLaMA相当的效果。
ZeroCLUE中文評测
模型 | 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 | 67.80 | 78.69 | 77.58 | 61.11 | 78.89 | 61.88 | 66.88 | 54.18 | 63.20 |
CPM-Bee + Decoder Tuning
使用和OpenBMB和THUNLP联合自研的Decoder Tuning(將發表于ACL 2023)技術,可以仅仅使用API的情况下,不訪問和修改模型参數即可大幅提高下遊任務的性能。 實现代碼链接。
样本數 | 模型 | 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基座采用协議為“通用模型許可协議-来源說明-宣传限制-商業授權”,本模型允許商用,如需將模型用于商業用途,请联系[email protected]来獲取書面授權。
声明
作為一个语言模型,CPM-Bee透過学習大量的文本来生成内容,但它無法理解、表达个人觀点或价值判斷,它所输出的任何内容都不代表模型開發者的觀点和立場。 因此用户在使用CPM-Bee生成的内容时,应自行负责對其进行評估和验證。
数据评估
本站ai工具百寶箱提供的CPM-Bee都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由ai工具百寶箱实际控制,在2024年12月9日 下午10:51收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,ai工具百寶箱不承担任何责任。