模型概述
模型特點
模型能力
使用案例
🚀 MiniCPM4-8B GGUF模型
MiniCPM4-8B GGUF模型是專為端側設備設計的高效大語言模型,在模型架構、訓練數據、訓練算法和推理系統四個關鍵維度進行了系統創新,實現了極致的效率提升。
🚀 快速開始
模型生成詳情
本模型使用 llama.cpp 在提交版本 7f4fbe51
時生成。
超IMatrix量化
我一直在嘗試一種新的量化方法,該方法有選擇地提高關鍵層的精度,超越了默認IMatrix配置所提供的精度。
在我的測試中,標準的IMatrix量化在低比特深度下表現不佳,尤其是在混合專家(MoE)模型中。為了解決這個問題,我使用 llama.cpp
中的 --tensor-type
選項手動將重要層的精度提高。你可以在以下鏈接查看實現:
使用llama.cpp進行層提升
雖然這確實會增加模型文件的大小,但它顯著提高了給定量化級別的精度。
選擇合適的GGUF模型格式
模型相關資源

✨ 主要特性
最新動態
- [2025.06.06] MiniCPM4 系列發佈!該模型在相同規模下保持最佳性能的同時,實現了極致的效率提升!在典型的端側芯片上,它可以實現超過5倍的生成加速!你可以在 這裡 找到技術報告。
MiniCPM4系列模型
MiniCPM4系列是專門為端側設備設計的高效大語言模型,通過在模型架構、訓練數據、訓練算法和推理系統四個關鍵維度進行系統創新,實現了這種效率。
- MiniCPM4-8B:MiniCPM4的旗艦模型,擁有80億參數,在8T個token上進行訓練。(<-- 你正在查看此模型)
- MiniCPM4-0.5B:MiniCPM4的小型版本,擁有0.5億參數,在1T個token上進行訓練。
- MiniCPM4-8B-Eagle-FRSpec:用於FRSpec的Eagle頭,加速MiniCPM4-8B的推測推理。
- MiniCPM4-8B-Eagle-FRSpec-QAT-cpmcu:使用QAT為FRSpec訓練的Eagle頭,有效整合推測和量化,為MiniCPM4-8B實現超加速。
- MiniCPM4-8B-Eagle-vLLM:vLLM格式的Eagle頭,加速MiniCPM4-8B的推測推理。
- MiniCPM4-8B-marlin-Eagle-vLLM:用於vLLM格式的量化Eagle頭,加速MiniCPM4-8B的推測推理。
- BitCPM4-0.5B:將極端三元量化應用於MiniCPM4-0.5B,將模型參數壓縮為三元值,實現了90%的比特寬度減少。
- BitCPM4-1B:將極端三元量化應用於MiniCPM3-1B,將模型參數壓縮為三元值,實現了90%的比特寬度減少。
- MiniCPM4-Survey:基於MiniCPM4-8B,接受用戶的查詢作為輸入,並自主生成可信的長篇調查論文。
- MiniCPM4-MCP:基於MiniCPM4-8B,接受用戶的查詢和可用的MCP工具作為輸入,並自主調用相關的MCP工具以滿足用戶的需求。
模型優勢
MiniCPM 4是一個極其高效的邊緣側大模型,在模型架構、學習算法、訓練數據和推理系統四個維度進行了高效優化,實現了極致的效率提升。
- 高效的模型架構:
- InfLLM v2 -- 可訓練的稀疏注意力機制:採用可訓練的稀疏注意力機制架構,在處理128K長文本時,每個token只需要與不到5%的token計算相關性,顯著減少了長文本的計算開銷。
- 高效的學習算法:
- 模型風洞2.0 -- 高效可預測的縮放:引入下游任務性能的縮放預測方法,實現更精確的模型訓練配置搜索。
- BitCPM -- 極致三元量化:將模型參數的比特寬度壓縮為3個值,實現了90%的極端模型比特寬度減少。
- 高效訓練工程優化:採用FP8低精度計算技術,結合多token預測訓練策略。
- 高質量的訓練數據:
- UltraClean -- 高質量預訓練數據過濾和生成:基於高效的數據驗證構建迭代數據清理策略,開源高質量的中英預訓練數據集 UltraFinweb。
- UltraChat v2 -- 高質量監督微調數據生成:構建大規模高質量的監督微調數據集,涵蓋知識密集型數據、推理密集型數據、指令跟隨數據、長文本理解數據和工具調用數據等多個維度。
- 高效的推理系統:
- CPM.cu -- 輕量級高效的CUDA推理框架:集成稀疏注意力、模型量化和推測採樣,實現高效的預填充和解碼。
- ArkInfer -- 跨平臺部署系統:支持在多個後端環境中進行高效部署,提供靈活的跨平臺適應能力。
📦 安裝指南
安裝CPM.cu
git clone https://github.com/OpenBMB/cpm.cu.git --recursive
cd cpm.cu
python3 setup.py install
安裝infllmv2_cuda_impl
git clone -b feature_infer https://github.com/OpenBMB/infllmv2_cuda_impl.git
cd infllmv2_cuda_impl
git submodule update --init --recursive
pip install -e . # or python setup.py install
安裝SGLang
git clone -b openbmb https://github.com/OpenBMB/sglang.git
cd sglang
pip install --upgrade pip
pip install -e "python[all]"
安裝vLLM
pip install -U vllm \
--pre \
--extra-index-url https://wheels.vllm.ai/nightly
💻 使用示例
使用CPM.cu進行推理
# 啟用LongRoPE
{
...,
"rope_scaling": {
"rope_type": "longrope",
"long_factor": [0.9977997200264581, 1.014658295992452, 1.0349680404997148, 1.059429246056193, 1.0888815016813513, 1.1243301355211495, 1.166977103606075, 1.2182568066927284, 1.2798772354275727, 1.3538666751582975, 1.4426259039919596, 1.5489853358570191, 1.6762658237220625, 1.8283407612492941, 2.0096956085876183, 2.225478927469756, 2.481536379650452, 2.784415934557119, 3.1413289096347365, 3.560047844772632, 4.048719380066383, 4.752651957515948, 5.590913044973868, 6.584005926629993, 7.7532214876576155, 9.119754865903639, 10.704443927019176, 12.524994176518703, 14.59739595363613, 16.93214476166354, 19.53823297353041, 22.417131025031697, 25.568260840911098, 28.991144156566317, 32.68408069090375, 36.65174474170465, 40.90396065611201, 45.4664008671033, 50.37147343433591, 55.6804490772103, 61.470816952306556, 67.8622707390618, 75.00516023410414, 83.11898235973767, 92.50044360202462, 103.57086856690864, 116.9492274587385, 118.16074567836519, 119.18497548708795, 120.04810876261652, 120.77352815196981, 121.38182790207875, 121.89094985353891, 122.31638758099915, 122.6714244963338, 122.9673822552567, 123.21386397019609, 123.41898278254268, 123.58957065488238, 123.73136519024158, 123.84917421274221, 123.94701903496814, 124.02825801299717, 124.09569231686116],
"short_factor": [0.9977997200264581, 1.014658295992452, 1.0349680404997148, 1.059429246056193, 1.0888815016813513, 1.1243301355211495, 1.166977103606075, 1.2182568066927284, 1.2798772354275727, 1.3538666751582975, 1.4426259039919596, 1.5489853358570191, 1.6762658237220625, 1.8283407612492941, 2.0096956085876183, 2.225478927469756, 2.481536379650452, 2.784415934557119, 3.1413289096347365, 3.560047844772632, 4.048719380066383, 4.752651957515948, 5.590913044973868, 6.584005926629993, 7.7532214876576155, 9.119754865903639, 10.704443927019176, 12.524994176518703, 14.59739595363613, 16.93214476166354, 19.53823297353041, 22.417131025031697, 25.568260840911098, 28.991144156566317, 32.68408069090375, 36.65174474170465, 40.90396065611201, 45.4664008671033, 50.37147343433591, 55.6804490772103, 61.470816952306556, 67.8622707390618, 75.00516023410414, 83.11898235973767, 92.50044360202462, 103.57086856690864, 116.9492274587385, 118.16074567836519, 119.18497548708795, 120.04810876261652, 120.77352815196981, 121.38182790207875, 121.89094985353891, 122.31638758099915, 122.6714244963338, 122.9673822552567, 123.21386397019609, 123.41898278254268, 123.58957065488238, 123.73136519024158, 123.84917421274221, 123.94701903496814, 124.02825801299717, 124.09569231686116],
"original_max_position_embeddings": 32768
}
}
修改後,你可以運行以下命令來重現長上下文加速效果(腳本將自動從HuggingFace下載模型權重):
python3 tests/test_generate.py
使用Transformers進行推理
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
torch.manual_seed(0)
path = 'openbmb/MiniCPM4-8B'
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map=device, trust_remote_code=True)
# 用戶可以直接使用聊天界面
# responds, history = model.chat(tokenizer, "Write an article about Artificial Intelligence.", temperature=0.7, top_p=0.7)
# print(responds)
# 用戶也可以使用生成界面
messages = [
{"role": "user", "content": "Write an article about Artificial Intelligence."},
]
prompt_text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer([prompt_text], return_tensors="pt").to(device)
model_outputs = model.generate(
**model_inputs,
max_new_tokens=1024,
top_p=0.7,
temperature=0.7
)
output_token_ids = [
model_outputs[i][len(model_inputs[i]):] for i in range(len(model_inputs['input_ids']))
]
responses = tokenizer.batch_decode(output_token_ids, skip_special_tokens=True)[0]
print(responses)
啟用InfLLM v2
MiniCPM4-8B支持 InfLLM v2
,這是一種專為高效長序列推理設計的稀疏注意力機制。它需要 infllmv2_cuda_impl 庫。
git clone -b feature_infer https://github.com/OpenBMB/infllmv2_cuda_impl.git
cd infllmv2_cuda_impl
git submodule update --init --recursive
pip install -e . # or python setup.py install
要啟用InfLLM v2,你需要在 config.json
中添加 sparse_config
字段:
{
...,
"sparse_config": {
"kernel_size": 32,
"kernel_stride": 16,
"init_blocks": 1,
"block_size": 64,
"window_size": 2048,
"topk": 64,
"use_nope": false,
"dense_len": 8192
}
}
這些參數控制InfLLM v2的行為:
kernel_size
(默認值:32):語義核的大小。kernel_stride
(默認值:16):相鄰核之間的步長。init_blocks
(默認值:1):每個查詢token關注的初始塊數。這確保了對序列開頭的關注。block_size
(默認值:64):鍵值塊的塊大小。window_size
(默認值:2048):局部滑動窗口的大小。topk
(默認值:64):指定每個token只與最相關的前k個鍵值塊計算注意力。use_nope
(默認值:false):是否在塊選擇中使用NOPE技術以提高性能。dense_len
(默認值:8192):由於稀疏注意力對短序列的好處有限,模型可以對較短的文本使用標準(密集)注意力。模型將對token長度低於dense_len
的序列使用密集註意力,並對超過此長度的序列切換到稀疏注意力。將此值設置為-1
以始終使用稀疏注意力,而不管序列長度如何。
使用SGLang進行推理
git clone -b openbmb https://github.com/OpenBMB/sglang.git
cd sglang
pip install --upgrade pip
pip install -e "python[all]"
啟動推理服務器:
python -m sglang.launch_server --model openbmb/MiniCPM4-8B --trust-remote-code --port 30000 --chat-template chatml
使用聊天界面:
import openai
client = openai.Client(base_url=f"http://localhost:30000/v1", api_key="None")
response = client.chat.completions.create(
model="openbmb/MiniCPM4-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.7,
max_tokens=1024,
)
print(response.choices[0].message.content)
使用vLLM進行推理
pip install -U vllm \
--pre \
--extra-index-url https://wheels.vllm.ai/nightly
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
model_name = "openbmb/MiniCPM4-8B"
prompt = [{"role": "user", "content": "Please recommend 5 tourist attractions in Beijing. "}]
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
input_text = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True)
llm = LLM(
model=model_name,
trust_remote_code=True,
max_num_batched_tokens=32768,
dtype="bfloat16",
gpu_memory_utilization=0.8,
)
sampling_params = SamplingParams(top_p=0.7, temperature=0.7, max_tokens=1024, repetition_penalty=1.02)
outputs = llm.generate(prompts=input_text, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
啟動推理服務器:
vllm serve openbmb/MiniCPM4-8B
使用聊天界面:
import openai
client = openai.Client(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="openbmb/MiniCPM4-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.7,
max_tokens=1024,
extra_body=dict(add_special_tokens=True), # 確保為聊天模板添加特殊token
)
print(response.choices[0].message.content)
📚 詳細文檔
長文本處理
MiniCPM4原生支持高達32,768個token的上下文長度。對於總長度(包括輸入和輸出)顯著超過此限制的對話,我們建議使用RoPE縮放技術來有效處理長文本。我們通過修改LongRoPE因子,驗證了模型在高達131,072個token的上下文長度上的性能。
你可以通過修改模型文件來應用LongRoPE因子修改。具體來說,在 config.json
文件中,調整 rope_scaling
字段。
{
...,
"rope_scaling": {
"rope_type": "longrope",
"long_factor": [0.9977997200264581, 1.014658295992452, 1.0349680404997148, 1.059429246056193, 1.0888815016813513, 1.1243301355211495, 1.166977103606075, 1.2182568066927284, 1.2798772354275727, 1.3538666751582975, 1.4426259039919596, 1.5489853358570191, 1.6762658237220625, 1.8283407612492941, 2.0096956085876183, 2.225478927469756, 2.481536379650452, 2.784415934557119, 3.1413289096347365, 3.560047844772632, 4.048719380066383, 4.752651957515948, 5.590913044973868, 6.584005926629993, 7.7532214876576155, 9.119754865903639, 10.704443927019176, 12.524994176518703, 14.59739595363613, 16.93214476166354, 19.53823297353041, 22.417131025031697, 25.568260840911098, 28.991144156566317, 32.68408069090375, 36.65174474170465, 40.90396065611201, 45.4664008671033, 50.37147343433591, 55.6804490772103, 61.470816952306556, 67.8622707390618, 75.00516023410414, 83.11898235973767, 92.50044360202462, 103.57086856690864, 116.9492274587385, 118.16074567836519, 119.18497548708795, 120.04810876261652, 120.77352815196981, 121.38182790207875, 121.89094985353891, 122.31638758099915, 122.6714244963338, 122.9673822552567, 123.21386397019609, 123.41898278254268, 123.58957065488238, 123.73136519024158, 123.84917421274221, 123.94701903496814, 124.02825801299717, 124.09569231686116],
"short_factor": [0.9977997200264581, 1.014658295992452, 1.0349680404997148, 1.059429246056193, 1.0888815016813513, 1.1243301355211495, 1.166977103606075, 1.2182568066927284, 1.2798772354275727, 1.3538666751582975, 1.4426259039919596, 1.5489853358570191, 1.6762658237220625, 1.8283407612492941, 2.0096956085876183, 2.225478927469756, 2.481536379650452, 2.784415934557119, 3.1413289096347365, 3.560047844772632, 4.048719380066383, 4.752651957515948, 5.590913044973868, 6.584005926629993, 7.7532214876576155, 9.119754865903639, 10.704443927019176, 12.524994176518703, 14.59739595363613, 16.93214476166354, 19.53823297353041, 22.417131025031697, 25.568260840911098, 28.991144156566317, 32.68408069090375, 36.65174474170465, 40.90396065611201, 45.4664008671033, 50.37147343433591, 55.6804490772103, 61.470816952306556, 67.8622707390618, 75.00516023410414, 83.11898235973767, 92.50044360202462, 103.57086856690864, 116.9492274587385, 118.16074567836519, 119.18497548708795, 120.04810876261652, 120.77352815196981, 121.38182790207875, 121.89094985353891, 122.31638758099915, 122.6714244963338, 122.9673822552567, 123.21386397019609, 123.41898278254268, 123.58957065488238, 123.73136519024158, 123.84917421274221, 123.94701903496814, 124.02825801299717, 124.09569231686116],
"original_max_position_embeddings": 32768
}
}
vLLM推理注意事項
⚠️ 重要提示
在vLLM的聊天API中,
add_special_tokens
默認值為False
。這意味著重要的特殊token(如序列開始(BOS)token)不會自動添加。為確保輸入提示正確格式化以適應模型,你應該明確設置extra_body={"add_special_tokens": True}
。
📄 許可證
本項目採用Apache 2.0許可證。



