🚀 MiniCPM-2B-128k
MiniCPM 是面壁與清華大學自然語言處理實驗室共同開源的系列端側語言大模型,主體語言模型 MiniCPM-2B 僅有 24 億(2.4B)的非詞嵌入參數量。MiniCPM-2B-128k 是一次基於 MiniCPM-2B 的長度擴展嘗試,也是第一個 3B 以下的長文本模型。它解決了長文本處理的難題,為長文本場景提供了高效的解決方案。
🚀 快速開始
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。
📚 詳細文檔
評測結果
模型 |
平均得分 |
無代碼和數學平均得分 |
密鑰 |
數字字符串 |
KV 檢索 |
英文長書選擇 |
中文長書問答 |
英文長書問答 |
英文長書摘要 |
英文長對話問答 |
數學計算 |
數學查找 |
代碼調試 |
代碼運行 |
LWM-Text-128k |
24.45 |
33.62 |
100 |
97.8 |
0.6 |
28.82 |
15.93 |
14.31 |
9.99 |
1.5 |
0 |
3.43 |
20.05 |
1 |
Yarn-Mistral-7b-128k |
19.84 |
27.36 |
92.71 |
|
0 |
27.95 |
15.49 |
9.55 |
9.06 |
7.5 |
0 |
17.14 |
0.76 |
1.25 |
Mistral-7B-Instruct-v0.2(ABF 1000w) |
27.75 |
36.9 |
100 |
78.98 |
3.6 |
37.12 |
11.74 |
17.37 |
21.12 |
9.5 |
0 |
29.43 |
17.51 |
0 |
Yi-6B-200k |
22.15 |
32.54 |
100 |
94.92 |
0 |
36.68 |
15.07 |
9.2 |
0.92 |
3.5 |
0 |
4.29 |
0.51 |
0.75 |
chatglm3-6b-128k |
25.58 |
36.57 |
89.93 |
99.66 |
5.2 |
46.29 |
10.7 |
8.38 |
25.91 |
6.5 |
0 |
8 |
5.33 |
1 |
MiniCPM-2.4B-128k |
27.32 |
37.68 |
98.31 |
99.83 |
9 |
29.69 |
23.06 |
16.33 |
15.73 |
9.5 |
0 |
4.29 |
22.08 |
0 |
⚠️ 重要提示
我們發現使用 Huggingface 生成質量略差於 vLLM,因此推薦使用 vLLM 進行測試。
侷限性
- 受限於模型規模,模型可能出現幻覺性問題。其中由於 DPO 模型生成的回覆內容更長,更容易出現幻覺。我們也將持續進行 MiniCPM 模型的迭代改進。
- 為了保證在學術研究用途上模型的通用性,我們未對模型進行任何身份認同訓練。同時由於我們用 ShareGPT 開源語料作為部分訓練數據,模型可能會輸出類似 GPT 系列模型的身份認同信息。
- 受限於模型規模,模型的輸出受到提示詞(prompt)的影響較大,可能多次嘗試產生不一致的結果。
- 受限於模型容量,模型的知識記憶較不準確,後續我們將結合 RAG 方法來增強模型的知識記憶能力。
💻 使用示例
基礎用法
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)