PaddleNLP 中的 ChatGLM2-6B模型架构、源码实现与全流程微调配置指南【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP导读本文基于 PaddleNLP 仓库中的 ChatGLM2 配置说明系统介绍 ChatGLM2-6B 中英双语对话模型在 PaddleNLP 中的落地方式包括其 FlashAttention、Multi-Query Attention 等核心特性仓库内的权重支持清单与使用协议以及覆盖 SFT、LoRA、P-Tuning、DPO、KTO、GPTQ、PTQ 等完整训练与量化场景的配置文件解读。读完本文你将能够基于仓库现成的配置模板直接上手 ChatGLM2-6B 的微调、对齐与量化实践。1. 模型介绍ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本在保留初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上引入了两项关键技术特性FlashAttention一种 IO 感知的高效注意力实现通过分块计算与核融合显著降低显存占用并加速长序列训练与推理Multi-Query AttentionMQA在注意力计算中让所有头共享同一组 Key 与 Value在保持模型能力的同时大幅减少 KV Cache 的显存开销从而降低推理部署门槛。1.1 仓库中的实现形态在 PaddleNLP 中ChatGLM2-6B 的完整实现位于 paddlenlp/transformers/chatglm_v2/ 目录由以下文件组成文件职责configuration.py定义ChatGLMv2Config配置类及预训练权重资源映射modeling.py核心模型实现导出ChatGLMv2Model、ChatGLMv2PretrainedModel、ChatGLMv2ForCausalLM三个类modeling_pp.py流水线并行Pipeline Parallel版本实现tokenizer.pyChatGLM2 专用分词器chatglm-legacy-checkpoints-convert.py旧版 ChatGLM checkpoint 转换脚本LICENSE模型权重使用协议从源码结构看modeling.py 中实现了RotaryEmbedding旋转位置编码模块支持rope_ratio与original_impl开关并通过parallel_matmul见 modeling.py适配张量并行环境当tensor_parallel_degree 1且参数为分布式张量时自动先做_c_identity输入广播、再按tensor_parallel_output决定是否执行_c_concat汇总从而无缝对接 PaddlePaddle Fleet 的混合并行通信组。模型顶层入口为ChatGLMv2ForCausalLMmodeling.py继承自ChatGLMv2PretrainedModel并实现了prepare_inputs_for_generationmodeling.py说明该实现完整支持 PaddleNLP 自回归生成接口可直接用于推理与评估场景。1.2 支持模型权重本仓库支持的模型权重如下ModelTHUDM/chatglm2-6bTHUDM/chatglm3-6b即除了第二代 ChatGLM2-6B 之外第三代 ChatGLM3-6B 的权重同样可以通过该配置目录下的训练入口加载使用。2. 模型协议ChatGLM2-6B 模型的权重使用需要遵循其开源许可协议该协议文件随仓库一起维护位于 paddlenlp/transformers/chatglm_v2/LICENSE。在使用、分发或商用该模型权重前请务必完整阅读并遵守协议条款。3. 数据准备与通用训练入口3.1 训练入口脚本ChatGLM2 系列在 PaddleNLP 中通过统一的 LLM 训练入口运行核心脚本包括llm/run_finetune.pySFT / LoRA / Prefix Tuning / DPO / KTO 等微调与对齐任务llm/run_quantization.pyGPTQ / PTQ 量化任务llm/run_pretrain.py预训练任务配置文件统一存放在 llm/config/chatglm2/ 目录下针对每种训练范式提供开箱即用的 JSON 参数模板。3.2 数据集格式SFT、LoRA、Prefix Tuning 等有监督微调任务使用统一的dataset_name_or_path指向本地数据目录./data目录内数据需为 PaddleNLP 统一微调格式每行一条 JSON 的对话样本。DPO / KTO 等对齐任务则通过train_dataset_path与dev_dataset_path分别指定./data/train.jsonl与./data/dev.jsonl。4. 全场景配置文件详解4.1 SFT 全量微调sft_argument.jsonllm/config/chatglm2/sft_argument.json 提供了全量参数微调的标准配置参数值说明model_name_or_pathTHUDM/chatglm2-6b模型权重名或本地路径dataset_name_or_path./data训练数据目录output_dir./checkpoints/sft_ckpts模型保存目录per_device_train_batch_size4单卡训练 batch sizegradient_accumulation_steps4梯度累积步数per_device_eval_batch_size8单卡评估 batch sizeeval_accumulation_steps16评估梯度累积步数num_train_epochs3训练轮数learning_rate3e-05学习率warmup_steps30预热步数logging_steps1日志打印间隔evaluation_strategyepoch每轮评估一次save_strategyepoch每轮保存一次src_length1024输入序列长度max_length2048最大序列长度fp16true开启混合精度fp16_opt_levelO2AMP 优化级别do_train/do_evaltrue开启训练与评估load_best_model_at_endtrue结束时加载最优模型metric_for_best_modelaccuracy最优模型选取指标recomputetrue开启重计算以省显存save_total_limit1最多保留 1 个 checkpointsharding_parallel_degree8Sharding 并行卡数shardingstage1Sharding 策略等级zero_paddingfalse是否启用 zero paddingunified_checkpointtrue使用统一 checkpoint 格式use_flash_attentionfalse是否使用 FlashAttention典型启动命令python -m paddle.distributed.launch \ --gpus 0,1,2,3,4,5,6,7 \ run_finetune.py ./config/chatglm2/sft_argument.json其中sharding: stage1配合sharding_parallel_degree: 8在 8 卡环境下将优化器状态切分到 8 张卡是 ChatGLM2-6B约 12GB 参数低成本全量微调的推荐组合recompute: true通过以时间换空间的方式进一步降低激活显存。4.2 LoRA 低秩微调lora_argument.jsonllm/config/chatglm2/lora_argument.json 在 SFT 配置基础上仅需增加一行lora: true同时将学习率调高到3e-04低秩适配器通常需要更大的学习率并显式声明tensor_parallel_degree: 1、pipeline_parallel_degree: 1。LoRA 只训练注入的低秩矩阵可训练参数量远小于全量参数显存占用更低适合单卡或小规模集群环境快速适配领域数据。4.3 P-Tuning v2 前缀微调pt_argument.jsonllm/config/chatglm2/pt_argument.json 通过prefix_tuning: true启用前缀微调P-Tuning v2。其学习率配置为3e-02远高于 SFT 与 LoRA这是因为前缀向量属于新增参数需要更大的学习步长才能快速收敛。该方案仅训练注入的少量前缀 token 向量参数效率与 LoRA 相当。4.4 DPO 人类偏好对齐dpo_argument.json / dpo_lora_argument.json对齐阶段使用 llm/config/chatglm2/dpo_argument.json 进行全量 DPO 训练关键差异参数包括参数全量 DPOLoRA DPO说明train_dataset_path./data/train.jsonl同左含 chosen/rejected 对的数据max_seq_len40964096最长序列max_prompt_len20482048最长提示长度bf16truetruebf16 混合精度max_steps100100最大训练步数learning_rate1e-061e-05学习率beta0.10.1DPO 温度系数loss_typesigmoid—损失函数类型sft_loss_ratio0.1—混合 SFT 损失比例shardingstage2stage1Sharding 等级use_flash_attentiontruetrue长序列下建议开启recompute_granularityfullfull全量重计算lora/lora_rank—true / 64LoRA 秩rslora_plus—trueRS-LoRA 变体LoRA DPO 版本dpo_lora_argument.json在训练入口中同样通过lora: true生效并额外支持lora_rank: 64与rslora_plus: true高阶选项适合在偏好数据有限时以低资源完成对齐。4.5 KTO 对齐kto_argument.jsonKTOKahneman-Tversky Optimization是一种不需要成对偏好数据的对齐算法。llm/config/chatglm2/kto_argument.json 提供其默认配置learning_rate: 2e-06、beta: 0.1并采用tensor_parallel_degree: 8的张量并行与sharding: stage1组合展示了大模型多卡训练中张量并行 Sharding 混合并行的用法。4.6 GPTQ 量化gptq_argument.jsonllm/config/chatglm2/gptq_argument.json 面向推理压缩场景核心开关为do_gptq: true, gptq_step: 8GPTQ 通过少量校准数据对权重进行逐层量化误差补偿gptq_step控制量化校准的步数。该配置同时开启fp16: true与fp16_opt_level: O2输出目录为./checkpoints/gptq_ckpts配合unified_checkpoint: true以统一格式保存量化后模型后续可直接加载推理。4.7 PTQ 静态量化ptq_argument.jsonllm/config/chatglm2/ptq_argument.json 提供后训练静态量化PTQ配置入口为run_quantization.py核心参数参数值说明do_ptqtrue开启 PTQptq_step16校准步数smoothtrue开启 SmoothQuant 平滑smooth_step16平滑校准步数smooth_all_linearstrue平滑所有线性层smooth_piecewise_searchtrue分段搜索平滑参数smooth_k_piece3分段数量smooth_search_piecetrue搜索最优分段注意其model_name_or_path指向./checkpoints/sft_ckpts即典型的先 SFT 微调、再 PTQ 量化流水线量化对象是上一步微调产出的模型而非直接量化基座权重。5. 总结通过 docs/en/llm/config/chatglm2/README.md 与 llm/config/chatglm2/ 目录的完整配置集PaddleNLP 为 ChatGLM2-6B 提供了从 SFT、LoRA、Prefix Tuning 到 DPO、KTO 对齐再到 GPTQ、PTQ 量化的全生命周期支持配合 paddlenlp/transformers/chatglm_v2/ 中基于 PaddlePaddle Fleet 的并行实现开发者可以在多卡环境中直接套用上述模板完成训练、对齐与压缩部署。使用前请务必遵守 LICENSE 中的权重使用条款。【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
