MiniCPM 2.0 系列技术详解128k 长上下文、MoE 与稀疏化推理实践【免费下载链接】MiniCPMMiniCPM4 MiniCPM4.1: Ultra-Efficient LLMs on End Devices, achieving 3 generation speedup on reasoning tasks项目地址: https://gitcode.com/OpenBMB/MiniCPMMiniCPM 2.0 是 OpenBMB 开源社区在 MiniCPM 1.0 基础上升级的第二代语言模型系列通过长上下文扩展、MoEMixture-of-Experts扩展、小模型压缩与 FFN 稀疏化四条技术路线在参数规模不变甚至更小的前提下进一步释放端侧模型的潜力。本篇以 docs/README-minicpm2-cn.md 为骨架结合仓库内的推理 Demo、微调脚本与评测数据完整讲解该系列四个模型版本的能力边界、评测表现以及从 HuggingFace、vLLM 到 PowerInfer 的完整推理部署方案读完即可按步骤复现 MiniCPM 2.0 全系列的本地推理。MiniCPM 2.0 系列总览MiniCPM 2.0 系列围绕“更小参数、更强能力”这一目标对 MiniCPM 做了四个维度的升级共发布四个模型版本模型版本技术要点核心提升MiniCPM-2B-128k将 MiniCPM-2B 的上下文长度从 4k 扩展至 128k在 InfiniteBench 测试集上优于 ChatGLM3-6B-128k、Yi-6B-200k 等更大参数量的长文本模型MiniCPM-MoE-8x2B基于 MiniCPM-2B 进行 MoE 扩展综合表现相比 MiniCPM-2B 平均提高 4.5 个百分点MiniCPM-1B面向低成本推理的紧凑版本相比 MiniCPM-2B 推理成本下降 60%综合表现仍优于 LLaMA2-13BMiniCPM-S-1BFFN 层稀疏化ProSparse 方法平均稀疏度 87.89%FFN FLOPs 降低 84%下游任务性能无损配合 PowerInfer 推理解码速度提升约 2.8 倍从仓库主 README.md 的更新日志可以确认这四个模型的发布时间MiniCPM-2B-128k、MiniCPM-MoE-8x2B 与 MiniCPM-1B 于 2024 年 4 月发布MiniCPM-S-1B 于 2024 年 7 月发布其中 MiniCPM-S-1B 正是后续 MiniCPM3-4B 等模型能力演进的重要铺垫之一。评测结果MiniCPM-2B-128kInfiniteBench 长文本评测MiniCPM-2B-128k 在 InfiniteBench 基准上与多个更大参数量的长上下文模型对比覆盖 passkey、kv_retrieval、longbook 系列英语/中文问答、摘要、longdialogue、math_calc/math_find、code_debug/code_run 等任务具体成绩如下Modelavgavg w/o codemathpasskeynumber_stringkv_retrievallongbook_choice_englongbook_qa_chnlongbook_qa_englongbook_sum_englongdialogue_qa_engmath_calcmath_findcode_debugcode_runLWM-Text-128k24.4533.6210097.80.628.8215.9314.319.991.503.4320.051Yarn-Mistral-7b-128k19.8427.3692.71027.9515.499.559.067.5017.140.761.25Mistral-7B-Instruct-v0.2(ABF 1000w)27.7536.910078.983.637.1211.7417.3721.129.5029.4317.510Yi-6B-200k22.1532.5410094.92036.6815.079.20.923.504.290.510.75chatglm3-6b-128k25.5836.5789.9399.665.246.2910.78.3825.916.5085.331MiniCPM-2.4B-128k27.3237.6898.3199.83929.6923.0616.3315.739.504.2922.080可以看到MiniCPM-2B-128k 在总体平均分27.32与去除代码/数学后的平均分37.68上均位列第一其中 kv_retrieval9、longbook_qa_chn23.06、longdialogue_qa_eng9.5等任务优势明显同时以仅 2.4B 的参数规模胜过 Yi-6B-200k、ChatGLM3-6B-128k 等 6B 级模型体现了长上下文扩展技术的效率优势。MiniCPM-MoE-8x2B多任务综合评测MiniCPM-MoE-8x2B 由 MiniCPM-2B 通过 upcycling从稠密权重升级为专家混合结构扩展而来在 BBH、MMLU、CEval、CMMLU、HumanEval、MBPP、GSM8K、MATH 八个测试集上的结果如下ModelBBHMMLUCEvalCMMLUHumanEvalMBPP†GSM8KMATHLlama2-34B*44.162.6--22.633.042.26.24Mistral-7B-Instruct-v0.239.8160.5142.5541.9236.5939.6340.494.95Gemma-7B*55.164.3--32.344.446.424.3Qwen1.5-7B*40.26174.173.13637.462.520.3Deepseek-MoE(16B)*-45.040.642.526.839.218.84.3MiniCPM-2.4B36.8753.4651.1351.0750.0035.9353.8310.24MiniCPM-MoE-8x2B39.2258.9058.1158.8055.4941.6861.5610.52注* 表示结果取自各模型技术报告† 表示评测集为 MBPP 全集而非手工验证子集。对比 MiniCPM-2B即表中的 MiniCPM-2.4B可见MoE 化之后在除 MATH 外的所有测试集上均有提升综合表现平均提高 4.5 个百分点其中 CEval51.13 → 58.11、CMMLU51.07 → 58.80、GSM8K53.83 → 61.56、HumanEval50.00 → 55.49等提升显著。MiniCPM-S-1B稀疏化模型评测MiniCPM-S-1B 是 MiniCPM-1B 的 ProSparse 稀疏化版本。评测分为三类能力代码生成HumanEval0-shot与 MBPP3-shot的平均 pass1 得分常识推理PIQA、SIQA、HellaSwag、WinoGrande、COPA 的平均 0-shot 准确率阅读理解BoolQ、LAMBADA、TyDi QA 的平均 0-shot 准确率。其他测试集则报告 GSM8K8-shot、MMLU5-shot、BBH3-shot和 AGI-Eval0-shot的平均准确率结果如下SettingAverage SparsityAverage PerformanceCode GenerationCommonsense ReasoningReading ComprehensionGSM8KMMLUBBHAGI EvalLLaMA2-7B-37.9616.3769.5961.8712.9644.4532.9627.53ReluLLaMA-7B66.9837.6215.8569.6470.545.8438.6435.0727.73ProSparse-7B*88.1138.3119.4766.2963.3312.7445.2133.5927.55ProSparse-7B89.3238.4619.4266.2763.5012.1345.4834.9927.46LLaMA2-13B-44.0620.1972.5871.5522.2154.6937.8929.33ReluLLaMA-13B71.5642.7420.1970.4473.2918.5050.5837.9728.22ProSparse-13B*87.9745.0729.0369.7567.5425.4054.7840.2028.76ProSparse-13B88.8044.9028.4269.7666.9126.3154.3539.9028.67MiniCPM-1B-44.4436.8563.6760.9035.4850.4435.0328.71MiniCPM-S-1B*86.2544.7241.3864.5560.6934.7249.3634.0428.27MiniCPM-S-1B87.8944.7242.0464.3760.7334.5749.5134.0827.77注ProSparse-7B*、ProSparse-13B* 与 MiniCPM-S-1B* 代表没有激活阈值偏移的 ProSparse 版本对于 PIQA、SIQA、HellaSwag、WinoGrande、COPA、BoolQ、LAMBADA、TyDi QA 和 AGI-Eval按各选项的 PPL困惑度选择答案对于 GSM8K、MMLU 和 BBH直接生成答案。从表中可以看出MiniCPM-S-1B 在达到 87.89% 平均稀疏度的同时平均性能44.72与未稀疏化的 MiniCPM-1B44.44基本持平甚至略有提升代码生成42.04还优于 MiniCPM-1B36.85验证了“稀疏化无损甚至微涨”的结论。模型推理HuggingFace、vLLM 推理MiniCPM 2.0 系列中除了 MiniCPM-S-1B 需要专门配合 PowerInfer 使用外其余模型MiniCPM-2B-128k、MiniCPM-MoE-8x2B、MiniCPM-1B均可直接沿用 MiniCPM 1.0 的推理方式详见 docs/README-minicpm1-cn.md 的“模型推理”部分。以 HuggingFace 为例安装transformers4.36.0与accelerate后即可通过model.chat接口直接对话from transformers import AutoModelForCausalLM, AutoTokenizer import torch torch.manual_seed(0) path openbmb/MiniCPM-2B-dpo-bf16 tokenizer AutoTokenizer.from_pretrained(path) model AutoModelForCausalLM.from_pretrained(path, torch_dtypetorch.bfloat16, device_mapcuda, trust_remote_codeTrue) responds, history model.chat(tokenizer, 山东省最高的山是哪座山, 它比黄山高还是矮差距多少, temperature0.5, top_p0.8, repetition_penalty1.02) print(responds)需要说明的是MiniCPM 2.0 各版本模型在开源平台上的权重标识有所差异例如 MiniCPM-1B 对应的 HF 权重名为openbmb/MiniCPM-1B-sft-bf16SFT 版本用于直接对话推理。vLLM 推理则推荐安装vllm0.4.1仓库中的 Gradio 演示脚本 demo/minicpm/vllm_based_demo.py 给出了完整的 vLLM 调用方式其核心要点包括用LLM(modelpath, tensor_parallel_size1, dtypetorch_dtype, trust_remote_codeTrue, gpu_memory_utilization0.9, max_model_lenargs.max_tokens)初始化模型其中max_model_len建议设为 2048脚本注释明确说明对于 MiniCPM-1B 与 MiniCPM-2B 应设置为 2048通过tokenizer.apply_chat_template(dialog, tokenizeFalse, add_generation_promptFalse)将多轮对话构造成模型输入SamplingParams中显式设置停止符stop|im_end|与stop_token_ids并配置presence_penalty1.0、top_p、temperature等采样参数。PowerInfer 推理MiniCPM-S-1BPowerInfer 是专门针对 MiniCPM-S-1B 稀疏模型设计的推理框架通过跳过稀疏 FFN 层中的零值计算来实现加速。目前 PowerInfer 仅适配 MiniCPM-S-1B其他版本尚不支持请以仓库文档说明为准。完整步骤如下1. 确保 cmake 版本不低于 3.17如果系统中已安装过更高版本可直接跳过此步# 下载安装包 sudo wget https://cmake.org/files/v3.23/cmake-3.23.0.tar.gz # 解压安装包 sudo tar -zxvf cmake-3.23.0.tar.gz # 配置安装环境 sudo ./configure sudo make -j8 # 编译安装 sudo make install # 查看安装后版本 cmake --version # 返回版本号则安装成功 # cmake version 3.23.02. 安装 PowerInfergit clone https://github.com/SJTU-IPADS/PowerInfer cd PowerInfer pip install -r requirements.txt # 安装 Python helper 依赖3. 编译 CPU 版本如果机器只有 CPU或只想用 CPU 推理cmake -S . -B build cmake --build build --config Release4. 编译 GPU 版本如果机器有 GPUcmake -S . -B build -DLLAMA_CUBLASON cmake --build build --config Release-DLLAMA_CUBLASON选项开启 CUDA 加速对应 llama.cpp 系的 cuBLAS 后端。5. 获取稀疏模型权重git clone https://huggingface.co/openbmb/MiniCPM-S-1B-sft-gguf/tree/main # 或从 ModelScope 获取 git clone https://modelscope.cn/models/OpenBMB/MiniCPM-S-1B-sft-gguf6. 执行推理cd PowerInfer # 命令模版output_token_count 为最大输出 tokensthread_num 为线程数prompt 为输入 prompt 字符 # ./build/bin/main -m /PATH/TO/MODEL -n $output_token_count -t $thread_num -p $prompt # 示例 ./build/bin/main -m /root/ld/ld_model_pretrain/1b-s-minicpm/MiniCPM-S-1B-sft.gguf -n 2048 -t 8 -p 用户hello,tell me a story please.AI-m指定 GGUF 模型路径-n控制最大输出 token 数示例为 2048-t设置线程数示例为 8-p传入提示词。示例中使用了 MiniCPM 系列特有的用户...AI对话模板分隔符推理时请保持该格式以获得正确回复。模型微调与扩展阅读MiniCPM 2.0 系列延续了 MiniCPM 1.0 的微调生态。仓库的 finetune/README.md 提供了基于 MiniCPM-2B 的全量微调与 PEFT 微调示例支持多轮对话格式ChatGLM3 对话格式 角色级loss_mask与输入输出格式两类数据约定单机多卡 / 多机多卡 SFT 全量微调bash sft_finetune.sh脚本在 finetune/sft_finetune.sh默认配置 4 张显卡每张约占用 30245MiB 显存单机单卡 LoRA 微调bash lora_finetune.sh脚本在 finetune/lora_finetune.sh1 张显卡约占用 10619MiB 显存配合 DeepSpeed ZeRO-3 offload 后约 5500MiB。微调入口 finetune/finetune.py 通过ModelArgumentsmodel_name_or_path、DataArgumentstrain_data_path、eval_data_path与自定义TrainingArguments含model_max_length、use_lora、qlora等开关组织训练流程数据以 JSON 中的messages数组表示多轮对话例如{messages: [{role: user, content: 类型#裙*裙长#半身裙}, {role: assistant, content: 这款百搭时尚的仙女半身裙整体设计非常的飘逸随性穿上之后每个女孩子都能瞬间变成小仙女啦。}]}总结MiniCPM 2.0 系列通过四条差异化路线覆盖了端侧模型的典型诉求MiniCPM-2B-128k解决长文本场景MiniCPM-MoE-8x2B以近似激活参数规模换取更强综合能力MiniCPM-1B面向低成本推理而MiniCPM-S-1B则以 FFN 稀疏化 PowerInfer 的组合验证了“稀疏模型 专用推理引擎”在端侧加速的可行性。结合仓库中的 demo/minicpm 系列演示脚本与 finetune 微调目录开发者可以快速完成从权重获取、对话推理到定向微调的全链路落地。对于稀疏化模型建议优先使用 PowerInfer 以获得约 2.8 倍的解码加速对于其余版本HuggingFace 与 vLLM 是通用且成熟的选择。【免费下载链接】MiniCPMMiniCPM4 MiniCPM4.1: Ultra-Efficient LLMs on End Devices, achieving 3 generation speedup on reasoning tasks项目地址: https://gitcode.com/OpenBMB/MiniCPM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考