OpenBMB 开源社区/MiniCPM-2B-128k
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MiniCPM-2B-128k

OpenBMB 技术博客系列

MiniCPM 是由面壁智能(ModelBest Inc.)与清华大学自然语言处理实验室(TsinghuaNLP)联合研发的端侧大语言模型(End-Size LLM),不含嵌入层时仅拥有 24 亿(2.4B)参数。 MiniCPM-2B-128k 是 MiniCPM-2B 的长上下文扩展尝试版本。 据我们所知,MiniCPM-2B-128k 是首个参数量小于 30 亿(3B)且支持 128k 及以上上下文长度的小语言模型(SLM)。 与先前发布的 MiniCPM-2B 相比,其改进包括:

  • 支持 128k 上下文长度,在综合长文本评估基准 InfiniteBench 上取得 70 亿(7B)参数以下模型的最佳成绩,但在 4k 以内上下文时性能有所下降。
  • 为方便社区开发者使用,该模型在对齐过程中将 {} 指令模板更新为 chatml 格式(user\n{}\nassistant\n),这也有助于用户部署和使用 vllm 的 openai 兼容服务器模式。
  • 由于并行机制的要求,移除了 tie_embedding,并将词汇表扩展至 127660。

更多详情,请参考 GitHub 仓库 和 博客。

MiniCPM 是面壁与清华大学自然语言处理实验室共同开源的系列端侧语言大模型,主体语言模型 MiniCPM-2B 仅有 24亿(2.4B)的非词嵌入参数量。 MiniCPM-2B-128k 是一次基于 MiniCPM-2B 的长度扩展尝试,也是第一个 3B 以下的长文本模型。相对于之前发布的版本,改进如下:

  • 支持 128k 上下文,在综合长文本评测 InfiniteBench 上取得 7B 以下最佳成绩,但在 4k 以内性能有下降
  • 为方便社区开发者使用,该模型在对齐时将 <用户>{} 指令模板更新为了 chatml 格式(<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n),这也有助于用户使用 vllm openai compatible server 模式部署和使用。
  • 由于并行机制需要,去除了 tie_embedding,并扩展词表到 127660。

更多细节请参考 GitHub repo 和 Blog

Evaluation Results 评测结果

Modelavgavg w/o code&mathpasskeynumber_stringkv_retrievallongbook_choice_englongbook_qa_chnlongbook_qa_englongbook_sum_englongdialogue_qa_engmath_calcmath_findcode_debugcode_run
LWM-Text-128k24.4533.6210097.80.628.8215.9314.319.991.503.4320.051
Yarn-Mistral-7b-128k19.8427.3692.71027.9515.499.559.067.5017.140.761.25
Mistral-7B-Instruct-v0.2(ABF 1000w)27.7536.910078.983.637.1211.7417.3721.129.5029.4317.510
Yi-6B-200k22.1532.5410094.92036.6815.079.20.923.504.290.510.75
chatglm3-6b-128k25.5836.5789.9399.665.246.2910.78.3825.916.5085.331
MiniCPM-2.4B-128k27.3237.6898.3199.83929.6923.0616.3315.739.504.2922.080

Notice: We discovered that the quality of Huggingface generation is slightly lower and significantly slower than vLLM, thus benchmarking using vLLM is recommended.

注意:我们发现使用Huggingface生成质量略差于vLLM,因此推荐使用vLLM进行测试。

局限性

  • 由于模型规模的限制,该模型可能会出现幻觉问题。DPO模型往往会生成更长的回复,因此更容易产生幻觉。我们将持续对MiniCPM模型进行迭代和改进。

  • 为确保模型在学术研究中的通用性,我们未对模型进行任何身份认同训练。同时,由于我们使用ShareGPT开源语料作为部分训练数据,模型可能会输出与GPT系列模型相似的身份信息。

  • 受模型规模所限,模型的输出受提示词(prompt)影响较大,多次尝试可能会产生不一致的结果。

  • 由于模型容量有限,其知识记忆不够准确。未来,我们将结合RAG方法来增强模型的知识记忆能力。

  • 受限于模型规模,模型可能出现幻觉性问题。其中由于DPO模型生成的回复内容更长,更容易出现幻觉。我们也将持续进行MiniCPM模型的迭代改进;

  • 为了保证在学术研究用途上模型的通用性,我们未对模型进行任何身份认同训练。同时由于我们用ShareGPT开源语料作为部分训练数据,模型可能会输出类似GPT系列模型的身份认同信息;

  • 受限于模型规模,模型的输出受到提示词(prompt)的影响较大,可能多次尝试产生不一致的结果;

  • 受限于模型容量,模型的知识记忆较不准确,后续我们将结合RAG方法来增强模型的知识记忆能力。

模型使用

  • 安装transformers>=4.36.0以及accelerate后,运行以下代码

  • 注意:需要在from_pretrained中明确指明模型的数据类型,否则会引起较大计算误差

  • 安装transformers>=4.36.0以及accelerate后,运行以下代码

  • 注意:需要在from_pretrained中明确指明模型的数据类型,否则会引起较大计算误差

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
torch.manual_seed(0)

path = 'openbmb/MiniCPM-2B-128k'
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map='cuda', trust_remote_code=True)

responds, history = model.chat(tokenizer, "山东省最高的山是哪座山, 它比黄山高还是矮?差距多少?", temperature=0.8, top_p=0.8)
print(responds)