MNN-Pocket - 与 MNN 推理栈协同设计的端侧小型语言模型
MNN-Pocket-0.3B 是 taobao-mnn 发布的约 3 亿参数指令微调语言模型,与 MNN 推理栈协同设计,面向端侧部署。据项目说明,INT4 量化版本体积约 173 MB,支持最长 32K 上下文,可在 Transformers、MNN 与 llama.cpp 中运行。
MNN-Pocket 是一个与 MNN 推理栈协同设计的小型语言模型系列,目标是让语言模型直接跑在手机、平板这类端侧设备上。系列中的 MNN-Pocket-0.3B 是通用指令微调版本,参数量约 3 亿,据项目自述适合端侧助手、数据抽取和轻量级 agent 流水线;同样据项目说明,这一量级的模型并不适合高等数学、长程代码生成这类推理密集型任务。它面向的是需要在本地完成推理、对延迟和存储占用敏感的开发者,以及希望用较小模型做微调与实验的研究者。
维护者与状态
该模型由 taobao-mnn 维护,托管在 Hugging Face 上,任务类型为 text-generation,框架标注为 transformers。仓库创建于 2026-09-23,最后更新于 2026-11-10。截至 2026-11-12 的数据读取时间,近 30 天下载量为 3080,点赞数为 160。事实表中没有给出正式 release 信息,因此这里不对版本发布节奏作推断;如需确认最新权重与文件构成,应以仓库页面为准。
主要能力
以下内容来自项目自述(模型卡),未经本站独立验证。
- 体积小:约 300M 参数;据项目说明,INT4(W4A16)QAT 的 MNN 构建仅占 173 MB。
- 端侧速度:项目给出的数据是,在 iPad Pro M5 的 Metal 后端上解码可达 466 tokens/s,高于其设定的 200 tok/s 实时目标。
- 上下文长度:部署时支持最长 32K tokens;架构上位置编码可容纳 40,960 个位置。
- 中英双语:支持中文与英文,项目称其在 11 项中英文基准上的平均分为 50.00,在约 300M 量级模型中表现均衡。
- 多形态权重:除通用指令微调版外,系列还提供 Base 预训练版、SFT 中间检查点、GGUF 版(供 llama.cpp 使用,含 F16 / Q8_0 / Q4_1)、INT4 QAT 的 MNN 版,以及一个非自回归的决策模型 MNN-Pocket-0.3B-Dec。
- 对话格式:采用 ChatML 风格模板,仓库内提供
chat_template.jinja,项目建议通过tokenizer.apply_chat_template()生成输入,避免手工拼接格式出错。
架构方面,模型为 28 层、隐藏维度 896、14 个注意力头并采用 GQA(2 个 KV 头、head_dim 64),FFN 中间维度 2560(SiLU),词表 65,536,输入输出嵌入共享,原生精度 bfloat16。
使用入口
模型权重与说明文档位于 taobao-mnn/MNN-Pocket-0.3B。
据项目说明,模型针对 MNN 运行时优化,同时也能在 Transformers 与 llama.cpp 中运行。在 Transformers 中加载的方式如下:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "taobao-mnn/MNN-Pocket-0.3B"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", dtype="bfloat16")
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [{"role": "user", "content": "What is MNN?"}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", tokenize=True, return_dict=True).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512, do_sample=True, temperature=0.8, top_p=0.8, top_k=20)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
端侧部署可直接使用已发布的 INT4 QAT 构建;若需要其他精度,项目说明可用 MNN 仓库中的 llmexport 从 safetensors 导出,例如以 4 bit、block 64 导出:
python llmexport.py --path /path/to/MNN-Pocket-0.3B --export mnn --quant_bit 4 --quant_block 64
拿到 MNN 权重后,编译运行时并运行示例程序:
cd MNN mkdir build && cd build cmake .. -DMNN_LOW_MEMORY=true -DMNN_BUILD_LLM=true -DMNN_SUPPORT_TRANSFORMER_FUSE=true make -j ./llm_demo /path/to/MNN-Pocket-0.3B-MNN/config.json prompt.txt
项目说明中,编译参数、config.json 选项与 llmexport 的详细用法见 MNN-LLM 文档;llama.cpp 的使用方式则指向 GGUF 版本。
许可与限制
许可证为 apache-2.0,项目自述同样写明以 Apache License 2.0 发布,具体条款以仓库中的 LICENSE 文件为准。
使用边界方面,项目自述明确提到:与其它十亿参数以下的模型一样,不建议把它用于推理密集型负载,例如高等数学或长程代码生成。端侧速度数据是在特定设备与后端上测得的(iPad Pro M5 的 Metal 与 CPU、Snapdragon 8 Gen 5 的 OpenCL 与 CPU),实际表现会随硬件、后端与上下文长度变化。INT4 量化版本据项目说明平均分仅下降 0.41 分,但量化带来的差异仍应在自己的任务上评估。此外,模型仅支持中文与英文,多语言场景需要另行考虑。