
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文以 PaddleNLP 仓库中 slm/model_zoo/bert/static 目录下的 BERT 静态图实现为主线系统讲解基于 PaddlePaddle Fleet 分布式 API 完成 BERT 预训练Pre-training、GLUE 评测任务微调Fine-tuning与推理部署的完整链路。读完本文你将掌握从 hdf5 预训练数据生成、静态图分布式训练参数配置到模型导出与 Python 推理的全套可复现操作流程并能理解脚本背后 Fleet 分布式策略、AMP 混合精度、动态学习率调度等底层实现原理。方案概览为什么选择静态图 Fleet APIBERTBidirectional Encoder Representations from Transformers以 Transformer 编码器为网络基本组件通过掩码语言模型Masked Language Model与邻接句子预测Next Sentence Prediction两个预训练任务在大规模无标注文本上学习双向语义表示再结合简单的任务输出层微调即可迁移到下游 NLP 任务。本项目即 BERT 在 Paddle 2.0 上的开源实现包含预训练与 GLUE 评测任务的微调代码。与动态图版本见 slm/model_zoo/bert/README.md相比静态图版本在组网代码层面保持动静统一同时借助 Fleet API 在计算速度与多机联合训练方面具备更优表现。整个 static 目录包含如下关键文件文件作用create_pretraining_data.py将原始文本转换为 hdf5 格式的预训练数据dataset.py预训练数据读取、batch 拼接与静态图数据 holder 定义run_pretrain.pyBERT 预训练主程序Fleet 静态图分布式训练run_glue.pyGLUE 各任务微调主程序含训练、评估与推理模型导出run_glue_with_sparaity.py引入 Paddle 稀疏训练库ASP的微调变体predict_glue.py基于 Paddle Inference 的 GLUE 推理脚本data/sample_text.txt预训练数据生成的示例文本Pre-training 数据准备create_pretraining_data.py 的处理流程create_pretraining_data.py是创建预训练程序所需数据的脚本。它以文本文件为输入使用换行符换行、空白符分隔data/sample_text.txt 提供了示例数据经由 BERT tokenizer 完成 tokenize 后再依次进行生成 sentence pair 正负样本、掩码 token 等处理最终输出 hdf5 格式的数据文件。从源码实现看核心流程分为三个阶段文档与句子划分脚本按行读取文本空行作为文档分隔符create_training_instances中注释明确要求每行一个句子、文档间以空行分隔因为 NSP 任务依赖真实句子边界每行经 tokenizer 分词后存入对应文档。训练样本生成create_instances_from_document在文档内部按目标长度切分 chunk以随机方式决定句子 A 与 B 的来源——若rng.random() 0.5则从随机文档中抽取句子 B 构造负样本is_random_nextTrue否则使用当前文档后续句子构造正样本句子拼接遵循[CLS] A [SEP] B [SEP]的经典格式。掩码语言模型预测生成create_masked_lm_predictionscreate_pretraining_data.py先过滤掉[CLS]/[SEP]特殊 token再按masked_lm_prob概率计算待掩码数量并严格遵循 BERT 论文的 80/10/10 策略——80% 概率替换为[MASK]、10% 保持原词、10% 替换为词表中的随机词。命令行用法与参数详解python create_pretraining_data.py \ --input_filedata/sample_text.txt \ --output_filedata/training_data.hdf5 \ --bert_modelbert-base-uncased \ --max_seq_length128 \ --max_predictions_per_seq20 \ --masked_lm_prob0.15 \ --random_seed12345 \ --dupe_factor5各参数释义如下input_file指定输入文件也可以传目录此时会包含目录中所有.txt文件源码中通过os.path.isdir分支收集以.txt结尾的文件。output_file指定输出的 hdf5 文件路径。bert_model指定使用特定 BERT 模型对应的 tokenizer 进行 tokenize提供该参数时会忽略vocab_file与do_lower_case可选值包括bert-base-uncased、bert-large-uncased、bert-base-cased、bert-base-multilingual、bert-base-chinese等。若不提供则需通过--vocab_file显式指定词表。max_seq_length最大句子长度超过则截断不足则 padding默认 128。max_predictions_per_seq每个句子中被 mask 的 token 最大数量默认 20。masked_lm_prob每个 token 被 mask 的概率默认 0.15。random_seed随机种子默认 12345。dupe_factor输入数据被重复处理的次数每次处理都会重新产生随机 mask源码默认值为 10示例中设置为 5。另外脚本还支持--short_seq_prob默认 0.1用于以 10% 概率生成短于最大长度的序列以缓解预训练与微调之间的序列长度分布差异。数据写出时write_instance_to_example_file会以 gzip 压缩将input_ids、input_mask、segment_ids、masked_lm_positions、masked_lm_ids、next_sentence_labels六个字段落盘为 hdf5 文件。说明使用以上数据生成程序可以处理领域垂类数据用于后续二次预训练。若需要复现 BERT 论文使用的英文 Wiki 与 BookCorpus 语料可参照 NVIDIA DeepLearningExamples 的 BERT 数据处理流程产出同格式数据得到的 hdf5 文件可以直接接入本项目预训练程序。Fine-tuning 数据准备GLUE 评测任务所含数据集已在 paddlenlp 中以 API 形式提供无需预先准备。执行run_glue.py微调时程序通过load_dataset(glue, args.task_name, splitstrain)run_glue.py自动下载对应数据集。执行 Pre-trainingGPU 训练命令unset CUDA_VISIBLE_DEVICES python -m paddle.distributed.launch --gpus 0 run_pretrain.py \ --model_type bert \ --model_name_or_path bert-base-uncased \ --max_predictions_per_seq 20 \ --batch_size 32 \ --learning_rate 1e-4 \ --weight_decay 1e-2 \ --adam_epsilon 1e-6 \ --warmup_steps 10000 \ --input_dir data/ \ --output_dir pretrained_models/ \ --logging_steps 1 \ --save_steps 20000 \ --max_steps 1000000 \ --device gpu \ --use_amp False参数释义如下model_type模型类型使用 BERT 时设为bert源码中MODEL_CLASSES {bert: (BertForPretraining, BertTokenizer)}。model_name_or_path指示特定配置的预训练模型对应有预训练权重与 tokenizer若模型保存在本地也可直接传入目录地址。max_predictions_per_seq每个句子中被 mask 的 token 最大数量必须与创建预训练数据时的设置一致源码默认 80。batch_size每次迭代每张卡上的样本数目源码默认 8。learning_rate基础学习率会与 learning rate scheduler 产生的系数相乘得到当前学习率源码默认 5e-5。weight_decayAdamW 优化器的 weight_decay 系数源码默认 0.0。adam_epsilonAdamW 优化器的 epsilon 值源码默认 1e-8。warmup_steps学习率线性热启的 step 数源码默认 0。num_train_epochs训练轮数README 有列出注意源码中当max_steps 0时以max_steps为准覆盖轮数。input_dir输入数据目录该目录下所有文件名中包含training的文件会被作为训练数据源码通过training in f过滤。output_dir模型保存目录checkpoint 会按model_%dglobal step子目录保存。logging_steps日志打印间隔源码默认 500。save_steps模型保存及评估间隔源码默认 500。max_steps最大训练步数达到后提前结束。device训练设备gpu表示 GPUxpu表示百度昆仑卡cpu表示 CPU。use_amp是否启用自动混合精度训练源码默认 False。NOTICE预训练时data目录存放的是经过create_pretraining_data.py处理后的 hdf5 数据必须预先处理否则预训练会直接报错。静态图训练循环与数据读取的实现细节预训练程序在paddle.enable_static()后进入静态图模式通过paddle.set_device选定设备并调用fleet.init(is_collectiveTrue)初始化分布式环境run_pretrain.py。数据侧由 dataset.py 中的PretrainingDataset完成 hdf5 读取每次__getitem__会以masked_lm_positions 0的位置推断当前样本真实掩码数量将masked_lm_ids截断后沿最后一维展开满足softmax_with_cross_entropy对最后一维尺寸为 1 的要求input_mask则被转换为(1 - mask) * -1e4的注意力掩码形式。create_pretraining_dataset中的 collate 函数还会将masked_lm_positions按i * seq_length pos展开为一维索引并将 mask token 总数拼到 batch 末尾且当总数非 8 的倍数时自动补齐到 8 的倍数以兼容 fp16/int8 计算。训练主循环按 epoch 轮换数据文件select_dataset_file_for_each_worker依据worker_num与worker_index为每个分布式进程挑选不同的 hdf5 文件并通过ThreadPoolExecutor(1)预取下一个数据集的 DataLoader从而隐藏文件读取开销run_pretrain.py。日志会输出avg_reader_cost、avg_batch_cost、ips以及 CUDA 显存占用checkpoint 保存时由 rank 0 进程写出模型配置、静态图参数与 tokenizermodel.save_model_configpaddle.static.savetokenizer.save_pretrained。优化器、动态学习率与分布式策略训练使用LinearDecayWithWarmup调度器配合 AdamW 优化器num_training_steps由max_steps或len(train_data_loader) * num_train_epochs决定权重衰减通过decay_params白名单实现——所有 bias 与 LayerNorm 参数名称含bias/norm被排除在衰减之外run_pretrain.py。dist_optimizer函数将普通优化器包装为 Fleet 分布式优化器并透传多个静态图专属扩展参数run_pretrain.pymax_grad_norm梯度裁剪范数默认 1.0。seed随机种子默认 42用于保证分片后各进程数据一致性。gradient_merge_steps梯度累积步数global_batch_size gradient_merge_steps * batch_size大于 1 时启用dist_strategy.gradient_merge。enable_addto是否启用 addto 策略以优化梯度累加内存仅 AMP 训练下使用。scale_lossfp16 训练的初始 loss scaling 值默认 2^15。use_pure_fp16是否使用纯 fp16 训练开启时input_mask与masked_lm_scale会在 collate 阶段被转换为 fp16。fuse_transformer是否用 FusedTransformerEncoderLayer 替换 TransformerEncoderLayer 以加速。profiler_options格式为key1value1;key2value2的 profiler 选项用于基准测试。当use_ampTrue时dist_strategy.amp会被打开amp_configs指定softmax、layer_norm、gelu为白名单算子并在纯 fp16 模式下将lookup_table/lookup_table_v2加入黑名单。另外预训练采用随机重初始化而非加载 checkpointreset_program_state_dict会对除 LayerNorm 外的参数按initializer_range尺度做正态分布初始化run_pretrain.py。执行 Fine-tuning以 GLUE SST-2 为例微调命令与参数unset CUDA_VISIBLE_DEVICES python -m paddle.distributed.launch --gpus 0 run_glue.py \ --model_type bert \ --model_name_or_path bert-base-uncased \ --task_name SST-2 \ --max_seq_length 128 \ --batch_size 32 \ --learning_rate 2e-5 \ --num_train_epochs 3 \ --logging_steps 1 \ --save_steps 500 \ --output_dir ./tmp/ \ --device gpu参数释义如下model_type模型类型bert或ernie源码MODEL_CLASSES同时支持 ERNIE。model_name_or_path预训练模型标识或本地路径。bert-base-uncased等对应权重由 huggingface/transformers 转换而来可参考当前目录下 converter 中的内容。task_name微调任务名支持cola、sst-2、sts-b、mnli、qnli、rte源码METRIC_CLASSES的键。max_seq_length最大句子长度超过截断默认 128。batch_size每次迭代每张卡的样本数目默认 8。learning_rate基础学习率默认 5e-5。num_train_epochs训练轮数默认 3。logging_steps日志打印间隔默认 500。save_steps模型保存及评估间隔默认 500。output_dir模型保存路径。device训练设备gpu/xpu/cpu均可。此外脚本还支持weight_decay、adam_epsilon、max_grad_norm、warmup_steps、max_steps、seed等超参数源码默认值分别为 0.0、1e-8、1.0、0、-1、42。数据、组网与评估的实现细节微调数据同样通过load_dataset(glue, args.task_name, ...)自动加载convert_example按任务类型处理输入——句子对任务使用tokenizer(sentence1, text_pairsentence2)单句任务使用tokenizer(sentence)回归任务STS-B的 label 为float32分类任务为int64run_glue.py。模型侧加载BertForSequenceClassification并在头部新增与label_list长度匹配的分类层MNLI 任务会同时加载dev_matched与dev_mismatched两个验证集。每个save_steps会先执行评估再保存模型评估函数根据任务选择指标类——cola用MccMatthews 相关系数、sts-b用PearsonAndSpearman、其余用Accuracyrun_glue.py。微调 checkpoint 加载逻辑在reset_program_state_dict中预训练模型已有的参数直接拷贝分类头等新增参数则按initializer_range做正态初始化。保存时使用paddle.static.save_inference_model导出[input_ids, token_type_ids] - [logits]的推理模型并将 tokenizer 一同保存到model_%d子目录。复现结果参考基于bert-base-uncased在 GLUE 各评测任务验证集上 Fine-tuning 的结果如下论文原始结果由官方 README 记录TaskMetricResultCoLAMatthews corr59.90SST-2Accuracy92.76STS-BPearson/Spearman corr89.12MNLImatched acc./mismatched acc.84.45/84.62QNLIacc.91.73RTEacc.67.15预测模型导出与 GLUE 推理导出推理模型run_glue.py在每次save_steps触发评估后即通过paddle.static.save_inference_model将当前模型导出为可部署的推理模型保存在output_dir/model_%d目录下。因此完成 Fine-tuning 后无需额外导出步骤即可直接使用./tmp/model_20/infer_model这样的前缀路径进行预测。执行预测python -u ./predict_glue.py \ --task_name SST-2 \ --model_type bert \ --model_path ./tmp/model_20/infer_model \ --batch_size 32 \ --max_seq_length 128参数释义如下task_name要执行预测的 GLUE 任务。model_type模型类型bert即可。model_path预测模型文件的前缀与导出推理模型时的前缀即output_dir下model_%d子目录路径保持一致。batch_size每个预测批次的样本数目默认 32。max_seq_length最大句子长度超过截断默认 128。device推理设备可选gpu/cpu/xpu默认 gpu。NOTICEpredict_glue.py中的./tmp/model_20/infer_model是run_glue.py保存下来的推理模型路径实际使用时需按自己的output_dir与 step 编号调整。静态图推理的内部机制Predictor.create_predictor使用 Paddle Inference 的Config加载${model_path}.pdmodel与${model_path}.pdiparams两个文件predict_glue.pyGPU 下调用enable_use_gpu(100, 0)CPU 下disable_gpu()可配合 mkldnn 与 CPU 线程数设置XPU 下调用enable_xpu(100)随后关闭use_feed_fetch_ops并通过get_input_handle/get_output_handle建立输入输出句柄。预测数据由load_dataset(glue, task_name, splitstest)提供tokenizer 从model_path所在目录加载经Pad补齐后以固定 batch 送入 predictor输出 logits 结果。扩展稀疏训练与其他实践入口稀疏微调run_glue_with_sparaity.py 在run_glue.py基础上引入paddle.incubate.aspAuto SParsity自动稀疏训练模块支持在保持精度的前提下通过结构化稀疏矩阵乘法降低训练开销参数接口与run_glue.py保持一致。动态图版本若希望以更灵活的 Trainer API 训练可参考 slm/model_zoo/bert/README.md 中的run_pretrain_trainer.py/run_glue_trainer.py用法其中包含--do_train、--do_eval、--fp16等参数以及使用 export_model.py 导出模型、经 deploy/python 完成 Python 在线部署的示例。IPU 支持仓库还提供了基于 IPU 的静态图版本slm/model_zoo/bert/static_ipu内置 pod4/pod16 的预训练与 SQuAD 微调脚本供特定硬件环境使用。常见问题与注意事项预训练数据必须先处理input_dir必须指向经create_pretraining_data.py生成的 hdf5 文件且文件名需包含training字样直接放入原始 txt 会导致训练报错。参数一致性max_predictions_per_seq在数据生成与训练两个阶段必须保持一致否则数据读取与 loss 计算将错位。masked_lm_prob 的作用边界create_pretraining_data.py中的masked_lm_prob决定掩码数量上限min(max_predictions_per_seq, max(1, round(len(tokens) * masked_lm_prob)))与模型侧BertPretrainingCriterion中基于masked_lm_scale的加权方式共同构成 MLM 损失。分布式文件分配input_dir下的文件数若少于 worker 数select_dataset_file_for_each_worker会采用取模方式复用文件确保每个进程始终有数据可读。推理模型路径predict_glue.py的model_path是文件前缀不含.pdmodel/.pdiparams后缀且 tokenizer 需位于该路径所在目录。整体来看该静态图方案以动静统一的组网方式降低了从动态图迁移的门槛同时通过 Fleet API 将数据并行、AMP、梯度累积等分布式能力下沉到框架层为大规模 BERT 预训练与下游任务微调提供了开箱即用的参考实现。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 基于 Graphcore IPU 的 BERT-Base 预训练与 SQuAD 微调实战指南PaddleNLP 基于 Graphcore IPU 的 BERT Base 预训练与 SQuAD 微调实战指南 本文以 PaddleNLP 仓库中 slm/m人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP BERT 预训练与 GLUE 微调实战从数据制作到推理部署全流程指南PaddleNLP BERT 预训练与 GLUE 微调实战从数据制作到推理部署全流程指南 导读 本文基于 PaddleNLP 开源仓库中 slm/model_人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP RoBERTa 预训练实战基于 Masked Language Modeling 的数据处理、训练与微调全流程PaddleNLP RoBERTa 预训练实战基于 Masked Language Modeling 的数据处理、训练与微调全流程 本篇技术指南围绕 Padd人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考