9月5日,面壁智能发布MiniCPM3-4B,一款高性能的端侧LLM,以4B的参数量超越Phi-3.5-mini-instruct 和 GPT-3.5-Turbo-0125,并且能够比肩 Llama3.1-8B-Instruct、Qwen2-7B-Instruct、GLM-4-9B-Chat 等多个 7B-9B 参数量的模型。【强】
MiniCPM本次更新的主要功能如下:(官网介绍)
Function Calling和Code Interpreter:在Berkeley Function Calling Leaderboard (BFCL) 榜单上取得9B规模以下模型SOTA,优于 GPT-3.5-Turbo-0125。
超强推理能力:数学能力方面,MathBench 上的效果超越 GPT-3.5-Turbo 以及多个 7B-9B 模型。在非常具有挑战性的 LiveCodeBench 上,效果超越 Llama3.1-8B-Instruct。
出色的中英文指令遵循能力🤖:英文指令遵循 IFEval、中文指令遵循 FollowBench-zh 效果超越 GLM-4-9B-Chat、Qwen2-7B-Instruct。
长文本能力:原生支持 32k 上下文长度,32k 长度内大海捞针全绿。提出 LLM x MapReduce ,理论可处理的上下文长度达到 +∞。
RAG能力:我们发布了 MiniCPM RAG 套件。基于 MiniCPM 系列模型的 MiniCPM-Embedding、MiniCPM-Reranker 在中文、中英跨语言检索测试中取得 SOTA 表现;针对 RAG 场景的 MiniCPM3-RAG-LoRA 在开放域问答等多项任务上超越 Llama3-8B、Baichuan2-13B 等模型。
总的来说,在总体能力方面达到了GPT-3.5-Turbo水平,在Function Calling能力方面,接近GPT-4o。【官方说的】
MiniCPM本次更新的主要技术如下:
LLM x MapReduce:在32k原生上下文长度基础上(32k训得),引入MapReduce技术,实现无限长度上下文的处理。简单说明一下LLM x MapReduce技术:就是将超长文档切分成多个小片段,让模型并行处理每个小片段,然后将不同片段提取的关键信息进行合并,总结成一个最终的答案。LangChain中也有MapReduce的方式:map reduce 文档链首先将 LLM 链应用于每个单独的文档(Map 步骤),将链的输出视为新文档。然后将所有新文档传递给单独的合并文档链以获得单个输出(Reduce 步骤)。如果需要,它可以选择先压缩或折叠映射的文档,以确保它们适合合并文档链(通常将它们传递给 LLM)。如果需要,此压缩步骤会递归执行。【我这个理解可能更简单一些】
量化技术:通过量化技术,是优化后的内存占用量为2GB,实现更好的端侧体验。目前MiniCPM的官方仓库里面,支持gptq、awq和BnB(BitsAndBytes)的量化方式。
RAG三件套:面壁智能同时发布了MiniCPM RAG套件,包括 MiniCPM-Embedding(检索模型,中英跨语言检索SOTA,MTEB榜单中文第一没英文第十三)、MiniCPM-Reranker(重排序模型,在中文和英文,已经中英跨语言方面SOTA) ,以及针对 RAG 场景微调的MiniCPM3-RAG-LoRA模型(在NQ、TQA、MARCO、HotpotQA、WoW、FEVER和T-REx等多项任务上超越 Llama3-8B、Baichuan2-13B 等模型)。
推荐使用方式:vLLM
# vLLM安装(要安装minicpm3分支的)
pip install git+https://github.com/OpenBMB/vllm.git@minicpm3
# 推理
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
model_name = "openbmb/MiniCPM3-4B"
prompt = [{"role": "user", "content": "请写一篇关于人工智能的文章,详细介绍人工智能的未来发展和隐患。"}]
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,
tensor_parallel_size=1
)
sampling_params = SamplingParams(top_p=0.7, temperature=0.7, max_tokens=1024)
outputs = llm.generate(prompts=input_text, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
总的来说,在端侧大模型里面,MiniCPM 3是一个很好的选择,4B的参数量,量化后甚至只需要2GB的内存,小编认为在单任务或者单Agent插件方面,以及toC用户的使用与体验(在保证效果的同时,让每个人都推理的动),已经很棒了。给面壁智能点赞,期待后面的小钢炮,在整体能力方面能够达到GPT-4o的水平。
代码地址
模型地址