MiniCPM5-2B — MNN 8bit
openbmb/MiniCPM5-2B 转换并量化为 MNN 8bit(weight-only,quant_bit=8,quant_block=128,对称量化 sym=true,embed_bit=16),用于端侧 / Apple Silicon Metal 推理。架构为标准 LlamaForCausalLM(42 层,hidden 2048,max_position_embeddings 131072)。
本仓库是 yunfengwang/MiniCPM5-2B-MNN-4bit 的高精度对照版:除 quant_bit 由 4 改为 8 外,其余导出参数完全一致。
文件
| 文件 | 说明 |
|---|---|
llm.mnn |
计算图 |
llm.mnn.weight |
8bit 量化权重(~2.29 GB) |
embeddings_bf16.bin |
bf16 词嵌入(~535 MB) |
tokenizer.mtok |
分词器 |
config.json |
运行配置(默认 CPU 后端) |
config_metal.json |
Apple GPU(Metal)后端配置 |
llm_config.json |
模型结构 / chat template |
export_args.json |
转换参数 |
用法
用 MNN 的 llm_demo 运行(需 MNN_BUILD_LLM=ON + MNN_METAL=ON 编译):
# Apple Silicon 上走 Metal GPU
./llm_demo config_metal.json
# 或 CPU
./llm_demo config.json
注意:
config*.json中的llm.mnn/llm.mnn.weight/tokenizer.mtok为相对路径,MNN 按 config 文件所在目录解析,请在本仓库目录内运行。
转换方式
cd MNN/transformers/llm/export
python llmexport.py --path <MiniCPM5-2B> --export mnn \
--quant_bit 8 --quant_block 128 --sym \
--lm_quant_bit 8 --lm_quant_block 128 --embed_bit 16 \
--mnnconvert <path>/MNNConvert --dst_path .
8bit vs 4bit 实测对比
在 Apple Silicon / Metal 后端、相同采样配置下,用一组复杂任务对照 4bit 版(quant_bit=4,其余参数一致):
| 任务 | 4bit | 8bit |
|---|---|---|
| 多步应用题(三管水池注水) | ❌ 重复死循环,所有采样配置均失败 | ✅ 正确解出(3 小时) |
代码生成(括号匹配 is_valid) |
🟡 默认产不出代码,需强惩罚才勉强 | ✅ 完整正确(代码 + 复杂度 + 测试用例) |
| 中等算术(17×24) | ✅ 408 | ✅ 408 |
| 结构化知识问答(光合作用) | ✅ | ✅ |
| 翻译 + 文化典故 | 🟡 直译 | 🟡 直译、典故细节有幻觉 |
结论:
- 4bit 在长链多步推理与代码生成上会出现重复退化(陷入
<think>死循环、无法收敛),greedy 解码与提高repetition_penalty均无法稳定修复;8bit 可消除该退化。 - 代价是体积与速度:8bit 权重约为 4bit 的 2×(2.29 GB vs 1.16 GB),Metal decode 速度约慢一半(~37 tok/s vs ~57–96 tok/s)。
- 翻译/文化典故类的质量短板在 4bit 与 8bit 上都存在,属 2B 基座本身的知识局限,与量化精度无关。
选型建议:轻量问答 / 资源受限端侧 → 4bit 够用;涉及多步推理、数学应用题、代码生成 → 用本 8bit 版(或更高精度)。
参考性能(Apple Silicon / Metal)
- decode:~37 tok/s(8bit)
- prefill:受冷缓存/调优影响波动较大,仅供参考
- Downloads last month
- 15
Model tree for yunfengwang/MiniCPM5-2B-MNN-8bit
Base model
openbmb/MiniCPM5-2B