十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleNLP 中的 Gemma 模型精调实战:从 SFT、LoRA 到 DPO/KTO 对齐全流程指南

PaddleNLP 中的 Gemma 模型精调实战:从 SFT、LoRA 到 DPO/KTO 对齐全流程指南 人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载Gemma 是 Google DeepMind 基于 Gemini 同源研究与技术打造的开源轻量级大语言模型家族。本指南以 docs/en/llm/config/gemma/README.md 为核心骨架结合 llm/config/gemma 目录下五份开箱即用的精调配置以及 paddlenlp/transformers/gemma 的源码实现系统讲解在 PaddleNLP 飞桨大模型套件中如何对 Gemma 完成全参 SFT、LoRA 轻量微调以及 DPO、KTO 人类偏好对齐并介绍相关的 4D 并行分布式策略与 Zero Padding 等优化手段。读完本文你将能够直接复制配置并一键启动 Gemma-2B/7B 的精调与对齐任务。1. Gemma 模型概览与支持权重Gemma 由 Google DeepMind 及 Google 其他团队开发是一个轻量级、业界领先的开源模型家族其构建所使用的研究与技术正是用于创建 Gemini 模型的那一套因此天然具备较强的指令遵循与生成能力。在 PaddleNLP 中Gemma 已被完整接入预训练权重加载、Tokenizer、模型结构与各类精调流程。PaddleNLP 目前支持的 Gemma 官方权重如下模型权重google/gemma-7bgoogle/gemma-7b-itgoogle/gemma-2bgoogle/gemma-2b-it其中带-it后缀的是经过指令微调的对话版本适合直接推理或作为对齐任务的基座不带-it的是基座模型适合继续做 SFT 与对齐训练。这些权重可通过model_name_or_path字段直接指定PaddleNLP 会从模型中心自动下载并转换为飞桨格式见 configuration.py 中维护的GEMMA_PRETRAINED_RESOURCE_FILES_MAP。2. 精调前的环境准备与数据格式按照 llm/README.md 的说明使用大模型套件前建议安装 PaddleNLP 最新 develop 版本pip install --pre --upgrade paddlenlp -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html2.1 精调数据格式套件支持的精调数据是每行包含一个字典的 JSON 文件每个字典包含两个核心字段srcstr或List(str)模型的输入指令instruction、提示prompt即模型需要执行的任务tgtstr或List(str)模型期望输出的目标内容。样例数据{src: Give three tips for staying healthy., tgt: 1.Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule.}在llm目录下解压官方提供的 alpaca demo 数据集即可快速跑通全流程数据准备细节见 llm/README.mdwget https://bj.bcebos.com/paddlenlp/datasets/examples/alpaca_demo.gz tar -xvf alpaca_demo.gz多轮对话场景下套件还支持统一的对话模板相关说明见 多轮对话文档。3. PaddleNLP 中的 Gemma 模型实现在进入配置讲解之前先了解 Gemma 在 PaddleNLP 中的源码实现有助于理解后续各配置项的底层含义。Gemma 相关代码集中在 paddlenlp/transformers/gemma 目录由五个文件组成configuration.pyGemmaConfig配置类与预训练权重资源映射modeling.py模型主干实现modeling_pp.py流水线并行Pipeline Parallel版本实现tokenizer.py/tokenizer_fast.py基于 SentencePiece 的慢速/快速分词器。3.1 GemmaConfig 关键结构参数在 configuration.py 中GemmaConfig继承了PretrainedConfig并通过model_type gemma标识模型类型。GEMMA_PRETRAINED_INIT_CONFIGURATION给出了google/gemma-2b的完整默认结构参数参数gemma-2b 默认值含义hidden_size2048隐藏层维度intermediate_size16384MLP 中间层维度num_hidden_layers28Transformer 编码器层数num_attention_heads8注意力头数num_key_value_heads1KV 头数GQA 分组查询注意力num_attention_heads / num_key_value_heads8:1说明采用 GQA 结构rms_norm_eps1e-6RMS 归一化层 epsilonvocab_size256000词表大小max_position_embeddings8192最大序列长度bos/eos/pad_token_id2/1/0特殊 token 编号head_dim256每头维度rope_theta10000.0RoPE 旋转位置编码基频tie_word_embeddingsTrue是否绑定输入输出词嵌入GemmaConfig.__init__还暴露了fuse_attention_qkv融合 QKV 投影、fuse_attention_ffn融合 FFN 投影、alibi是否使用 ALiBi 位置编码等优化开关并在rope属性中定义rope not self.alibi即默认启用 RoPE 旋转位置编码。3.2 模型结构核心模块在 modeling.py 中Gemma 的模型结构由以下核心组件构成从源码结构可以清晰地看到其 Decoder-only 架构GemmaRMSNormL352RMS 归一化层GemmaRotaryEmbeddingL378旋转位置编码嵌入层GemmaMLPL418前馈网络包含gate_proj、up_proj、down_proj三个投影GemmaAttentionL462GQA 分组查询注意力实现GemmaDecoderLayerL785单个 Transformer 解码层RMSNorm Attention MLP 的残差结构GemmaModelL1071整个骨干网络GemmaForCausalLML1443带语言建模头的因果语言模型入口支持generate推理。分词器方面tokenizer.py 中的GemmaTokenizer基于 SentencePiecetokenizer.modelmodel_input_names [input_ids, attention_mask]特殊 token 为unk、bos、eos、pad。4. 全参精调SFTllm/config/gemma/sft_argument.json 是 Gemma 全参 SFT 的推荐配置完整内容如下{ model_name_or_path: google/gemma-2b, dataset_name_or_path: ./data, output_dir: ./checkpoints/sft_ckpts, per_device_train_batch_size: 2, gradient_accumulation_steps: 1, per_device_eval_batch_size: 8, eval_accumulation_steps: 16, num_train_epochs: 3, learning_rate: 3e-05, warmup_steps: 30, logging_steps: 1, evaluation_strategy: epoch, save_strategy: epoch, src_length: 512, max_length: 1024, fp16: true, fp16_opt_level: O2, do_train: true, do_eval: true, disable_tqdm: true, load_best_model_at_end: true, eval_with_do_generation: false, metric_for_best_model: accuracy, recompute: true, save_total_limit: 1, tensor_parallel_degree: 1, pipeline_parallel_degree: 1, sharding_parallel_degree: 8, sharding: stage2, zero_padding: false, unified_checkpoint: true, use_flash_attention: true }关键配置项说明model_name_or_pathgoogle/gemma-2b指定基座权重可替换为google/gemma-2b-it、google/gemma-7b等上表权重dataset_name_or_path指向./data目录即上文下载并解压的 alpaca 数据集目录output_dir精调产出的模型与 checkpoint 保存路径训练超参per_device_train_batch_size2、gradient_accumulation_steps1、num_train_epochs3、learning_rate3e-5、warmup_steps30配合evaluation_strategy/save_strategy均为epoch即每个 epoch 末评估与保存一次load_best_model_at_endtrue会在训练结束后加载验证集上metric_for_best_modelaccuracy最优的 checkpoint序列长度src_length512输入长度、max_length1024输入 输出的总长度上限混合精度fp16true搭配fp16_opt_levelO2开启飞桨 O2 级别的 FP16 混合精度训练显存优化recomputetrue开启激活重计算以时间换显存use_flash_attentiontrue使用 FlashAttention 加速注意力计算分布式并行tensor_parallel_degree1、pipeline_parallel_degree1、sharding_parallel_degree8、shardingstage2构成分组参数切片的数据并行ZeRO stage2策略即 8 卡场景下对优化器状态和梯度进行切分显著降低每卡显存占用unified_checkpointtrue启用统一 checkpoint 格式便于跨并行策略复用权重Zero Paddingzero_paddingfalse如需进一步降低无效 pad token 占比、提升训练效率可开启为true配合 FlashMask 使用效果更佳。在llm目录下单卡启动 Gemma SFT 精调python -u run_finetune.py ./config/gemma/sft_argument.json多卡8 卡启动时使用paddle.distributed.launchpython -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 run_finetune.py ./config/gemma/sft_argument.json其中run_finetune.py是套件的统一精调入口见 llm/run_finetune.py它根据配置文件自动组装 Trainer 并应用 4D 并行策略。5. 偏好对齐DPO 与 LoRA DPO在 SFT 之后通常需要借助人类偏好数据对模型进行对齐。PaddleNLP 在 llm/alignment/dpo 目录提供了 DPO 训练入口Gemma 的 DPO 配置位于 dpo_argument.json 与 dpo_lora_argument.json。5.1 全参 DPOdpo_argument.json 的完整内容{ model_name_or_path: google/gemma-2b, train_dataset_path: ./data/train.jsonl, dev_dataset_path: ./data/dev.jsonl, output_dir: ./checkpoints/dpo_ckpts, per_device_train_batch_size: 1, gradient_accumulation_steps: 1, per_device_eval_batch_size: 1, num_train_epochs: 1, max_steps: 100, learning_rate: 1e-06, warmup_steps: 10, logging_steps: 1, evaluation_strategy: steps, save_strategy: steps, eval_steps: 100, save_steps: 500, max_seq_len: 4096, max_prompt_len: 2048, bf16: true, fp16_opt_level: O2, do_train: true, do_eval: true, disable_tqdm: true, load_best_model_at_end: true, tensor_parallel_degree: 2, sharding: stage1, use_flash_attention: true, recompute: false, recompute_granularity: full, beta: 0.1, benchmark: false, loss_type: sigmoid, label_smoothing: 0.0, unified_checkpoint: true, autotuner_benchmark: false, lazy: false, seed: 42, sft_loss_ratio: 0.0 }与 SFT 配置相比DPO 特有的关键项数据改为train_dataset_path/dev_dataset_path指向包含偏好对chosen/rejected的train.jsonl与dev.jsonl序列长度max_seq_len4096、max_prompt_len2048DPO 需要同时容纳 prompt 与答案对序列更长DPO 超参beta0.1为 DPO 正则化系数控制对参考策略的偏离程度loss_typesigmoid为 DPO 原始 sigmoid 损失形式label_smoothing0.0关闭标签平滑sft_loss_ratio0.0表示不混入 SFT 损失精度使用bf16trueBF16 混合精度在大规模对齐训练中 BF16 相比 FP16 拥有更大的动态范围分布式tensor_parallel_degree2配合shardingstage1采用 2 路张量并行 ZeRO stage1切分优化器状态的组合。启动命令参照 llm/README.md 中 DPO 的用法将配置替换为 Gemma 的python -u ./alignment/dpo/run_dpo.py ./config/gemma/dpo_argument.json多卡启动python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 ./alignment/dpo/run_dpo.py ./config/gemma/dpo_argument.json5.2 LoRA DPO轻量对齐当显存受限或希望快速迭代时可使用 dpo_lora_argument.json 中的 LoRA DPO 配置。它在全参 DPO 的基础上仅额外改动以下几点learning_rate: 1e-05, gradient_accumulation_steps: 8, tensor_parallel_degree: 1, lora: true, lora_rank: 64, rslora_plus: trueloratrue启用 LoRA 低秩适配只训练注入的低秩矩阵冻结其余全部参数lora_rank64LoRA 低秩矩阵的秩秩越大适配能力越强、参数量也越多rslora_plustrue开启 RsLoRA 变体基于秩缩放改进的 LoRA对较大 rank 更稳定同时将tensor_parallel_degree降为 1LoRA 冻结主干后对张量并行的依赖降低并通过gradient_accumulation_steps8模拟更大的等效 batch。LoRA DPO 的启动命令与全参 DPO 相同仅配置文件替换为dpo_lora_argument.jsonpython -u ./alignment/dpo/run_dpo.py ./config/gemma/dpo_lora_argument.json6. 偏好对齐KTO 与 LoRA KTOKTOKahneman-Tversky Optimization是另一种不需要成对偏好数据的人类对齐方法它只需要对单个输出打上可取/不可取标签。PaddleNLP 提供 KTO 训练入口于 llm/alignment/ktoGemma 对应配置为 kto_argument.json 与 kto_lora_argument.json。6.1 全参 KTOkto_argument.json 的核心内容{ model_name_or_path: google/gemma-2b, train_dataset_path: ./data/train.jsonl, dev_dataset_path: ./data/dev.jsonl, output_dir: ./checkpoints/kto_ckpts, per_device_train_batch_size: 1, gradient_accumulation_steps: 8, per_device_eval_batch_size: 1, num_train_epochs: 1, max_steps: 100, learning_rate: 2e-06, warmup_steps: 10, max_seq_len: 4096, max_prompt_len: 2048, bf16: true, fp16_opt_level: O2, tensor_parallel_degree: 8, sharding: stage1, use_flash_attention: true, recompute: false, recompute_granularity: full, beta: 0.1, unified_checkpoint: true, seed: 42 }特点说明与 DPO 共用beta0.1正则化系数但损失函数采用 KTO 形式无需成对样本learning_rate2e-6相比 DPO 更低KTO 对学习率更为敏感tensor_parallel_degree8配合shardingstage1即 8 路张量并行适合单机多卡显存吃紧时对大模型做对齐recompute_granularityfull定义了重计算的粒度开启recompute时可按 full 粒度重算整层激活。启动命令参照 llm/README.md 的 KTO 用法python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 ./alignment/kto/run_kto.py ./config/gemma/kto_argument.json6.2 LoRA KTOkto_lora_argument.json 在 KTO 基础上仅追加 LoRA 相关开关learning_rate: 2e-05, lora: true即使用默认 rank 的 LoRA 对 Gemma 做轻量 KTO 对齐学习率由全参的2e-6提升至2e-5LoRA 训练通常需要更高的学习率。启动命令python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 ./alignment/kto/run_kto.py ./config/gemma/kto_lora_argument.json7. 4D 并行与显存优化策略小结Gemma 各配置文件中的分布式字段统一遵循飞桨大模型套件的 4D 并行设计详见 llm/README.md用户只需修改 Trainer 配置即可组合不同策略数据并行DP默认维度每卡持有完整模型副本、切分数据分组参数切片Sharding / ZeROshardingstage1只切分优化器状态shardingstage2进一步切分梯度shardingstage3再切分模型参数配合sharding_parallel_degree指定切分卡数张量并行TPtensor_parallel_degree将单层权重按头/列切分到多卡流水线并行PPpipeline_parallel_degree将模型按层切分到多卡modeling_pp.py即为 Gemma 的流水线并行实现。在显存优化层面套件还提供zero_padding零填充减少 pad token 无效计算、recompute激活重计算、use_flash_attentionFlashAttention 内核加速、unified_checkpoint统一 checkpoint 便于并行策略间迁移等选项均已在上述 Gemma 配置中给出推荐取值可根据硬件显存规模灵活调整。8. 小结PaddleNLP 为 Gemma 提供了从权重加载、模型结构到精调对齐的完整链路支持通过 llm/config/gemma 下的sft_argument.json、dpo_argument.json、dpo_lora_argument.json、kto_argument.json、kto_lora_argument.json五份配置分别覆盖全参 SFT、全参/LoRA DPO、全参/LoRA KTO 五种主流训练范式底层由 GemmaConfig 与 modeling.py 提供与官方一致的 GQA 注意力、RMSNorm、RoPE 等架构实现训练侧则由 llm/run_finetune.py、llm/alignment/dpo/run_dpo.py、llm/alignment/kto/run_kto.py 统一承载并集成了 4D 并行、混合精度、FlashAttention 与统一 checkpoint 等工程化能力。开发者只需准备好src/tgt或偏好对/带标签格式的数据修改配置文件中的模型与路径字段即可在单卡或多卡环境下完成 Gemma 的定制化训练。赞分享人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐大模型偏好对齐实战PaddleNLP中DPO与KTO全参、LoRA精调完整教程大模型偏好对齐实战PaddleNLP中DPO与KTO全参、LoRA精调完整教程 PaddleNLP 内置了完整的 偏好对齐 工具链只需一份偏好数据集和一行启人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测MiniCPM 微调实战指南从 SFT 全量微调到 LoRA/QLoRA 与 DPO 对齐MiniCPM 微调实战指南从 SFT 全量微调到 LoRA/QLoRA 与 DPO 对齐 导读 本文基于 OpenBMB 开源仓库 MiniCPM 中的 f大模型本地部署模型量化微调LoRA工具调用openBMBAscendPaddleNLP Auto Parallel 全流程实战指南从预训练、SFT、LoRA、DPO 到推理PaddleNLP Auto Parallel 全流程实战指南从预训练、SFT、LoRA、DPO 到推理 导读 本文是 PaddleNLP 自动并行Auto人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表