
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本篇指南基于 PaddleNLP 官方新手教程 大模型预训练 展开以 Qwen2.5-0.5B 为例完整讲解大语言模型LLM预训练的全流程依赖安装、mmap 格式训练数据的准备与制作原理、训练脚本 run_pretrain.py 与 JSON 配置文件的逐项解析、训练日志解读以及显存不足时的量化/重计算/多卡并行解决方案。读完本文你不仅能在自己的 GPU 上复现 16G 显存即可运行的预训练实验还能读懂 llm/config/qwen/pretrain_argument_0p5b.json 中每个参数背后的源码实现逻辑并在自有语料上独立开展预训练。一、预训练任务目标与整体流程大模型预训练的目标是让模型学习语言的结构和语义训练数据通常是大规模自然语言文本例如新闻、小说、百科、网络论坛与问答内容。与常见的数据、标签式监督学习不同预训练是无监督训练基本思想是根据之前的词语预测下一个词。以 PaddleNLP 官方样例语料为例飞桨是功能完备、开源开放的产业级深度学习平台。 飞桨拥有核心训练和推理框架、基础模型库。 PaddleNLP是自然语言处理领域的优秀工具。取第一句构造训练样本就是输入前文、预测下一个 token(输入) 飞桨是功能完备、开源开放的产业级深度学习 - (输出) 平台在 llm/run_pretrain.py 的源码中这一移位对齐逻辑由create_pretrained_dataset内的_collate_data函数实现llm/run_pretrain.py#L236-L245def _collate_data(data, stack_fnStack()): tokens_ stack_fn([x[text] for x in data]) labels copy.deepcopy(tokens_)[:, 1:] # labels 是 input_ids 右移一位 tokens tokens_[:, :-1] # input_ids 去掉最后一位 return {input_ids: tokens, labels: labels}可以看到labels就是input_ids整体左移一位训练时用交叉熵让模型在每一位置预测下一个 token与教程中预测下一个词的描述完全对应。整个预训练流程可概括为四步依赖安装安装 PaddlePaddle 与 PaddleNLP克隆仓库数据准备将语料转换为 mmap 格式的.bin/.idx文件教程直接使用官方已预处理的 100k 条 OpenWebText 数据启动训练run_pretrain.py 模型配置文件一条命令启动16G 显存即可训练 Qwen2.5-0.5B训练调优针对显存不足采用量化、重计算或 4D 并行数据、Sharding、张量、流水线多卡/多机训练。二、依赖安装首先安装 PaddlePaddle 和 PaddleNLP 的 develop 版本develop 版本包含最新功能官方预训练文档 大模型预训练介绍 也明确推荐# 安装 PaddlePaddle 最新版 python -m pip install --pre paddlepaddle-gpu -i https://www.paddlepaddle.org.cn/packages/nightly/cu118/# Clone PaddleNLP 仓库训练/微调/对齐/量化的脚本都在仓库的 llm/ 目录下 git clone https://github.com/PaddlePaddle/PaddleNLP.git预训练的所有入口脚本与模型配置都集中在llm/目录下入口脚本为 llm/run_pretrain.py模型配置位于 llm/config/ 下各模型子目录如llm/config/qwen/、llm/config/llama/数据制作工具位于 llm/tools/preprocess/。三、数据准备3.1 下载官方预处理好的数据PaddleNLP 提供了 100k 条 doc 的已处理训练样本来自 OpenWebTextCorpus 英文语料新手可直接下载# llama 模型数据下载 wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.bin wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.idxmkdir data mv llama_openwebtext_100k.bin ./data mv llama_openwebtext_100k.idx ./data训练配置中通过input_dir: ./data指向该目录。从 llm/run_pretrain.py 的get_train_data_file函数llm/run_pretrain.py#L258-L280可以看到input_dir下所有.idx文件都会被自动发现多个数据集会按权重 1.0 混合使用也可以通过--input_dir 1.0 file1 2.0 file2的形式手动指定权重。3.2 数据格式与预处理流水线虽然本次直接使用了已处理数据但理解数据格式有助于在自己的语料上复现流程。原始数据经 PaddleNLP 数据流程详见 llm/tools/preprocess/README.md会经历原始数据用空行/换行符隔开的句子json/jsonljsonl 是每行一个文档如{text: PaddleNLP是自然语言...}分词可选PaddleNLP 是 自然语言处理领域 的 优秀工具。转换为 ID每个词转换为数字 ID最终形成 mmapmemory-mapped file文件——.bin二进制文件存放所有文本的 token ID.idx文件记录每句话/每篇文章的起始位置。对应仓库中的脚本分工如下阶段脚本说明原始数据转换trans_to_json.py原始文本转 jsonl支持--workers多进程、--no-merge、--no-shuffle等参数中文分词可选words_segmentation.py中文 WWM 分词适用于语料较大、需多次转换的场景数据 ID 化create_pretraining_data.pytokenize 为 ID输出XXX.binXXX.idx合并分片merge.py合并多个小的.bin/.idx文件以 GPT 类模型如 Llama为例数据 ID 化的典型命令是摘自 llm/tools/preprocess/README.mdpython -u create_pretraining_data.py \ --model_name_or_path idea-ccnl/ziya-llama-13b-v1 \ --input_path baike_sample.jsonl \ --output_prefix baike_sample \ --data_format JSON \ --json_key text \ --data_impl mmap \ --append_eos \ --log_interval 5 \ --workers 40几个关键参数在 create_pretraining_data.py 源码中有对应实现--data_impl mmap/lazymmap格式在读入数据时建立内存映射推荐lazy格式直接读文件对应 llm/run_pretrain.py#L131 中DataArguments.data_impl的默认值mmap--append_eos为 GPT 类模型在文档末尾追加eostoken若 tokenizer 未设置eos_token_id会打印 warning 并跳过llm/tools/preprocess/create_pretraining_data.py#L293-L301存储精度自适应词表小于2^16 - 1时用np.uint16存储否则用np.int32llm/tools/preprocess/create_pretraining_data.py#L321-L324这解释了为何 100k 条数据的.bin文件体积相对很小--cn_seg_func支持lac/seg/jieba三种中文分词后端默认jieba速度快lac更准确但计算量高若语料过大可将 jsonl 拆分为多份并行处理后用 merge.py 合并python merge.py --input /root/data --output-prefix /root/data/merged --data_impl mmap四、启动训练脚本与配置逐项解析PaddleNLP 用统一入口 llm/run_pretrain.py 支持对常用开源大模型的便捷预训练。以 Qwen2.5-0.5B 为例16G 显存可训练python -u ~/PaddleNLP/llm/run_pretrain.py ~/PaddleNLP/llm/config/qwen/pretrain_argument_0p5b.json入口函数的参数解析逻辑llm/run_pretrain.py#L350-L360支持 JSON/YAML/Python 三种配置文件格式且命令行参数优先于配置文件parser PdArgumentParser((ModelArguments, DataArguments, PreTrainingArguments)) if len(sys.argv) 2 and sys.argv[1].endswith(.json): model_args, data_args, training_args parser.parse_json_file_and_cmd_lines()因此可以在不改配置文件的前提下用--learning_rate 1e-5 --max_steps 2000等方式临时覆盖任意参数。4.1 Qwen2.5-0.5B 预训练配置详解llm/config/qwen/pretrain_argument_0p5b.json 是官方为新手实验准备的完整配置逐项说明如下参数取值作用说明model_name_or_pathQwen/Qwen2.5-0.5B模型来源同时用于加载 tokenizertokenizer_name_or_pathQwen/Qwen2.5-0.5B分词器缺省时会回退为model_name_or_pathinput_dir./data预处理数据.bin/.idx所在目录output_dir./checkpoints/pretrain_ckpts检查点与最终模型保存目录per_device_train_batch_size1每卡训练 batch sizegradient_accumulation_steps1梯度累积步数per_device_eval_batch_size2每卡评估 batch sizetensor_parallel_degree1张量并行度pipeline_parallel_degree1流水线并行度shardingstage2飞桨 Sharding 优化 stage2参数/梯度分片virtual_pp_degree1虚拟流水线1F1B 子阶段数sequence_parallel0序列并行开关use_flash_attentionfalseFlash Attention 开关新手配置默认关闭use_fused_rms_normfalse融合 RMSNorm 自定义算子开关max_seq_length1024序列长度同时写入config.seq_lengthlearning_rate3e-05峰值学习率min_learning_rate3e-06衰减下限学习率warmup_steps30warmup 步数logging_steps1每 1 步打印一次 loss 等指标max_steps10000最大训练步数save_steps5000每 5000 步保存一次检查点eval_steps1000每 1000 步评估一次weight_decay0.01权重衰减fp16/fp16_opt_leveltrue /O2开启 O2 混合精度max_grad_norm1.0梯度裁剪阈值dataloader_num_workers1数据加载进程数continue_training0随机初始化从头训练置 1 则加载预训练权重续训do_train/do_eval/do_predicttrue依次执行训练、验证、测试recomputefalse激活重计算开关显存紧张时建议置 truedistributed_dataloader1启用分布式数据加载器recompute_granularityfull重计算粒度unified_checkpointtrue统一检查点格式save_total_limit2最多保留 2 个历史检查点与 Qwen2-7B 配置 llm/config/qwen/pretrain_argument.json 对比可以发现新手配置的取舍7B 配置开启了bf16、use_flash_attention、use_fused_rms_norm、recomputemax_seq_length为 4096、continue_training为 10.5B 配置则全部保守关闭以适配 16G 单卡。4.2 源码中的关键行为1从头训练与续训的区分。main()中根据continue_training决定模型来源llm/run_pretrain.py#L498-L509为真时AutoModelForCausalLM.from_pretrained(...)加载权重为假时from_config(config, dtypedtype)随机初始化。这与官方文档的经验值一致7B 模型续训初始 loss 约为 2.xx随机初始化则从 11.x 左右下降见 llm/docs/pretrain.md 注意事项第 4 条教程日志中loss: 12.06即从头训练的起点。2词表对齐到 128 的倍数。从头训练时会执行config.vocab_size max(config.vocab_size, ((tokenizer.vocab_size - 1) // 128 1) * 128)llm/run_pretrain.py#L418-L420日志会打印Reset vocab size to ... for batter amp performance目的是让 embedding 维度对混合精度算子更友好。3学习率调度。PreTrainingArguments在标准TrainingArguments基础上扩展了min_learning_rate、decay_steps等字段llm/run_pretrain.py#L60-L85。lr_scheduler_type为cosine或linear时分别构建CosineAnnealingWithWarmupDecay/LinearAnnealingWithWarmupDecay从learning_rate经 warmup 后按decay_steps默认等于max_steps衰减到min_learning_ratellm/run_pretrain.py#L514-L539。4数据切分与训练量估算。验证/测试迭代数在入口处被硬编码为eval_iters 10、test_iters 100llm/run_pretrain.py#L379-L380数据按split默认949,50,1划分PretrainingTrainer使用DistributedBatchSampler保证多卡不重复采样llm/run_pretrain.py#L328-L346。5吞吐统计。训练结束后打印的Effective Tokens per second是训练入口自己计算的llm/run_pretrain.py#L550-L556total_effective_tokens ( training_args.per_device_train_batch_size * training_args.dataset_world_size * training_args.max_steps * training_args.gradient_accumulation_steps * data_args.max_seq_length )即batch 数 × 全局设备数 × 步数 × 序列长度除以总训练时间衡量集群整体有效吞吐tokens/s。4.3 训练日志解读训练正常启动后会看到如下滚动日志[ INFO] - loss: 12.0635252, learning_rate: 2e-06, global_step: 1, current_memory_allocated: 7.549170255661011, current_memory_reserved: 7.753237724304199, ... interval_runtime: 1.1518, interval_samples_per_second: 0.8682, interval_tokens_per_second_per_device: 889.0448, interval_hardware_tflops_per_device: 2.77, ... [ INFO] - loss: 12.05887604, learning_rate: 3e-06, global_step: 2, ... interval_tokens_per_second_per_device: 4006.9441, interval_hardware_tflops_per_device: 12.49, ...各字段含义loss当前步交叉熵损失从头训练时约 12对应 vocab 约 15 万 token 的随机输出熵learning_rate处于 warmup 阶段的当前学习率current_memory_allocated/reserved、max_memory_allocated/reserved已分配/已预留及历史峰值显存GB排查 OOM 时应以max_memory_reserved为准interval_tokens_per_second_per_device区间吞吐衡量单卡训练效率interval_hardware_tflops_per_device估算的硬件 TFLOPS 利用率progress_or_epoch训练进度。五、显存不足的排查与优化FAQ若训练中出现RuntimeError: CUDA out of memory. ......说明所需显存超过显卡上限无法按默认设置单卡训练。解决路径有三更换更大显存的显卡、使用模型量化或省显存机制、多卡并行训练。5.1 省显存机制模型量化将权重/激活值从高精度FP32压缩为低精度INT8/FP16 等减小模型体积、降低显存占用PaddleNLP 的量化指南见 llm/docs/quantization.md 与 llm/docs/quantization_tutorial.md。调整配置文件开关修改模型 config 中的以下参数即可控制训练路径use_flash_attention: false, use_fused_rms_norm: false, recompute: false三者与源码的对应关系recompute为 true 时入口会调用model.recompute_enable()打开激活重计算llm/run_pretrain.py#L511-L512以额外计算换显存recompute_granularity: full表示整层重计算use_flash_attention通过LlmMetaConfig.set_llm_config(config, training_args)统一注入模型 configllm/run_pretrain.py#L408-L410。注意 Flash Attention 对硬件架构有要求需要 V100、H100 等显卡才能开启建议使用 CUDA 11.8 及以上环境use_fused_rms_norm需要安装自定义算子。先编译 slm/model_zoo/gpt-3/external_ops 下的算子包含fast_ln、fused_ln、fused_quanted_ops等子模块及 setup.py安装后仍找不到算子时需要额外设置PYTHONPATH。5.2 多卡/多机高性能训练单卡显存/性能不足时可借助 PaddleNLP 大模型套件支持的 4D 并行数据、Sharding、张量、流水线并行扩展到多卡。相比单卡训练主要区别是传入多张显卡编号从llm/目录执行# 编译自定义算子可选 cd ../slm/model_zoo/gpt-3/external_ops/ python3 setup.py install cd - # 多卡模型预训练参考 python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 run_pretrain.py ./config/llama/pretrain_argument.json # 多机训练参考: 占用45G显存左右 python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 --master192.168.1.1:8090 --nnodes2 run_pretrain.py ./config/llama/pretrain_argument.json各机型的并行策略与权重支持列表LLaMA、Qwen 系列等模型的 TP/PP/SP/Flash Attention/Selective Recompute 支持矩阵以及 Llama2、Qwen2.5、DeepSeek 等完整权重清单可参见 llm/docs/pretrain.md 的模型预训练支持的分布式能力一览与模型权重支持列表章节。并行度约束在入口源码中也有硬性校验sequence_parallel要求tensor_parallel_degree 1num_attention_heads必须能被sep_parallel_degree整除seq_length必须能被context_parallel_degree整除llm/run_pretrain.py#L441-L448。多机训练若各机器挂载共享硬盘、数据文件位置相同可指定--share_folder true让全局 0 号卡统一制作缓存数据。六、训练结果与检查点结构训练结束后终端输出如下[ INFO] - Saving model checkpoint to ./checkpoints/pretrain_ckpts [ INFO] - tokenizer config file saved in ./checkpoints/pretrain_ckpts/tokenizer_config.json [ INFO] - Special tokens file saved in ./checkpoints/pretrain_ckpts/special_tokens_map.json [ INFO] - added tokens file saved in ./checkpoints/pretrain_ckpts/added_tokens.json [ WARNING] - Asynchronous saving is not supported for single card environment currently. [ INFO] - Configuration saved in ./checkpoints/pretrain_ckpts/config.json [ INFO] - Configuration saved in ./checkpoints/pretrain_ckpts/generation_config.json [ INFO] - ***** train metrics ***** [ INFO] - progress_or_epoch 0.0868 [ INFO] - train_loss 5.4334 [ INFO] - train_runtime 0:35:59.57 [ INFO] - train_samples_per_second 4.6305 [ INFO] - train_steps_per_second 4.6305 [ INFO] - ***** Running Prediction ***** [ INFO] - Num examples 258 [ INFO] - Total prediction steps 129 [ INFO] - Pre device batch size 2 [ INFO] - Total Batch size 2 [ INFO] - ***** test metrics ***** [ INFO] - test_loss 4.8691 [ INFO] - test_runtime 0:00:12.72 [ INFO] - test_samples_per_second 20.2781 [ INFO] - test_steps_per_second 10.1391 Effective Tokens per second: 4741.68 ips: 4741.68 tokens/strain_loss从 12 附近降到 5.43、test_loss4.87说明模型在 100k 语料上确实在学习语言分布Effective Tokens per second: 4741.68即上节公式算出的集群有效吞吐。模型参数已保存到checkpoints/pretrain_ckpts/目录用ls -l checkpoints/pretrain_ckpts/浏览各文件作用如下表分类代表文件作用模型结构config.json定义模型维度、层数等超参数模型权重model-*.safetensors index 文件保存 Transformer 模型的参数分词器vocab.json、merges.txt、tokenizer_config.json定义 tokenizer 行为和词表特殊 token 信息added_tokens.json、special_tokens_map.json管理新增或特殊 token训练状态trainer_state.json、training_args.bin记录训练进度和参数评估结果all_results.json、train_results.json保存训练评估指标结果TensorBoardruns/可视化训练曲线检查点checkpoint-*/每save_steps步保存的快照这些产物的保存行为可在源码中印证trainer.train()结束后依次调用trainer.save_model()、trainer.log_metrics(train, ...)、trainer.save_metrics(...)、trainer.save_state()llm/run_pretrain.py#L575-L585若输出目录已存在历史检查点且未指定--overwrite_output_dir入口会自动检测到get_last_checkpoint并从断点恢复训练llm/run_pretrain.py#L392-L405。七、上手清单与延伸按照本文完成一次完整的预训练闭环可以按以下顺序执行安装 develop 版 PaddlePaddle 克隆 PaddleNLP 仓库下载官方 100k OpenWebText 数据到llm/data/或用 llm/tools/preprocess 制作自有语料trans_to_json.py→create_pretraining_data.py→merge.py;在llm/目录执行python -u run_pretrain.py config/qwen/pretrain_argument_0p5b.json确认 loss 从 12 附近开始下降显存不足时按顺序尝试recompute: true→ 更大显存卡 → 关闭/开启use_flash_attention视硬件→paddle.distributed.launch多卡 4D 并行训练完成后检查checkpoints/pretrain_ckpts/下的权重、词表与指标文件后续可衔接 llm/docs/finetune_tutorial.md 的 SFT 微调流程。值得注意的工程细节run_pretrain.py顶部设置了os.environ[USE_CASUAL_MASK] True以支持 sharding stage1 overlap 优化llm/run_pretrain.py#L50-L51对Qwen2Moe/DeepseekV2/DeepseekV3架构在数据并行度大于 1 时会强制打开专家并行use_expert_parallelllm/run_pretrain.py#L491-L496。这些实现细节表明该入口并非简单的单层训练脚本而是统一承载了 PaddleNLP 大模型预训练的并行策略入口这也是它能以一个配置文件 一条命令的形式覆盖从 0.5B 单卡到千亿级多机训练的原因。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 大模型预训练实战指南从数据准备到分布式训练PaddleNLP 大模型预训练实战指南从数据准备到分布式训练 PaddleNLP 大模型套件为 LLaMA v1/v2、GPT 3、BaiChuan、Qwe人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPDiffSynth-Studio 模型训练完全指南从数据集准备到低显存训练实战DiffSynth Studio 模型训练完全指南从数据集准备到低显存训练实战 DiffSynth Studio 为 Diffusion 模型提供了一套完整的人工智能大模型媒体生成深度学习预训练微调YOLOv3训练实战指南从数据准备到模型优化YOLOv3训练实战指南从数据准备到模型优化 本文详细介绍了YOLOv3目标检测模型的完整训练流程涵盖数据集准备与标注格式要求、训练参数配置与超参数调优、损人工智能计算机视觉深度学习预训练上一篇TestNG与JUnit对比分析为什么现代Java项目选择TestNG下一篇深入理解 Prometheus Operator基于 Kubernetes 的 Prometheus 监控栈原生管理与 CRD 体系入门创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考