跳到主要内容
返回

MiniCPM4.1 & MiniCPM4

MiniCPM 文本系列

根据运行环境选择 Transformers、vLLM、SGLang 或 CPM.cu,按需了解稠密与稀疏推理、混合思考和投机采样。MiniCPM4.1 还提供 llama.cpp 与 Ollama 的使用入口,请留意每一节适用的模型版本。

模型推理​

你可以使用 Huggingface Transformers、vLLM、SGLang、CPM.cu 对模型进行推理。

若关注推理效率,可以优先尝试 CPM.cu。

MiniCPM4 / MiniCPM4.1 支持稠密推理与稀疏推理两种模式,其中 vLLM 与 SGLang 目前只支持了稠密推理模式。如果想要使用稀疏推理模式,请使用 Huggingface Transformers 及 CPM.cu。

  • 稠密注意力推理:vLLM、SGLang、Huggingface Transformers
  • 稀疏注意力推理:Huggingface Transformers、CPM.cu

混合思考(MiniCPM4.1)​

MiniCPM4.1 支持混合思考模式,可以用于深度思考和非思考模式。用户可以通过设置 enable_thinking=True 来启用混合思考模式,设置 enable_thinking=False 来启用非思考模式。同样,用户可以直接在查询末尾添加 /no_think 来启用非思考模式。如果未添加任何特殊标记或在查询末尾添加 /think,模型将启用思考模式。

Python
# Enable reasoning mode
prompt_text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True
)
# Enable non-reasoning mode
prompt_text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)

Huggingface Transformers​

稠密注意力推理​

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

path = 'openbmb/MiniCPM4.1-8B'
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map=device, trust_remote_code=True)

# User can directly use the chat interface
# responds, history = model.chat(tokenizer, "Write an article about Artificial Intelligence.", temperature=0.7, top_p=0.7)
# print(responds)

# User can also use the generate interface
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=32768,
top_p=0.95,
temperature=0.6
)
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,可高效处理长序列推理。如需启用该功能,请先安装依赖库 infllmv2_cuda_impl。

运行以下命令即可安装:

Bash
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 字段:

JSON
{
...,
"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
}
}

配置参数说明

参数默认值作用说明
kernel_size32语义核大小
kernel_stride16相邻语义核之间的步长
init_blocks1每个 query token 关注的初始块数量,用于确保模型能够关注序列开头部分
block_size64key-value blocks 的块大小
window_size2048局部滑动窗口大小
topk64每个 token 仅与最相关的 top-k 个 key-value blocks 计算注意力
use_nopefalse是否在块选择中使用 NOPE 技术,以提升性能
dense_len8192当 token 长度低于该阈值时,自动切换为标准注意力;
设为 -1 时,强制始终使用稀疏注意力

长度扩展​

MiniCPM4.1 原生支持 65,536 tokens 的上下文长度。若对话总长度(输入 + 输出)远超此限制,建议通过 RoPE 缩放技术扩展上下文。通过调整 LongRoPE 因子,模型可稳定支持 131,072 tokens 的超长上下文。

修改方法:在 config.json 文件中调整 rope_scaling 字段参数即可。

JSON
{
...,
"rope_scaling": {
"rope_type": "longrope",
"long_factor": [0.9982316082870437, 1.033048153422584, 1.0749920956484724, 1.1255096879436193, 1.1863348602111476, 1.259543828902579, 1.3476188888731149, 1.4535223827776373, 1.5807816745852985, 1.7335856049489526, 1.9168922912975785, 2.1365471404135326, 2.3994084200118646, 2.713475511863602, 3.0880118452194134, 3.533650295140154, 4.062463396503134, 4.687974098908333, 5.425075306704039, 6.289818967956352, 7.29902962722721, 8.6357018163639, 10.210822723989212, 12.053807765671676, 14.193944598909404, 16.65780676784363, 19.463620727694074, 22.628311203524586, 26.150106147261315, 30.02526691405111, 34.23183327975347, 38.73811934094828, 43.502489489729555, 48.47627117965394, 53.61139491762471, 58.857366522037935, 64.16798299215064, 69.51359464319125, 74.86555458220285, 80.21497790341579, 85.55322183307433, 90.89611806932027, 96.26245306514224, 101.68269304046481, 107.18619510219668, 112.82253283014026, 118.63764063163615, 119.88866203644656, 120.9462882391725, 121.837565139014, 122.58663780572562, 123.2147719894291, 123.74049454862576, 124.17980424685767, 124.54641761955492, 124.85202548028222, 125.10654406389756, 125.31835105170659, 125.49450117164764, 125.64091910903052, 125.76256945356558, 125.86360463815589, 125.94749252260765, 126.01712561287873],
"short_factor": [0.9982316082870437, 1.033048153422584, 1.0749920956484724, 1.1255096879436193, 1.1863348602111476, 1.259543828902579, 1.3476188888731149, 1.4535223827776373, 1.5807816745852985, 1.7335856049489526, 1.9168922912975785, 2.1365471404135326, 2.3994084200118646, 2.713475511863602, 3.0880118452194134, 3.533650295140154, 4.062463396503134, 4.687974098908333, 5.425075306704039, 6.289818967956352, 7.29902962722721, 8.6357018163639, 10.210822723989212, 12.053807765671676, 14.193944598909404, 16.65780676784363, 19.463620727694074, 22.628311203524586, 26.150106147261315, 30.02526691405111, 34.23183327975347, 38.73811934094828, 43.502489489729555, 48.47627117965394, 53.61139491762471, 58.857366522037935, 64.16798299215064, 69.51359464319125, 74.86555458220285, 80.21497790341579, 85.55322183307433, 90.89611806932027, 96.26245306514224, 101.68269304046481, 107.18619510219668, 112.82253283014026, 118.63764063163615, 119.88866203644656, 120.9462882391725, 121.837565139014, 122.58663780572562, 123.2147719894291, 123.74049454862576, 124.17980424685767, 124.54641761955492, 124.85202548028222, 125.10654406389756, 125.31835105170659, 125.49450117164764, 125.64091910903052, 125.76256945356558, 125.86360463815589, 125.94749252260765, 126.01712561287873],
"original_max_position_embeddings": 65536
}
}

vLLM​

你可以使用投机采样加速模型生成,也可以使用标准模式部署模型。

投机采样​

使用 vLLM 进行加速推理的投机采样步骤如下:

  1. 下载 MiniCPM4.1 草稿模型
Bash
cd /your_path
git clone https://huggingface.co/openbmb/MiniCPM4.1-8B-Eagle3
  1. 安装 EAGLE3 兼容的 vLLM

EAGLE3 的 vLLM PR 已经提交。目前请使用我们的仓库进行安装:

Bash
git clone https://github.com/LDLINGLINGLING/vllm.git
cd vllm
pip install -e .
  1. 启动带有投机采样的 vLLM 服务

请确保在 speculative-config 中将模型路径更新为下载的 MiniCPM4_1-8B-Eagle3-bf16 文件夹:

Bash
VLLM_USE_V1=1 \
vllm serve openbmb/MiniCPM4.1-8B \
--seed 42 \
--trust-remote-code \
--speculative-config '{
"model": "your/path/MiniCPM4_1-8B-Eagle3-bf16",
"num_speculative_tokens": 3,
"method": "eagle3",
"draft_tensor_parallel_size": 1
}'
  1. 客户端使用示例

客户端使用方式在标准解码和投机采样下保持一致:

Python
import openai

client = openai.Client(base_url="http://localhost:8000/v1", api_key="EMPTY")

response = client.chat.completions.create(
model="openbmb/MiniCPM4.1-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.6,
max_tokens=32768,
extra_body=dict(add_special_tokens=True), # 确保在聊天模板中加入特殊符号

)

print(response.choices[0].message.content)

配置参数说明

参数默认值 / 示例作用说明
VLLM_USE_V11启用 vLLM v1 API
--speculative-configJSON 配置投机采样相关配置,用于指定草稿模型、推测 token 数量、采样方法等参数
model草稿模型路径指定投机采样中使用的草稿模型路径
num_speculative_tokens3每次推测生成的 token 数量
methodeagle3指定投机采样方法
draft_tensor_parallel_size1草稿模型的张量并行大小
--seed随机种子设置随机种子,用于保证结果可复现
--trust-remote-code无允许执行远程代码,以支持自定义模型结构或模型实现

标准推理(不使用投机采样)​

目前你需要安装最新版本的 vLLM。

Bash
pip install -U vllm \
--pre \
--extra-index-url https://wheels.vllm.ai/nightly

然后可以用 vLLM 推理 MiniCPM4.1-8B:

Python
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

model_name = "openbmb/MiniCPM4.1-8B"
prompt = [{"role": "user", "content": "Write an article about Artificial Intelligence."}]

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=65536,
dtype="bfloat16",
gpu_memory_utilization=0.8,
)
sampling_params = SamplingParams(top_p=0.95, temperature=0.6, max_tokens=32768)

outputs = llm.generate(prompts=input_text, sampling_params=sampling_params)

print(outputs[0].outputs[0].text)

你也可以通过以下命令启动推理服务:

Bash
vllm serve openbmb/MiniCPM4.1-8B --trust-remote-code

注意: 在 vLLM 的 chat API 中,add_special_tokens 默认是 False。这意味着重要的特殊符号——比如序列开始符(BOS token)——不会被自动加入。为了确保输入提示对模型格式正确,建议显式设置 extra_body={"add_special_tokens": True}。

然后可以通过以下代码使用聊天接口:

Python
import openai

client = openai.Client(base_url="http://localhost:8000/v1", api_key="EMPTY")

response = client.chat.completions.create(
model="openbmb/MiniCPM4.1-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.6,
max_tokens=32768,
extra_body=dict(add_special_tokens=True), # 确保在聊天模板中加入特殊符号
)

print(response.choices[0].message.content)

SGLang​

你可以使用投机采样加速模型生成,也可以使用标准模式部署模型。

投机采样​

使用投机采样进行加速推理的步骤如下:

  1. 下载 MiniCPM4.1 草稿模型
Bash
cd /your_path
git clone https://huggingface.co/openbmb/MiniCPM4.1-8B-Eagle3
  1. 安装 EAGLE3 兼容的 SGLang

EAGLE3 的适配 PR 已经提交。目前请使用我们的仓库进行安装:

Bash
git clone https://github.com/LDLINGLINGLING/sglang.git
cd sglang
pip install -e .
  1. 启动带有投机采样的 SGLang 服务
Bash
python -m sglang.launch_server \
--model-path "openbmb/MiniCPM4.1-8B" \
--host "127.0.0.1" \
--port 30002 \
--mem-fraction-static 0.9 \
--speculative-algorithm EAGLE3 \
--speculative-draft-model-path "your/path/MiniCPM4_1-8B-Eagle3-bf16" \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 32 \
--temperature 0.7
  1. 客户端使用示例

客户端使用方式在标准解码和投机采样下保持一致:

Python
import openai

client = openai.Client(base_url=f"http://localhost:30002/v1", api_key="None")

response = client.chat.completions.create(
model="openbmb/MiniCPM4.1-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.6,
max_tokens=32768,
)

print(response.choices[0].message.content)

注意:请确保在客户端代码中更新端口号,以匹配服务端端口(在投机采样示例中为 30002)。

配置参数说明

参数默认值 / 示例作用说明
--speculative-algorithmEAGLE3启用 EAGLE3 投机采样算法。
--speculative-draft-model-path草稿模型路径指定投机采样中使用的草稿模型路径。
--speculative-num-steps3推测步数,即每轮投机采样向前推测的步数。
--speculative-eagle-topk1EAGLE 的 top-k 参数,用于控制草稿 token 候选范围。
--speculative-num-draft-tokens32草稿模型生成的 draft token 数量。
--mem-fraction-static0.9静态分配的显存比例,用于控制推理服务预分配显存的占比。

标准推理(不使用投机采样)​

目前你需要安装我们 fork 的 SGLang 版本。

Bash
git clone -b openbmb https://github.com/OpenBMB/sglang.git
cd sglang

pip install --upgrade pip
pip install -e "python[all]"

你可以通过以下命令启动推理服务:

Bash
python -m sglang.launch_server --model openbmb/MiniCPM4.1-8B --trust-remote-code --port 30000 --chat-template chatml

然后可以通过以下代码使用聊天接口:

Python
import openai

client = openai.Client(base_url=f"http://localhost:30000/v1", api_key="None")

response = client.chat.completions.create(
model="openbmb/MiniCPM4.1-8B",
messages=[
{"role": "user", "content": "Write an article about Artificial Intelligence."},
],
temperature=0.6,
max_tokens=32768,
)

print(response.choices[0].message.content)

CPM.cu​

我们推荐使用 CPM.cu 对 MiniCPM4 和 MiniCPM4.1 模型进行推理。CPM.cu 是面壁开发的一个集合了高效稀疏、投机采样、量化等技术的 CUDA 推理框架,能够完全发挥 MiniCPM4 和 MiniCPM4.1 的效率优势。

你可以通过以下脚本安装 CPM.cu 并进行推理:

Bash
git clone https://github.com/OpenBMB/CPM.cu.git --recursive
cd CPM.cu
python3 setup.py install

你可以通过以下命令进行推理并查看模型的运行速度。

Bash
python3 tests/long_prompt_gen.py # 生成 prompt.txt
python3 tests/test_generate.py --prompt-file prompt.txt

你可以通过一下命令使用 EAGLE3 进行投机推理。

Bash
python3 -m cpmcu.cli \
--model-path $BASE_MODEL_PATH \
--draft-model-path $EAGLE3_DRAFT_MODEL_PATH \
--prompt-text "Tell me about Tsinghua University" \
--use-eagle3 true

更多关于 CPM.cu 的细节,请参考 CPM.cu 仓库。


llama.cpp​

你可以从 huggingface 下载 MiniCPM4.1-8B 的 GGUF 格式模型,并使用 llama.cpp 进行推理。

Bash
# case 1: main-cli
./build/bin/llama-cli -m MiniCPM4.1-8B-Q4_K_M.gguf -p "Write an article about Artificial
Intelligence." -n 1500

# case 2: server
## launch server
./build/bin/llama-server -m MiniCPM4.1-8B-Q4_K_M.gguf --host 127.0.0.1 --port 8080 -c
4096 -fa on &

## send request
curl -X POST http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Write an article about Artificial
Intelligence."}],
"max_tokens": 1500
}'

Ollama​

请前往 模型库 下载模型。安装好 Ollama 后,可以通过以下命令使用 MiniCPM4.1:

Bash
ollama run openbmb/minicpm4.1

开发者精选

查看全部 →
MiniCPM 文本VoxCPM 语音ESP32 塔台雷达:AI 语音播报航班圆屏塔台雷达,用克隆管制员音色播报航班MiniCPM 文本猫娘大模型的自进化:OPSD 涌现推理能力不请教师、不换底座,让猫娘在自我蒸馏中涌现数学推理MiniCPM 文本ReJev:轻量决策模型后训练LoRA 后训练 MiniCPM5-2B,留出集准确率 51.1% → 80.5%MiniCPM 文本BMB Agent:由 MiniCPM 驱动的个人助手让 2B 端侧模型接管日程与待办,.funcall 协议实战与踩坑记录MiniCPM 文本MetaCog:小裁判引导推理推理时元认知循环,多路径打分择优作答MiniCPM 文本MiniCPM News Desk:本地新闻简报本地小模型挑选原文段落,生成每日新闻汇总MiniCPM 文本WebGPU Pi:浏览器本地编程 AgentMiniCPM5-2B 经 WebGPU 在浏览器本地运行的编程 AgentMiniCPM 文本MiniCPM5-1B Tool-Use:离线函数调用SFT + GRPO 的 1B 函数调用模型,CPU 离线运行MiniCPM 文本deku:本地可信任务助手代码负责规划、模型只做简短补全的本地问答 AgentMiniCPM 文本MiniCPM5-1B:端侧部署与多语评测INT8 LiteRT-LM 端侧包,附西语等四种语言评测MiniCPM 文本MiniCPM-V 多模态MiniCPM Agent Gateway:端云协同网关本地 MiniCPM 判断数据策略,敏感请求不出本机MiniCPM 文本ToneBridge:情境化中文纠错按场景语气小幅修改中文句子,附拼音与发音MiniCPM 文本MiniCPM5-1B FP8:GPU 推理加速RTX 3060 解码 248 tok/s,比 BF16 快 1.5 倍MiniCPM 文本AUGURY:从杂草读懂土壤通过杂草物种推断土壤状况,可在手机端运行MiniCPM 文本gmgn-minicpm:本地链上研究 Agent1B 模型本地驱动的只读 GMGN 链上研究助手MiniCPM 文本MiniCPM-V 多模态Lost & Found Desk:小模型失物招领MiniCPM-V 描述物品、MiniCPM5 引导问询,人工确认归还MiniCPM 文本MiniCPM-V 多模态VoxCPM 语音CoreAI Model Zoo:MiniCPM 原生上 iPhoneMiniCPM5、MiniCPM-V 4.6 转换为 Core AI 原生运行MiniCPM 文本MiniCPM-V 多模态Viva Mais:WhatsApp 本地 CRM把旅行社的 WhatsApp 聊天整理成本地 CRMMiniCPM 文本天问:1B 模型解八字周易用 1B 模型把八字与周易变成自我反思MiniCPM 文本WanderLust:按心情规划步行按心情规划从 A 到 B 的探索式步行路线MiniCPM 文本NIGHTWAVE:1B 模型深夜电台由 1B 模型主持、可现场来电的复古电台MiniCPM 文本6ixPulse:多伦多租房地图多智能体比较多伦多街区,结论都标注数据来源MiniCPM 文本华尔街 AI:小模型交易公司四个小模型智能体在像素办公室里自主炒股MiniCPM 文本Hackathon Advisor:选题地图顾问用创意地图评估黑客松选题的原创性MiniCPM 文本LLM Cinema:AI 导演 ASCII 电影小模型自编自导 ASCII 动画短片MiniCPM 文本tiny-llm:纯 Rust 推理引擎纯 Rust 手写、仅用 CPU 的 MiniCPM5-1B 推理引擎MiniCPM 文本Document Field Agent:文档字段抽取批量文档 OCR 与结构化字段抽取工作台MiniCPM 文本MiniCPM-V 多模态当猫娘学会思考,手机也能部署这个模型难道真的是为了猫娘而生的吗?端侧部署实测MiniCPM 文本MiniCPM-V 多模态让 1B 小模型当好数学 AgentTeXada 的 MiniCPM 端侧实践与方法沉淀MiniCPM 文本ORG-2:Coding Agent 工作台统一编排与管理多个编程 Agent 的组织工作台MiniCPM 文本EdgeHome Harness用 Rust 为 1B 端侧小模型构建可回放、可评测的本地控制链路MiniCPM 文本榨干 NAS!接入 WorkBuddyN150 CPU 跑本地 AI,分享一些真实用法和踩坑经验