跳到主要内容
返回

MiniCPM4.1 & MiniCPM4

MiniCPM 文本系列

根据训练目标选择官方代码或 LLaMA-Factory 路线,了解数据准备、训练配置以及 LoRA / QLoRA 等方式。不同模型与训练配置的资源需求不同,请先核对目标版本、硬件和样例参数。

硬件要求​

模型尺寸全量微调最低显卡要求LoRA 微调最低显卡要求
0.5B至少 1 张 12GB 以上显存的 20 系显卡至少 1 张 8GB 显存的 20 系显卡
8B至少 4 张 24GB 显存的显卡至少 2 张 24GB 显存的 20 系显卡

官方代码微调(SFT推荐)​

设备需求:最少一张24g显存,20系列以上显卡,qlora可尝试12g显卡

使用 git 获取官方代码​

Bash
git clone https://github.com/OpenBMB/MiniCPM

准备数据集​

对话数据集,处理成以下json格式,每一条数据就是一个messages

以下标红的system字段非必需:

JSON
[
{
"messages": [
{
"role": "system",
"content": "<system prompt text>"
},
{
"role": "user",
"content": "<user prompt text>"
},
{
"role": "assistant",
"content": "<assistant response text>"
},
// ... Muti Turn,多轮对话
{
"role": "user",
"content": "<user prompt text>"
},
{
"role": "assistant",
"content": "<assistant response text>"
}
]
}
]

修改 MiniCPM/finetune/lora_finetune_ocnli.sh 文件​

Bash
formatted_time=$(date +"%Y%m%d%H%M%S")
echo $formatted_time

#4090添加这两行代码
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1

deepspeed --include localhost:1 --master_port 19888 finetune.py \
--model_name_or_path openbmb/MiniCPM3-4B \ # 可以修改为本地模型目录
--output_dir output/OCNLILoRA/$formatted_time/ \ # 可以修改为其他用来保存输出模型的地址
--train_data_path data/ocnli_public_chatml/train.json \ # 这里写按照第二步处理好的训练集地址
--eval_data_path data/ocnli_public_chatml/dev.json \ # 这里写按照第二步处理好的验证集
--learning_rate 5e-5 \ # 学习率
--per_device_train_batch_size 16 \ # 每张卡训练时的batch_size
--per_device_eval_batch_size 128 \ # 每张卡测试时的batch_size
--model_max_length 1024 \ # 模型训练时最大token数,超出将截断
--bf16 \ # 是否使用bf16数据格式,如果不是改为false
--use_lora \ # 是否使用lora
--gradient_accumulation_steps 1 \ # 梯度累计次数
--warmup_steps 100 \ # 预热步数
--max_steps 1000 \ # 最大训练步数,到达后停止训练
--weight_decay 0.01 \ # 权重正则化值
--evaluation_strategy steps \ # 测试方法,可以改为epoch
--eval_steps 500 \ # 与evaluation_strategy steps一起起作用,500个step测试一一次
--save_strategy steps \ # 模型保存策略,可以改为epoch即每个epoch保存一次
--save_steps 500 \ # save_strategy steps一起起作用,代表500步保存一次
--seed 42 \ # 随机种子
--log_level info --logging_strategy steps --logging_steps 10 \ # logging的设置
--deepspeed configs/ds_config_zero2_offload.json # deepspeed配置文件设置,如果显存充足可以改为configs/ds_config_zero2_offload.json

使用 lora / qlora 训练(可选)​

lora​

MiniCPM/finetune/lora_finetune_ocnli.sh文件中增加use_lora参数,

如不确定就把以下代码加到--deepspeed configs/ds_config_zero2_offload.json的前一行

Bash
--use_lora \

qlora​

MiniCPM/finetune/lora_finetune_ocnli.sh文件中增加use_lora,qlora参数,

如不确定就把以下代码加到--deepspeed configs/ds_config_zero2_offload.json的前一行

Bash
--use_lora \
--qlora \

修改以上bash文件后,输入以下指令开始训练:​

Bash
cd MiniCPM/finetune
bash lora_finetune_ocnli.sh

Llama_Factory微调(RLHF微调推荐)​

使用方法与【微调教程】MiniCPM2.0基本相同,如果不是训练工具调用能力,仅需修改 template: cpm3,训练工具调用能力请期待我们向 llama-factory 提的pr

首先安装 Llama_Factory 依赖​

Bash
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

处理数据​

将数据集处理成 Minicpm/finetune/llama_factory_example/llama_factory_data 文件夹中的格式,示例包括 DPO、KTO、SFT 三种微调方式并放置到llama_factory/data目录下。

DPO 数据格式​

以下是对于 Llama_Factory 中对于构造多轮对话的 DPO 数据示例,其中:

JSON
{
"instruction": "你是一个科技百科小助手,能够回复大部分科技领域问题",
"input": "我想知道 MiniCPM4 到底好不好呀?",
"chosen": "亲呀,MiniCPM4 真的很不错呢!它运用了 NSA 注意力机制呀,这使得它在处理信息等方面有着很出色的表现,能够更加精准地理解和生成内容,无论是文本创作还是辅助学习等场景,都可以发挥挺不错的作用呢,很多用户使用后都反馈体验挺好的哦。",
"rejected": "哎呀,MiniCPM4 嘛,就是一般般啦。它虽然有一些功能,但是在实际使用中,也没有特别突出的亮点呀,和其他同类产品比起来,优势也不是特别明显呢,反正就是能用,但也没达到让人惊艳的程度啦。",
"history": [
[
"我听说 MiniCPM4 挺智能的,是真的吗?",
"亲,那确实呀,MiniCPM4 挺智能的呢,它有着独特的技术加持,在很多任务上都能展现出不错的智能水平,能帮大家解决不少问题哦。"
],
[
"那它在语言理解方面表现如何呢?",
"亲,它在语言理解方面的表现可圈可点哦,靠着相关的技术,像 NSA 注意力机制助力,对各种语句的理解还是挺准确的呢,能较好地把握语义呀。"
],
]
}

KTO 数据格式​

  1. 其中每个 messages代表一条数据,label代表是该条数据的回复是否合理
  2. 不需要和 DPO 那样相同问题不同答案,对于每个问题和答案对给予一个评价
  3. 每个问题和回复都可以有一个 True(好的),或者 False(不好的评价)
  4. 需要修改的地方已经标红
JSON
{
"messages": [
{
"content": "minicpm4.0哪里最强?",
"role": "user"
},
{
"content": "哪里都强,六边形战士好吗",
"role": "assistant"
}
],
"label": true
},
{
"messages": [
{
"content": "minicpm3.0 有哪些优点。",
"role": "user"
},
{
"content": "1.长文本能力。2.function call能力 3.其他所有能力",
"role": "assistant"
},
{
"content": "细说长文本能力",
"role": "user"
},
{
"content": "反正很强,细说就去我们github吧。https://github.com/OpenBMB/MiniCPM.git",
"role": "assistant"
}
],
"label": false
}
]

sft数据格式如下,每个字典组成一条数据​

alpaca格式:

JSON
[
{
"instruction": "你现在比牛顿还牛的科学家",
"input": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。",
"output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元——细胞所构成。这是生物学的一个基础理论,认为细胞是所有生物的基本结构和功能单位,所有的生物都是由一个或多个细胞组成,细胞只能通过细胞分裂产生新的细胞。这一理论由薛定谔、施瓦内和雪莱于1839年首次提出。\n\n日心说是指太阳是太阳系的中心,也就是说,行星围绕太阳旋转的理论。这个理论打破了传统的地心说观点,认为地球并不是宇宙的中心。日心说的提出者是尼古拉·哥白尼,他在16世纪初发表了他的著作《天体运行论》,阐述了太阳系行星围绕太阳运行的模型,为天文学的发展做出了巨大贡献。"
}
]

chatml格式:

JSON
[
{
"messages": [
{
"content": "Who are they?",
"role": "user"
},
{
"content": "They're Kane and Gretzka from Bayern Munich.",
"role": "assistant"
},
{
"content": "What are they doing?<image>",
"role": "user"
},
{
"content": "They are celebrating on the soccer field.",
"role": "assistant"
}
]
}
]

将数据信息添加到dataset_info.json​

在llama_factory/data/dataset_info.json中添加数据集信息,保证dataset_info.json中能找到你的数据集,如下例:

  1. file_name为制作数据集的文件名
  2. 比如"sft_zh_demo"代表数据名称,在面配置文件yaml中会用到
  3. 需要修改的就只有两个,一个是数据的键名,比如"sft_zh_demo",另外一个是file_name对应值数据文件名,比如:alpaca_zh_demo.json
  4. 所有需要修改的位置已经标红
JSON
{"identity": {
"file_name": "identity.json"
},
"sft_zh_demo": {
"file_name": "alpaca_zh_demo.json"
},
"kto_en_demo": {
"file_name": "kto_en_demo.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages",
"kto_tag": "label"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant"
}
},
"dpo_en_demo":{
"file_name":"dpo_en_demo.json",
"ranking":"true",
"columns":{
"prompt":"instruction",
"query":"input",
"chosen":"chosen",
"rejected":"rejected",
"history": "history"
}
}
}

设置训练脚本​

将MiniCPM/finetune/llama_factory_example中文件复制到LLaMA-Factory/examples/minicpm目录下​

Bash
cd LLaMA-Factory/examples
mkdir minicpm
#以下代码中的/your/path要改成你的MiniCPM代码和LLaMA-Factory路径
cp -r /your/path/MiniCPM/finetune/llama_factory_example/* /your/path/LLaMA-Factory/examples/minicpm

根据你需要微调的方式,以dpo为例。LLaMA-Factory/examples/minicpm/minicpm_dpo.yaml必须修改的配置参数如下​

YAML
model_name_or_path: openbmb/MiniCPM3-4B # 或者你本地保存的地址
template: cpm3 #注意如果微调minicpm3或者minicpm4就写cpm3,如果是minicpm2则写cpm
dataset: dpo_en_demo # 这里写dataset_info.json中的键名
output_dir: your/finetune_minicpm/save/path # 你微调后模型的保存地址
bf16: true # 如果你的设备支持bf16,否则false
deepspeed: examples/deepspeed/ds_z2_config.json # 如果显存不够可以改成ds_z3_config.json

如果需要lora微调,在yaml文件中修改以下代码:​

Bash
finetuning_type: lora
lora_target: all

开始训练​

Bash
cd LLaMA-Factory
FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/MiniCPM4.yaml

开发者精选

查看全部 →
MiniCPM 文本VoxCPM 语音ESP32 塔台雷达:AI 语音播报航班圆屏塔台雷达,用克隆管制员音色播报航班MiniCPM 文本猫娘大模型的自进化:OPSD 涌现推理能力不请教师、不换底座,让猫娘在自我蒸馏中涌现数学推理MiniCPM 文本ReJev:轻量决策模型后训练LoRA 后训练 MiniCPM5-2B,留出集准确率 51.1% → 80.5%MiniCPM 文本BMB Agent:由 MiniCPM 驱动的个人助手让 2B 端侧模型接管日程与待办,.funcall 协议实战与踩坑记录MiniCPM 文本MetaCog:小裁判引导推理推理时元认知循环,多路径打分择优作答MiniCPM 文本MiniCPM News Desk:本地新闻简报本地小模型挑选原文段落,生成每日新闻汇总MiniCPM 文本WebGPU Pi:浏览器本地编程 AgentMiniCPM5-2B 经 WebGPU 在浏览器本地运行的编程 AgentMiniCPM 文本MiniCPM5-1B Tool-Use:离线函数调用SFT + GRPO 的 1B 函数调用模型,CPU 离线运行MiniCPM 文本deku:本地可信任务助手代码负责规划、模型只做简短补全的本地问答 AgentMiniCPM 文本MiniCPM5-1B:端侧部署与多语评测INT8 LiteRT-LM 端侧包,附西语等四种语言评测MiniCPM 文本MiniCPM-V 多模态MiniCPM Agent Gateway:端云协同网关本地 MiniCPM 判断数据策略,敏感请求不出本机MiniCPM 文本ToneBridge:情境化中文纠错按场景语气小幅修改中文句子,附拼音与发音MiniCPM 文本MiniCPM5-1B FP8:GPU 推理加速RTX 3060 解码 248 tok/s,比 BF16 快 1.5 倍MiniCPM 文本AUGURY:从杂草读懂土壤通过杂草物种推断土壤状况,可在手机端运行MiniCPM 文本gmgn-minicpm:本地链上研究 Agent1B 模型本地驱动的只读 GMGN 链上研究助手MiniCPM 文本MiniCPM-V 多模态Lost & Found Desk:小模型失物招领MiniCPM-V 描述物品、MiniCPM5 引导问询,人工确认归还MiniCPM 文本MiniCPM-V 多模态VoxCPM 语音CoreAI Model Zoo:MiniCPM 原生上 iPhoneMiniCPM5、MiniCPM-V 4.6 转换为 Core AI 原生运行MiniCPM 文本MiniCPM-V 多模态Viva Mais:WhatsApp 本地 CRM把旅行社的 WhatsApp 聊天整理成本地 CRMMiniCPM 文本天问:1B 模型解八字周易用 1B 模型把八字与周易变成自我反思MiniCPM 文本WanderLust:按心情规划步行按心情规划从 A 到 B 的探索式步行路线MiniCPM 文本NIGHTWAVE:1B 模型深夜电台由 1B 模型主持、可现场来电的复古电台MiniCPM 文本6ixPulse:多伦多租房地图多智能体比较多伦多街区,结论都标注数据来源MiniCPM 文本华尔街 AI:小模型交易公司四个小模型智能体在像素办公室里自主炒股MiniCPM 文本Hackathon Advisor:选题地图顾问用创意地图评估黑客松选题的原创性MiniCPM 文本LLM Cinema:AI 导演 ASCII 电影小模型自编自导 ASCII 动画短片MiniCPM 文本tiny-llm:纯 Rust 推理引擎纯 Rust 手写、仅用 CPU 的 MiniCPM5-1B 推理引擎MiniCPM 文本Document Field Agent:文档字段抽取批量文档 OCR 与结构化字段抽取工作台MiniCPM 文本MiniCPM-V 多模态当猫娘学会思考,手机也能部署这个模型难道真的是为了猫娘而生的吗?端侧部署实测MiniCPM 文本MiniCPM-V 多模态让 1B 小模型当好数学 AgentTeXada 的 MiniCPM 端侧实践与方法沉淀MiniCPM 文本ORG-2:Coding Agent 工作台统一编排与管理多个编程 Agent 的组织工作台MiniCPM 文本EdgeHome Harness用 Rust 为 1B 端侧小模型构建可回放、可评测的本地控制链路MiniCPM 文本榨干 NAS!接入 WorkBuddyN150 CPU 跑本地 AI,分享一些真实用法和踩坑经验