ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MiniCPM-SALA 微调实战指南:从单 GPU 到多节点集群的 Transformers 与 LLaMA-Factory 全流程

MiniCPM-SALA 微调实战指南:从单 GPU 到多节点集群的 Transformers 与 LLaMA-Factory 全流程 大模型本地部署模型量化微调LoRA工具调用openBMBAscend【免费下载链接】MiniCPMMiniCPM4 MiniCPM4.1: Ultra-Efficient LLMs on End Devices, achieving 3 generation speedup on reasoning tasks项目地址https://gitcode.com/OpenBMB/MiniCPM点击查看免费下载导读本文基于 OpenBMB 开源仓库中 minicpm_sala/finetune/README.md 撰写系统讲解如何在预训练 MiniCPM-SALA 模型之上开展全参数微调Full-Parameter Fine-tuning与 LoRA 轻量微调覆盖单 GPU 原型验证、单节点多 GPUDeepSpeed ZeRO / Accelerate FSDP / Multi-GPU以及多节点大规模分布式训练三条主线。读完本文你将掌握两套可落地的微调方案基于transformers.Trainer的官方脚本finetune.py与基于 LLaMA-Factory 的 SFT / DPO / KTO / 持续预训练流程并理解loss_mask多轮对话数据约定、DeepSpeed 与 FSDP 配置背后的实现原理。一、微调方案总览与适用场景MiniCPM-SALA 的微调代码仓库提供了两条相互独立、可灵活选择的训练链路并覆盖三种典型硬件规模训练规模推荐方案适用场景单 GPUTransformers Trainer LoRA快速原型验证、小模型调优单节点多 GPUDeepSpeed ZeRO-2/3、Accelerate Multi-GPU、FSDP常规 SFT 训练兼顾显存与吞吐多节点大规模Accelerate FSDPfsdp_config_multiple_nodes.yaml超长上下文、大模型全参训练两条链路共用同一套模型检查点openbmb/MiniCPM-SALA与相同的对话式数据格式区别在于工程化程度官方 Trainer 脚本最小依赖、开箱即用LLaMA-Factory 则内置 SFT、DPO、KTO、Pretrain 四种 stage 及大量训练技巧适合追求统一配置管理的团队。二、方式一基于 Hugging Face Transformers Trainer 微调官方微调脚本 finetune.py 使用transformers.Trainer与 DeepSpeed支持全参数微调与基于peft的 LoRA 微调两种模式。2.1 环境安装与依赖pip install -r requirements.txtrequirements.txt 中的核心依赖包括torch、transformers、accelerate、deepspeed以及数据预处理用到的json、typing、dataclasses。运行 LoRA 微调时还需额外安装peft与bitsandbytes可选 QLoRA。2.2 多轮对话数据格式与 loss_mask 机制微调代码采用对话格式约定为不同角色分配不同的loss_mask从而允许在单次前向传播中同时计算多轮回复的损失显著提升训练吞吐。多轮对话数据集整体格式[ { messages: [ { role: system, content: system prompt text }, { role: user, content: user prompt text }, { role: assistant, content: assistant response text }, { role: user, content: user prompt text }, { role: assistant, content: assistant response text } ] } ]单条样本示例仓库中 train.json 的真实数据{ messages: [ { role: user, content: 类型#裙*裙长#半身裙 }, { role: assistant, content: 这款百搭时尚的仙女半身裙整体设计非常的飘逸随性穿上之后每个女孩子都能瞬间变成小仙女啦。料子非常的轻盈透气性也很好穿到夏天也很舒适。 } ] }注意微调代码现要求数据集必须同时包含训练集与验证集测试集可选例如AdvertiseGenChatML目录下的 train.json 与 dev.json。源码级原理解读SupervisedDataset 如何生成 label从 finetune.py 的preprocessing方法可以看到 loss_mask 的具体实现序列以bos_token_id开头其 label 固定为ignore_index -100PyTorch 交叉熵损失的默认忽略值不参与 loss 计算system / user 角色的 tokeninput_ids正常加入但对应的label_ids全部填充-100即提示词不参与损失计算assistant 角色的 tokeninput_ids与label_ids同时加入真实 token即仅模型回复参与损失计算这正是多轮样本能在一次前向中训练多个回复的原因序列末尾追加eos_token_id其 label 也参与计算随后按model_max_length做截断与右填充填充部分 label 同样为-100。代码中还存在一个模型家族分支当tokenizer.eos_token_id 73440时走 MiniCPM-3/4 的模板路径user 消息使用add_generation_promptTrue编码assistant 消息用encode(content, add_special_tokensFalse)编码否则走 MiniCPM-2 的模板路径保证不同代际模型都能正确处理角色边界。2.3 DeepSpeed ZeRO全参数与 LoRA 微调全参数微调官方推荐默认formatted_time$(date %Y%m%d%H%M%S) deepspeed --include localhost:0,1,2,3,4,5,6,7 finetune.py \ --model_name_or_path openbmb/MiniCPM-SALA \ --output_dir output/AdvertiseGenSFT/$formatted_time/ \ --train_data_path data/AdvertiseGenChatML/train.json \ --eval_data_path data/AdvertiseGenChatML/dev.json \ --learning_rate 5e-5 \ --per_device_train_batch_size 2 \ --per_device_eval_batch_size 32 \ --bf16 \ --gradient_accumulation_steps 4 \ --warmup_steps 100 \ --max_steps 3000 \ --weight_decay 0.01 \ --eval_steps 100 \ --save_strategy steps \ --save_steps 500 \ --seed 42 \ --log_level info \ --logging_strategy steps \ --logging_steps 10 \ --deepspeed configs/deepspeed/ds_config_zero3.json命令关键点说明--include localhost:0,...,7指定本机 8 张 GPU 参与训练--bf16启用 bfloat16 混合精度与 ds_config_zero3.json 中bf16: {enabled: auto}自动对齐--model_max_length默认 512可通过该参数调整序列长度上限对应 finetune.py 中TrainingArguments.model_max_length仓库同时提供了可直接运行的脚本 sft_finetune.sh 与 lora_finetune.sh其中export HF_ENDPOINThttps://hf-mirror.com可用于国内环境加速模型下载。ZeRO-3 配置结构ds_config_zero3.json值得展开说明zero_optimization.stage: 3模型参数、梯度、优化器状态全部分片到各卡配合allgather_partitions: true、reduce_scatter: true、contiguous_gradients: true、overlap_comm: true等通信优化stage3_gather_16bit_weights_on_model_save: true保存 checkpoint 时自动聚合并转回 16bit 权重保证产出标准可用模型train_batch_size/train_micro_batch_size_per_gpu/gradient_accumulation_steps均设为auto自动从 Trainer 参数推导避免两处配置不一致gradient_clipping: 1.0提供梯度裁剪兜底。另有 ds_config_zero2.json、ds_config_zero2_offload.json、ds_config_zero3_offload.json 供显存不足时降级使用offload 将状态卸载到 CPU 内存。LoRA 微调在上述命令末尾追加--use_lora参数即可一行切换deepspeed --include localhost:0,1,2,3,4,5,6,7 finetune.py \ --model_name_or_path openbmb/MiniCPM-SALA \ --output_dir output/AdvertiseGenSFT/$formatted_time/ \ ...其余参数与全参一致... \ --deepspeed configs/deepspeed/ds_config_zero3.json \ --use_loraLoRA 参数细节finetune.py默认r64、lora_alpha32、lora_dropout0.1、init_lora_weightsgaussian目标模块按模型架构自动选择MiniCPM3 系使用[q_a_proj, kv_a_proj_with_mqa, q_b_proj, kv_b_proj]其他模型回退为[q_proj, v_proj]——这与 MiniCPM3 采用 MQAMulti-Query Attention拆分投影的架构相呼应脚本会打印可训练参数量占比例如注释中trainable params: 2,949,120 || all params: 3,010,652,928 || trainable%: 0.098%验证 LoRA 只更新极小比例参数支持--qlora需同时开启--use_lora内部通过BitsAndBytesConfig以 NF4 4-bit 量化加载底座模型进一步降低显存门槛。2.4 AccelerateFSDP 单节点与多节点单节点 FSDP 全参数微调formatted_time$(date %Y%m%d%H%M%S) accelerate launch --config_file configs/accelerate/fsdp_config.yaml \ finetune.py \ --model_name_or_path openbmb/MiniCPM-SALA \ --output_dir output/AdvertiseGenSFT/$formatted_time/ \ --train_data_path data/AdvertiseGenChatML/train.json \ --eval_data_path data/AdvertiseGenChatML/dev.json \ --learning_rate 5e-5 \ --per_device_train_batch_size 2 \ --per_device_eval_batch_size 32 \ --bf16 \ --gradient_accumulation_steps 4 \ --warmup_steps 100 \ --max_steps 3000 \ --weight_decay 0.01 \ --eval_steps 100 \ --save_strategy steps \ --save_steps 500 \ --seed 42 \ --log_level info \ --logging_strategy steps \ --logging_steps 10LoRA 版本同样只需追加--use_lora可参考 sft_finetune.sh 与 lora_finetune.sh。FSDP 配置解读fsdp_config.yamldistributed_type: FSDPfsdp_sharding_strategy: FULL_SHARD参数、梯度、优化器状态全分片类似 ZeRO-3fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP按 Transformer 模块粒度自动 wrapfsdp_cpu_ram_efficient_loading: true降低加载阶段 CPU 内存峰值fsdp_sync_module_states: true各进程同步初始模型状态mixed_precision: bf16注释标明可换fp16num_machines: 1、num_processes: 8表示单机 8 卡。多节点大规模训练Accelerate FSDP将启动配置替换为 fsdp_config_multiple_nodes.yaml 即可accelerate launch --config_file configs/accelerate/fsdp_config_multiple_nodes.yaml \ finetune.py \ --model_name_or_path openbmb/MiniCPM-SALA \ ...其余参数同上...多节点配置与单节点的差异配置内注释已逐条说明参数单节点多节点示例说明num_machines12节点数num_processes816总 GPU 数 节点数 × 每节点 GPU 数main_process_ip—192.168.0.2主节点 IP所有节点保持一致main_process_port—29501所有节点保持一致machine_rank00主节点/ 1从节点从 0 开始主节点固定为 0除 FSDP 外仓库还提供 multigpu_config.yamldistributed_type: MULTI_GPU即 DDP 数据并行适合显存充裕、追求简单可靠的场景以及accelerate/与deepspeed/目录下的 lora/sft 四组现成脚本覆盖主流分布式策略。三、方式二基于 LLaMA-Factory 微调LLaMA-Factory 链路支持全参数与 LoRA 训练并原生提供 SFT、DPO、KTO、持续预训练Pretrain四种训练模式适合需要统一管理多种对齐策略的团队。3.1 安装与数据准备安装 LLaMA-Factorygit clone https://github.com/hiyouga/LlamaFactory.git cd LLaMA-Factory pip install -r requirements.txt准备数据按 llama_factory_data 下四种 demo 的格式准备数据然后将数据集登记进LLaMA-Factory/data/dataset_info.json。以仓库内置的三种 demo 为参照sft_zh_demo.json{instruction, input, output}三字段的 alpaca 格式dpo_en_demo.jsonconversationschosen/rejected成对偏好数据chosen/rejected内部又是from/value结构kto_en_demo.jsonmessagessharegpt 格式label布尔标签true 表示值得学习false 表示应当规避。dataset_info.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, formatting: sharegpt, columns: { messages: conversations, chosen: chosen, rejected: rejected } } }字段含义formatting: sharegpt声明对话式格式columns将数据字段映射到 LLaMA-Factory 内部结构tags指明角色与内容字段名DPO 数据用ranking: true表示含排序偏好。3.2 创建训练配置 YAML全参数 SFT 配置minicpm_sala_sft.yaml将下列内容保存为LLaMA-Factory/examples/minicpm_config/minicpm_sala_sft.yaml### model model_name_or_path: openbmb/MiniCPM-SALA trust_remote_code: true ### method stage: sft do_train: true finetuning_type: full ### ddp ddp_timeout: 180000000 deepspeed: examples/deepspeed/ds_z3_config.json ### dataset dataset: sft_zh_demo template: cpm4 cutoff_len: 1800 max_samples: 500000 overwrite_cache: true preprocessing_num_workers: 16 ### output output_dir: saves/minicpm/minicpm_sala_full logging_steps: 10 save_strategy: epoch plot_loss: true overwrite_output_dir: true ### train per_device_train_batch_size: 2 gradient_accumulation_steps: 4 learning_rate: 0.0001 num_train_epochs: 3.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ### eval val_size: 0.1 per_device_eval_batch_size: 4 eval_steps: 500配置要点trust_remote_code: trueMiniCPM-SALA 依赖远程代码加载自定义模型实现必须开启template: cpm4选择 MiniCPM4 系对话模板与模型家族匹配cutoff_len: 1800单样本最大 token 数超过部分截断max_samples: 500000防止超大数据集意外拖垮预处理val_size: 0.1从训练集中切出 10% 作为验证集DeepSpeed 配置指向 LLaMA-Factory 自带的examples/deepspeed/ds_z3_config.json。LoRA SFT 配置minicpm_sala_lora_sft.yaml复制minicpm_sala_sft.yaml仅将finetuning_type由full改为lora其余保持不变。DPO / KTO 配置参考仓库 llama_factory/configs 目录还提供对齐训练配置minicpm_dpo.yamlstage: dpolearning_rate: 0.00001低于 SFTcutoff_len: 1200num_train_epochs: 2.0使用dpo_en_demo数据minicpm_kto.yamlstage: ktolearning_rate: 0.000005num_train_epochs: 1.0per_device_train_batch_size: 4使用kto_en_demo数据minicpm_sft_lora.yamlfinetuning_type: lora的 SFT 变体。可以观察到 DPO/KTO 采用明显更低的学习率与更少的训练轮数这是偏好对齐训练的常见实践。3.3 模型训练命令全参数训练DeepSpeedllamafactory-cli train examples/minicpm_config/minicpm_sala_sft.yaml全参数训练Accelerate FSDP 多节点accelerate launch \ --config_file examples/accelerate/fsdp_config_multiple_nodes.yaml \ src/train.py examples/minicpm_config/minicpm_sala_sft.yamlLoRA 训练DeepSpeedllamafactory-cli train examples/minicpm_config/minicpm_sala_lora_sft.yaml仓库 llama_factory/scripts 下还提供了对应的 shell 封装sft_finetune.sh、lora_finetune.sh、sft_finetune_multi_nodes.sh可直接复用或改写路径后使用。四、两种方式的对比与选择建议维度Transformers Trainer 官方脚本LLaMA-Factory依赖transformers deepspeed accelerate peftLLaMA-Factory 及其依赖训练模式SFT全参 / LoRA / QLoRASFT / DPO / KTO / Pretrain全参 / LoRA数据格式messages 对话格式内置 loss_maskalpaca / sharegpt 等配置映射即可分布式DeepSpeed ZeRO、Accelerate FSDP、Multi-GPUDeepSpeed、Accelerate FSDP 多节点学习成本低脚本即文档中需理解 stage/template/columns 概念适用场景快速验证、定制化数据 pipeline多策略对齐、统一配置管理、复现实验实际选择上若你只需要跑通一次广告文案生成或单领域 SFT官方 Trainer 脚本 finetune.py 配合 AdvertiseGenChatML 示例数据即可快速出结果若需要在同一模型上依次做 SFT、DPO、KTO 的完整对齐流水线建议直接采用 LLaMA-Factory配置可复用、可版本化管理。五、常见问题与排错建议数据加载失败 / 找不到数据集检查训练集与验证集路径是否正确指向 data 下的 JSON 文件LLaMA-Factory 场景还需确认dataset名称已登记到dataset_info.json。序列长度溢出Trainer 场景调大--model_max_length默认 512脚本内SupervisedDataset默认 4096LLaMA-Factory 场景调大cutoff_len同时注意显存占用会线性增长。显存不足OOM按顺序尝试——减小per_device_train_batch_size或model_max_length→ 使用 ZeRO-2/ZeRO-3 offload 配置ds_config_zero2_offload.json 等→ 切换到 LoRA--use_lora或finetuning_type: lora→ 使用 QLoRA 4-bit 加载。多节点通信失败逐一核对main_process_ip、main_process_port、machine_rank、num_machines、num_processes五个参数在各节点的一致性参照 fsdp_config_multiple_nodes.yaml 顶部注释。模型输出异常确认template: cpm4与模型版本匹配MiniCPM 系列依赖远程代码务必保持trust_remote_code: true。国内网络下载模型缓慢参考脚本中的export HF_ENDPOINThttps://hf-mirror.com设置镜像端点。六、进一步探索微调后推理与部署参考仓库 docs/deployment 下的 vLLM、SGLang、Ollama 等部署指南量化部署仓库 quantize 目录提供了 AWQ、GPTQ、BNB 量化脚本更多微调工具链仓库 finetune 目录还覆盖 LLaMA-Factory、ms-swift、TRL、Unsloth、XTuner 等框架的说明对应 docs/finetuneMiniCPM-SALA 的项目级介绍见 minicpm_sala/README.md。本文涉及的配置文件与脚本均可在仓库 minicpm_sala/finetune 目录下找到并直接复用建议以仓库内最新脚本为准根据自身数据与硬件微调超参数后再投入正式训练。赞分享大模型本地部署模型量化微调LoRA工具调用openBMBAscend【免费下载链接】MiniCPMMiniCPM4 MiniCPM4.1: Ultra-Efficient LLMs on End Devices, achieving 3 generation speedup on reasoning tasks项目地址https://gitcode.com/OpenBMB/MiniCPM点击查看免费下载相关推荐MiniCPM-SALA 微调实战指南基于 Transformers Trainer 与 LLaMA-Factory 的全参数 / LoRA / 多节点训练MiniCPM SALA 微调实战指南基于 Transformers Trainer 与 LLaMA Factory 的全参数 / LoRA / 多节点训练人工智能大模型基础模型本地部署微调模型量化openBMBMiniCPM-SALA 微调实战指南基于 Transformers Trainer 与 LLaMA-Factory 的全参、LoRA 与分布式训练MiniCPM SALA 微调实战指南基于 Transformers Trainer 与 LLaMA Factory 的全参、LoRA 与分布式训练 本篇指南人工智能大模型基础模型本地部署微调模型量化openBMBSpeechBrain 多 GPU 训练实战从 DDP 单节点到多节点集群部署SpeechBrain 多 GPU 训练实战从 DDP 单节点到多节点集群部署 本篇技术指南基于 SpeechBrain 官方文档 docs/multigpu人工智能深度学习语音音频NLP预训练上一篇一文解决whisper-web与第三方语音转文字API的无缝集成方案下一篇从源码到运行Quake3e引擎完整编译教程Linux系统适用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表