作者:胡声鼎、涂宇鸽、韩旭、崔淦渠、贺超群、赵威霖、龙翔、郑直、方晔玮、张开活、黄宇翔、戴振宁、龚柏涛、王崇屹、姚远、周界、蔡杰、张新荣、翟忠武、丁宁、贾超、曾国洋、李大海、刘知远、孙茂松等
机构:面壁智能、清华自然语言处理实验室
一、简介
MiniCPM是一系列端侧语言大模型,主体语言模型MiniCPM-2B具有2.4B的非词嵌入参数量。在综合性榜单上与Mistral-7B相近(中文、数学、代码能力更优),整体性能超越Llama2-13B、MPT-30B、Falcon-40B等模型。在当前最接近用户体感的榜单MTBench上,MiniCPM-2B也超越了Llama2-70B-Chat、Vicuna-33B、Mistral-7B-Instruct-v0.1、Zephyr-7B-alpha等众多代表性开源大模型。
我们将完全开源MiniCPM-2B的模型参数供学术研究和有限商用,以及训练过程中的所有Checkpoint和大部分非专有数据(需要一定时间准备)给模型机理研究。
具体而言,目前我们已开源以下模型:
基于MiniCPM-2B的指令微调与人类偏好对齐的MiniCPM-2B-SFT/DPO。
基于MiniCPM-2B的多模态模型MiniCPM-V,能力超越基于Phi-2的同参数级别多模态模型。
MiniCPM-2B-SFT/DPO的Int4量化版MiniCPM-2B-SFT/DPO-Int4。
基于MLC-LLM、LLMFarm开发的MiniCPM手机端程序,文本及多模态模型均可在手机端进行推理。
模型整体性能:
平均分 | 英文均分(包括代码数学推理) | 中文均分 | |
---|---|---|---|
Llama2-7B | 35.40 | 36.21 | 31.765 |
Qwen-7B | 53.87 | 52.42 | 59.655 |
Deepseek-7B | 39.96 | 39.15 | 43.635 |
Mistral-7B | 48.97 | 49.96 | 44.54 |
Llama2-13B | 41.48 | 42.44 | 37.19 |
MPT-30B | 38.17 | 39.82 | 30.715 |
Falcon-40B | 43.62 | 44.21 | 40.93 |
MiniCPM-2B | 52.33 | 52.6 | 51.1 |
局限性:
受限于模型规模,模型可能出现幻觉性问题。其中由于DPO模型生成的回复内容更长,更容易出现幻觉。我们也将持续进行MiniCPM模型的迭代改进;
为了保证在学术研究用途上模型的通用性,我们未对模型进行任何身份认同训练。同时由于我们用ShareGPT开源语料作为部分训练数据,模型可能会输出类似GPT系列模型的身份认同信息;
受限于模型规模,模型的输出受到提示词(prompt)的影响较大,可能多次尝试产生不一致的结果;
受限于模型容量,模型的知识记忆较不准确,后续我们将结合RAG方法来增强模型的知识记忆能力。
二、模型沙盒实验(Model Sandbox)
大模型的实验成本高昂,难以在不进行配置调优的情况下得到最优秀的大模型性能。
借鉴等优秀的前人工作,我们提出在小模型上进行广泛的实验,通过可迁移的配置,获得大模型的最优训练方法。MiniCPM本身,即为模型沙盒实验的成果。
我们进行了Hyper-paramters、Batch size、Learning Rate、Learning Rate Scheduler、Data Strategy 五个方面的模型沙盒研究。
1. 超参稳定的模型规模扩增
超参数对模型的性能具有重大影响,在传统训练方法中,需要对每个模型进行超参数调整,这对于大模型并不现实。借鉴的方法,我们对模型的各参数模块之间进行了连接权重的调整、以及对模型初始化的调整。部分调整接近Cerebras-GPT。
整体方案如下:
名称 | 具体操作 |
---|---|
Embedding Output Scaling | 将Embedding的输出乘12 |
Residual Connection Scaling | 将每一层的残差连接处的增量放缩为1.4/sqrt(num_layers) = 0.22倍 |
Initialization of Tensors | 将每一个二维的张量参数的初始化标准差设置为0.1/sqrt(dim_model/256) = 0.033,其他参数初始化设置为0.1 |
Learning Rate Scaling of Tensors | 将每一个二维的张量参数的学习率调整为其他部分学习率(或称整体学习率)的1/(dim_model/256) = 0.11倍 |
lm_head Scaling | 将输出logits调整为原来的0.11倍 |
上述操作的具体参数由近400次在0.009B模型规模上的贝叶斯参数搜索得到。
2. 最优Batchsize
Batchsize决定了模型的收敛速度和消耗计算资源的平衡。Batchsize过大,达到一定的损失消耗的数据量和计算量都会很大,而batchsize过小,则需要消耗过多的训练步数,且有可能损失函数下降有限。在2020年OpenAI的开山之作中,OpenAI研究了损失函数随token数变化的规律。在他们的实验中,他们将认为消耗更多的步数等价于消耗更多的时间,在这种假设下,OpenAI定义了临界Batchsize(Critical Batchsize),使得达到一定的损失,既不消耗过多step,也不消耗过多token。然而我们观察到在利用当前以A100为主的计算资源,结合gradient checkpointing策略进行训练时,通常计算速度(而不是显存)是瓶颈,这意味着在相同机器数量下,多一倍Batchsize几乎等同于慢一倍的单步时间。基于这个观察,我们取消了对“不消耗过多step”的追求,而转向追求用最少的token量达到最低的loss。
我们在0.009B,0.036B,0.17B的模型上分别进行了6个batchsize的训练实验,将结果记录如图下。
我们观察到了最优batchsize随着C4数据集上的loss的偏移规律(图中的红线)。


将这三个图的红线进行连接,并进行拟合,我们得到了如下Batchsize关于C4 Loss的规律:
根据这个规律,我们预估了2B模型达到C4损失2.5左右,4M是比较合适的Batchsize。
3. 最优学习率
由于我们使用了超参稳定的参数化方案,我们预期模型的最关键超参数:学习率,不会因为模型规模扩大有大幅度的改变,因此我们在0.04B, 0.1B, 0.3B, 0.5B上分别做了6组学习率实验,我们发现虽然模型大小扩大了10倍,但是最优学习率偏移并不明显,均在0.01左右,我们在2.1B的规模上进行了简单验证,发现在0.01 的学习率确实能取得最低的Loss。

4. 最优学习率调度器(WSD调度器)
学习率调度器,即训练不同阶段使用不同学习率的调整策略,对模型性能影响很关键。当前通用的学习率策略是Cosine图像,即在学习率从Warmup阶段升高到最高点之后,开始呈现余弦函数的降低。几乎所有大模型都使用了Cosine Learning Rate Scheduler (简称Cosine LRS)的方式。
为了研究为什么Cosine的Scheduler表现优异,我们进行了大量实验。我们对0.036B的模型,设置不同的Learning Rate Scheduler的截止步数,进行了持续训练。结果如下图:

从图中可以看出,对于训练至步的模型,将Cosine LRS的截止步数设置为步总是能获得最优的性能,而设置为更多或者更少性能都不是最优。
当我们考虑持续训练的场景,会发现Cosine调度器的问题有更多问题。如果我们在Cosine的截止步数之后继续沿用0.1倍的最大学习率(通常做法),则继续训练收敛非常缓慢;如果我们在Cosine的截止步数之后重启Cosine LRS(即再次从最大学习率开始下降,或者是逐渐上升到最大学习率,再开始下降)则会发现损失会经历长时间的上升周期,而这段时间,模型处于不可用状态。
我们猜想Cosine LRS 在预先指定步数的时候性能优异的原因有两点:
T=S下的Cosine LRS,相对于Linear LRS、Noam LRS、以及T<S的Cosine LRS,有更长时间的大学习率训练。这一阶段可能有助于模型寻找更好的全局最优解。
T=S下的Cosine LRS ,相对于T>S的Cosine LRS、Constant LRS,有更充分的学习率下降的退火阶段,这一阶段可能发生了较为特别的动力学现象,导致模型可以找到更好的局部最优解。
结合这两点,我们提出了一种新的学习率调度策略,Warmup-Stable-Decay(WSD)调度器。这种学习率调度器分为三个阶段,warmup阶段(用W表示warmup阶段结束时的步数/训练量),稳定训练阶段(用S表示稳定训练阶段结束时的步数/训练量),退火阶段(用D表示退火阶段的训练量)。这种调度器可以写为:

其中 是一个关于的减函数, 是最大学习率。这种策略有以下四个好处:
可以持续训练。
可以随时取出。
性能优于Cosine LRS。
有显式区分的训练阶段,便于使用不同的数据策略。
WSD和Cosine LRS的图像对比如下:

我们发现如我们所设想的,在Decay阶段(退火阶段),随着学习率的变小,损失有大幅度的快速下降,在步数S时迅速降低至和T=S的Cosine LRS相等或更低。与此同时,我们可以复用Decay前的模型,进行大学习率的继续训练,在更多的步数S‘之后进行退火,取得和T’=S‘ 的Cosine LRS相等的效果。

我们对Decay阶段的训练步数需求进行了探索。我们发现在所有训练时长中,总步数10%的Decay都足够达到最好的效果,而2.5%的Decay都较为欠缺。因此我们最终将Decay的步数定为最后10%。

5. Batchsize 调度
根据Batchsize随损失变化的实验结果,不难猜想,用更大的Batchsize可能可以达到更低的loss。我们在0.036B、2.4B的模型实验中都发现了类似的现象,即在扩大Batchsize的时候损失会有一次较大幅度的下降(我们猜想Batchsize扩大和Learning Rate 降低可能有相似的动力学效果)。如下图所示,我们进行了Batch size 扩大,Loss降低约0.2,并且在后续的退火阶段,仍然能形成一样的下降效果。但是遗憾的是,在我们正式实验中,我们进行的Batchsize扩大后退火阶段的降低有所减少,因此我们最终没有采用Batchsize扩大的训练方法。这个问题留作后续研究。

6. 固定大小模型持续训练最多可以达到几倍的大模型?
由于我们的WSD学习率优化器可以在任何阶段退火,取得该阶段最优的模型,因此我们有机会探索,如果持续训练一个大小为N的模型,最优情况下能超过多大参数量的Chichilla-optimal 模型。
首先我们估计了持续训练过程中,模型性能随着规模的变化。由于不确定函数形式,我们尝试了两种拟合公式。1)指数形式: 和 2)幂律形式: 。 两种函数的拟合结果如图:

因此我们认为幂律形式的拟合效果更好。通过拟合我们得到0.036B持续训练,最终理论上可以达到3.27的C4 Loss。为了从直观上估计和感受,在可接受的训练时长内,0.036B得模型可以达到多大的Chinchilla Optimal模型的效果,我们同样以最优配置训练了一个0.17B的模型。0.17B模型在Chinchilla Optimal数据量下训练,消耗的计算量为 Flops。在这个计算量下,0.036B的模型可以获得3.37的C4 Loss,与0.17B的模型的3.34 Loss接近。因此我们认为一个模型用我们的WSD调度器训练,在消耗等量计算量时,可以达到约5倍模型参数量的Chinchilla-optimal模型。而持续训练下去,有可能超越更大的Chinchilla-optimal模型。
我们在MiniCPM上进行了验证。我们以完全相同的数据配方训练了 0.036B、0.1B、0.2B、0.5B、0.8B,1.2B 六个小模型,分别至其Chinchilla Optimal的数据量。绘制得到Scaling图像如下,根据这个图像,我们可以预测 9B模型的Chinchilla Optimal的终态C4 Loss约为2.40,7B模型约为2.45。MiniCPM的最终C4 Loss为2.41,接近于9B的Chinchilla Optimal 模型。

模型大小 | Loss(*代表估计值) |
---|---|
1.2B-CO | 2.89 |
2.4B-CO | 2.70* |
7B-CO | 2.45* |
9B-CO | 2.40* |
13B-CO | 2.32* |
MiniCPM | 2.41 |
-CO意为Chinchilla Optimal
7. 持续训练友好的数据策略
由于WSD LRS的退火阶段模型会有较大幅度的损失下降,我们猜想在这个阶段加入高质量数据,会有如下两个优点:
相对于在sft阶段加入高质量数据,在退火阶段加入数据,模型学习更充分。
相对于在pretrain一开始阶段加入高质量数据,更能支持小数据的训练,否则在一个未预先定好训练步数的持续预训练过程中,小数据会重复过多次数,造成负面影响。
基于这两点猜想,我们提出:在预训练阶段只使用通用、量大的预训练粗质量数据,而在退火阶段,使用非常广泛的高质量知识和能力数据以及SFT的高质量数据,混合入预训练数据进行退火。
为了验证我们的方法与直接SFT相比的优势,我们从一个中间检查点开始进行了两组实验。
实验A:仅使用预训练数据进行退火,接着进行4B token的SFT。
实验B:使用如上的高质量数据+SFT数据混入预训练数据进行退火,同样进行4B token的SFT。
两组实验结果如下:
CEval | CMMLU | MMLU | GSM8K | Math | HumanEval | MBPP | |
---|---|---|---|---|---|---|---|
实验A | 40.0 | 41.5 | 44.6 | 27.7 | 5.1 | 27.7 | 24.4 |
实验B | 52.6 | 51.1 | 50.9 | 42.3 | 5.4 | 30.4 | 30.3 |
实验结果表明在退火开始时加入高质量数据的收益远高于在退火完成后的sft阶段加入。因此我们建议模型能力的特化和增强应从退火阶段开始进行。
三、词表
MiniCPM模型作为通用模型,具备英文、中文、中国古文、代码、颜文字,其他语言等多方面能力,因此词表相对较大,大小为122753。该词表构建于大量综合语料上,使用sentencepiece库进行BPE,添加了包括繁体中文、罕见字、emoji、希腊字母、俄文字母等等特殊符号。
我们在中文、英文、代码、论文各30万篇非训练文档上进行了压缩率测量,MiniCPM的tokenizer取得了最高的压缩率(Bytes/Tokens)
压缩率(Bytes/Tokens) | Baichuan2 | ChatGLM2 | Llama2 | MiniCPM |
---|---|---|---|---|
大小 | 125696 | 64794 | 32000 | 122753 |
中文 | 3.61 | 3.51 | 1.87 | 3.70 |
英文 | 4.02 | 3.93 | 3.7 | 4.05 |
代码 | 2.75 | 2.76 | 2.79 | 2.85 |
论文 | 2.74 | 2.88 | 2.97 | 2.93 |
平均 | 3.28 | 3.27 | 2.83 | 3.38 |
共享输入输出层
词表的大小主要决定了模型覆盖面的宽窄,而不决定模型本身的能力深浅。在大模型参数规模下,词嵌入参数量可以忽略不计,但是小模型下却不可忽视,因此我们使用了tie_word_embedding的方案进一步减少参数量,即输出层和输入层共享参数,在预实验中,我们发现这几乎不会牺牲性能。在使用tie_word_embedding后,MiniCPM的词嵌入为 的参数量。
四、两阶段预训练
1. 稳定训练阶段
我们使用了1T的去重后的数据,其中大部分数据从开源数据中收集来,比例如下图。

我们使用了模型沙盒实验中探索出的最优配置,WSD LRS,batchsize为3.93M,Max Learning Rate为0.01。
2. 退火阶段
我们的sft数据配比如下:

最终我们两阶段预训练的过程中,C4 Loss的变化如下图,在263000步(约1T数据)时,开始进行退火,退火过程也变现出了损失函数急剧下降的现象,同时在各种任务数据、SFT数据上的Loss也有显著下降。
具体在WSD调度器的退火形式上,我们采用了指数退火,即)。其中T为退火的半衰期,我们设置为T=8000步。

整个训练过程中,C4训练集上Loss,由于数据不重复,所以训练集loss可以当作验证集Loss。
六、对齐
在上述获得的基础模型之上,我们进行了对齐(alignment)。尽管sft的数据已经加入退火阶段,但是我们发现仍然有必要进行SFT阶段,换言之,退火阶段和SFT阶段缺一不可。我们使用了和退火阶段类似的SFT数据(不同的是将预训练数据去除)。我们进行了约6B token 的 SFT训练。SFT的学习率衔接上退火结束的学习率,为1e-3,同样使用了WSD Scheduler。
在SFT之后,我们采用DPO对模型进行进一步的人类偏好对齐。在这一阶段,我们采用UltraFeedback作为主要的对齐数据集,并内部构建了一个用于增强模型代码和数学能力的偏好数据集。我们进行了一个Epoch的DPO训练,学习率为1e-5且使用Cosine Scheduler。更多DPO和数据设置细节可以可见我们 UltraFeedback 论文。
七、全面评测
1. 榜单
1. 1 SFT模型: MiniCPM-sft
整体评测使用了我们的开源工具UltraEval[1]。UltaEval是一个开源的基础模型能力评测框架,提供了一套轻量级、易于使用的评测体系,支持主流大模型的性能评估,服务模型训练团队的快速评测需求。底层使用开源框架vLLM进行推理和加速,数据集选取了常用的权威数据集,包括:
英文,选取了MMLU
中文,选取了CMMLU、C-Eval
代码,选取了HumanEval、MBPP
数学,选取了GSM8K、MATH
问答,选取了HellaSwag、ARC-E、ARC-C
逻辑,选取了BBH
由于大模型评测比较难以统一,且大量评测也没有公开的prompt和测试代码,对于具体评测方式,我们只能尽量做到适合各类模型。整体而言,我们测试时采用统一的输入prompt,并会按照各自模型适合的模板进行调整。模型评测脚本及prompt已开源在我们的Github仓库中,也欢迎更多开发者来不断改进我们的评测方式。
整体评测结果如下。总体而言,MiniCPM在上述数据集上,英文均分与Mistral-7B-v0.1相近,中文均分显著优于Mistral-7B-v0.1。
以下是具体评测结果:
与大模型相比:超过或持平大部分7B规模模型,超越部分10B以上的模型。
平均分 | 英文均分(包括代码数学推理) | 中文均分 | CEval | CMMLU | MMLU | HumanEval | MBPP | GSM8K | MATH | BBH | Arc-e | ARC-c | HellaSwag | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Llama2-7B | 35.40 | 36.21 | 31.765 | 32.42 | 31.11 | 44.32 | 12.2 | 27.17 | 13.57 | 1.8 | 33.23 | 75.25 | 42.75 | 75.62* |
Qwen-7B | 53.87 | 52.42 | 59.655 | 58.96 | 60.35 | 57.65 | 17.07 | 42.15 | 41.24 | 5.34 | 37.75 | 83.42 | 64.76 | 75.32* |
Deepseek-7B | 39.96 | 39.15 | 43.635 | 42.82 | 44.45 | 47.82 | 20.12 | 41.45 | 15.85 | 1.53 | 33.38 | 74.58* | 42.15* | 75.45* |
Mistral-7B | 48.97 | 49.96 | 44.54 | 46.12 | 42.96 | 62.69 | 27.44 | 45.2 | 33.13 | 5.0 | 41.06 | 83.92 | 70.73 | 80.43* |
Llama2-13B | 41.48 | 42.44 | 37.19 | 37.32 | 37.06 | 54.71 | 17.07 | 32.55 | 21.15 | 2.25 | 37.92 | 78.87* | 58.19 | 79.23* |
MPT-30B | 38.17 | 39.82 | 30.715 | 29.34 | 32.09 | 46.56 | 21.95 | 35.36 | 10.31 | 1.56 | 38.22 | 78.66* | 46.08* | 79.72* |
Falcon-40B | 43.62 | 44.21 | 40.93 | 40.29 | 41.57 | 53.53 | 24.39 | 36.53 | 22.44 | 1.92 | 36.24 | 81.94* | 57.68 | 83.26* |
MiniCPM-2B | 52.33 | 52.6 | 51.1 | 51.13 | 51.07 | 53.46 | 50.00 | 47.31 | 53.83 | 10.24 | 36.87 | 85.44 | 68.00 | 68.25 |
与小模型对比,除部分英文评测集外,其他测试集均超过现有模型。
平均分 | 英文均分(包括代码数学推理) | 中文均分 | CEval | CMMLU | MMLU | HumanEval | MBPP | GSM8K | MATH | BBH | Arc-e | ARC-c | HellaSwag | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TinyLlama-1.1B | 25.36 | 25.55 | 24.53 | 25.02 | 24.03 | 24.3 | 6.71 | 19.91 | 2.27 | 0.74 | 28.78 | 60.77* | 28.15* | 58.33* |
Qwen-1.8B | 34.72 | 31.87 | 47.57 | 49.81 | 45.32 | 43.37 | 7.93 | 17.8 | 19.26 | 2.42 | 29.07 | 63.97* | 43.69 | 59.28* |
Gemini Nano-3B | - | - | - | - | - | - | - | 27.2(report) | 22.8(report) | - | 42.4(report) | - | - | - |
StableLM-Zephyr-3B | 43.43 | 46.28 | 30.62 | 30.34 | 30.89 | 45.9 | 35.37 | 31.85 | 52.54 | 12.12 | 37.68 | 73.78 | 55.38 | 71.87* |
Phi-2(2B) | 48.84 | 54.41 | 23.78 | 23.37 | 24.18 | 52.66 | 47.56 | 55.04 | 57.16 | 3.5 | 43.39 | 86.11 | 71.25 | 73.07* |
MiniCPM-2B | 52.33 | 52.6 | 51.10 | 51.13 | 51.07 | 53.46 | 50.00 | 47.31 | 53.83 | 10.24 | 36.87 | 85.44 | 68.00c | 68.25 |
注:
MiniCPM的评测时模型推理使用的是vllm=0.2.2,这是一个我们在两个月前fork的稳定版本,我们计划不久后将和vllm官方沟通,将推理代码增加至vllm官方仓库。而Mistral-7B-v0.1 则用的是vllm最新的vllm=0.2.7。
我们对QA任务进行测试时,通常可能采用两种方式,第一种是PPL:将选项作为题目延续时的PPL作为选择指标,第二种是直接生成,直接让模型输出答案选项。我们发现,这两种方式得到的结果差异较大。事实上,MiniCPM在直接生成和PPL的测试结果接近,直接生成的表现性能较好,而Mistral-7B-v0.1则在PPL上表现较好,直接生成上效果较差。为了应对这种现象,我们汇报每个模型的分数时,采纳两种评测方式得分最高方式的得分,以此保证对比的公平性。
我们观察到,虽然Phi-2的评测结果超过Mistral-7B,但是实用体感并没有达到同等水平。
1.2 DPO模型:MiniCPM-dpo
在使用DPO完成偏好对齐后,模型在MT-Bench上的分数从SFT后的6.89上涨至7.25,甚至超过了包括Llama2-70B-Chat在内的大模型。
模型 | MT-Bench | 模型 | MT-Bench |
---|---|---|---|
GPT-4-turbo | 9.32 | LLaMA-2-70B-chat | 6.86 |
GPT-3.5-turbo | 8.39 | Mistral-7B-Instruct-v0.1 | 6.84 |
Mistral-8*7b-Instruct-v0.1 | 8.3 | LLaMA-2-13B-chat | 6.65 |
Claude-2.1 | 8.18 | Vicuna-13B | 6.57 |
Claude-2 | 8.06 | MPT-34B-instruct | 6.39 |
Zephyr-7B-beta | 7.34 | LLaMA-2-7B-chat | 6.27 |
MiniCPM-2B | 7.25 | Vicuna-7B | 6.17 |
Vicuna-33B | 7.12 | MPT-7B-chat | 5.42 |
Zephyr-7B-alpha | 6.88 | ChatGLM2-6B | 4.96 |
2. 典型案例
我们挑选了一些展示MiniCPM-2B通用能力的例子。这些例子说明了MiniCPM的能力多样性。
2.1 知识推理

2.2 代码


2.3 数学

2.4 翻译

2.5 特殊任务

更多英文输入的例子在这[2]
八、量化:MiniCPM-sft/dpo-int4
为进一步降低MiniCPM的计算开销,使用GPT-Q方法将MiniCPM量化为int4版本。相较于bfloat16版本与float32版本,使用int4版本时,模型存储开销更少,推理速度更快。量化模型时,我们量化Embedding层、LayerNorm层外的模型参数。
对于参数矩阵, 我们将连续列聚合为一组,形成 个参数组,而后对每个参数组分别进行量化。对于参数组中的具体参数,其量化放缩系数和零点以如下方式计算:
依照上述放缩系数和零点,量化后为
其中取整函数为向最近整数取整。反量化时,操作方式如下:
使用GPT-Q方法进行量化时,在标注数据上最小化量化误差, 并循环对矩阵的未量化权重进行如下更新,其中是当前量化的参数位置,为未量化权重,是量化误差的Hessian矩阵。

对于MiniCPM-2B-SFT与MiniCPM-2B-DPO,我们均进行了int4量化,导出模型MiniCPM-2B-SFT-Int4与MiniCPM-2B-DPO-Int4。
九、多模态:MiniCPM-V
基于MiniCPM,我们构建了一个支持中英双语对话的端侧多模态模型MiniCPM-V。该模型可以接受图像和文本输入,并输出文本内容。MiniCPM-V 的视觉模型部分由 SigLIP-400M 进行初始化,语言模型部分由 MiniCPM 进行初始化,两者通过perceiver resampler进行连接。
MiniCPM-V有三个突出特点:
高效推理:MiniCPM-V 可以高效部署在大多数 GPU 显卡和个人电脑,甚至手机等边缘设备上。在图像编码表示方面,我们基于perciever resampler将每个图像压缩表示为64个token,显著少与其他基于MLP架构的多模态模型的token数量(通常大于 512)。这使得MiniCPM-V 可以在推理过程中以更低的存储成本和更高的运算速度进行推理。
性能强劲:在多个基准测试(包括 MMMU、MME 和 MMbech 等)中,MiniCPM-V 在同规模模型中实现了最佳性能,超越了基于 Phi-2 构建的现有多模态大模型。MiniCPM-V 在部分数据集上达到了与 9.6B Qwen-VL-Chat 相当甚至更好的性能。
双语支持:MiniCPM-V是首个支持中英文双语能力的可边缘部署的多模态端侧大模型。该能力是通过跨语言泛化多模态能力高效实现的,这项技术来自我们的 ICLR 2024 splotlight论文。
MiniCPM-V 模型的训练分为 2 个基本阶段:
预训练阶段: 我们使用 300M 中英图文对数据进行视觉和语言基本概念的对齐,并学习大规模多模态世界知识。
指令微调阶段: 我们一共使用了6M 多任务问答数据、1M 纯文本数据、1M 多模态对话数据进行指令微调,进一步对齐并激发多模态基础能力。
详细训练与微调过程也可见我们 ICLR 2024 splotlight论文。
模型 | MME(P) | MMB-dev(en) | MMB-dev(zh) | MMMU-val | CMMMU-val |
---|---|---|---|---|---|
LLaVA-Phi | 1335.1 | 59.8 | / | / | / |
MobileVLM | 1288.9 | 59.6 | / | / | / |
Imp-v1 | 1434.0 | 66.5 | / | / | / |
Qwen-VL-Chat (9B) | 1487 | 60.6 | 56.7 | 35.9 | 30.7 |
MiniCPM-V (3B) | 1446 | 67.3 | 61.9 | 34.7 | 32.1 |
十、端侧部署
进行Int4量化后,MiniCPM只占2GB空间,具备了在端侧手机进行模型部署的条件。对此,我们针对Android和Harmony系统使用开源框架MLC-LLM进行模型适配,针对iPhone系统使用开源框架LLMFarm进行模型适配,并分别选取了部分端侧手机设备进行了测试。此外,我们首次验证了在端侧手机运行多模态大模型的可行性,并成功在手机上运行。
值得注意的是,我们并未针对手机部署进行优化,仅验证MiniCPM在手机侧进行推理的可行性,我们也欢迎更多开发者进一步调优更新下面的测试列表,不断提升大模型在手机侧的推理性能。
参考资料
[1]
UltraEval: https://github.com/OpenBMB/UltraEval
[2]show-cases: https://github.com/OpenBMB/MiniCPM/blob/main/README-en.md#show-cases
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦