news 2026/9/25 17:28:37

PaddleNLP 中的 ChatGLM-6B:模型解析、微调与量化配置实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PaddleNLP 中的 ChatGLM-6B:模型解析、微调与量化配置实战指南
  • 人工智能
  • 大模型
  • 预训练
  • 微调
  • LoRA
  • RLHF
  • 强化学习
  • 分布式训练

【免费下载链接】PaddleNLP

Easy-to-use and powerful LLM and SLM library with awesome model zoo.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleNLP
点击查看免费下载

导读

ChatGLM-6B 是智谱 AI 开源的 62 亿参数中英双语对话模型,基于 General Language Model(GLM)架构构建。本文以 docs/zh/llm/config/chatglm/README.md 为骨架,结合 PaddleNLP 仓库中 ChatGLM 的模型实现(paddlenlp/transformers/chatglm/)与完整的训练/量化配置文件(llm/config/chatglm/),深入讲解该模型在 PaddleNLP 中的架构细节、支持的权重版本、协议要求,以及 SFT 全量微调、LoRA 微调、P-Tuning v2(prefix tuning)与 PTQ/GPTQ 量化等完整实战配置。读完本文,你将能够直接基于仓库提供的 JSON 配置跑通 ChatGLM-6B 的微调与量化流程,并理解每个关键参数背后的实现原理。

1. 模型介绍:基于 GLM 架构的 62 亿参数中英双语对话模型

ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构设计,拥有约 62 亿参数。该模型与 ChatGLM 使用相同的核心技术,并针对中文问答和对话场景进行了专门优化。

从训练数据与训练方法来看,ChatGLM-6B 经过约 1T(一万亿)标识符的中英双语语料训练,并辅以以下三种关键技术:

  • 监督微调(SFT):使用人工标注的高质量对话数据进行指令对齐;
  • 反馈自助:通过模型自身生成与筛选来扩充对齐数据;
  • 人类反馈强化学习(RLHF):使用人类偏好反馈进一步优化生成质量。

得益于上述技术加持,仅 62 亿参数的 ChatGLM-6B 已经能够生成相当符合人类偏好的回答。

1.1 支持的模型权重

PaddleNLP 官方支持以下两个 ChatGLM-6B 权重版本(见 docs/zh/llm/config/chatglm/README.md):

Model
THUDM/chatglm-6b
THUDM/chatglm-6b-v1.1

其中THUDM/chatglm-6b-v1.1是对原始chatglm-6b的升级版本,在序列长度、对话质量等维度上有所改进。两个版本的权重下载地址均配置在 paddlenlp/transformers/chatglm/configuration.py 的CHATGLM_PRETRAINED_RESOURCE_FILES_MAP中,PaddleNLP 会自动从 BOS 对象存储下载对应的model_state.pdparams权重文件,无需手动下载。

1.2 模型协议

在使用 ChatGLM-6B 模型权重前,必须遵循其官方发布的 License 条款。该协议的完整文本位于仓库内 paddlenlp/transformers/chatglm/LICENSE,模型权重仅允许在满足该协议约束的前提下用于学术研究与商业使用,请在训练、部署前仔细阅读。

2. 仓库内模型实现:从配置类到建模代码

ChatGLM 的完整实现位于 paddlenlp/transformers/chatglm/,包含四个核心文件:

文件职责
configuration.pyChatGLMConfig配置类,定义模型结构与超参数
modeling.py模型主体:注意力、MLP、堆叠层、因果 LM 等
tokenizer.py基于ice_text.model的分词器及特殊 token 定义
LICENSE模型权重使用协议

2.1 ChatGLMConfig:核心超参数一览

ChatGLMConfig 的默认参数与 ChatGLM-6B 原始架构保持一致,关键配置项如下(以__init__实际默认值为准):

参数默认值含义
vocab_size130528词表大小,即模型可表示的 token 数量
hidden_size4096隐藏层维度
num_hidden_layers28Transformer 编码器层数
num_attention_heads32每层注意力头数
inner_hidden_size16384FFN 中间层维度
max_sequence_length2048最大序列长度
layernorm_epsilon1e-5LayerNorm 的 epsilon
position_encoding_2dTrue是否使用 2D 位置编码(ChatGLM 特有)
quantization_bit0量化位宽,0 表示不量化
pre_seq_len/prefix_projectionNone / FalseP-Tuning v2 前缀长度与前缀投影开关
attention_scaleTrue注意力是否缩放
activation"gelu"FFN 激活函数

此外还有bos_token_id=130004、eos_token_id=130005、pad_token_id=3、mask_token_id=130000、gmask_token_id=130001等特殊 token id。同时该类定义了attribute_map = {"num_layers": "num_hidden_layers"},方便与 HuggingFace 权重进行参数名对齐加载。

2.2 模型结构:2D 位置编码与 P-Tuning v2 前缀编码器

modeling.py 完整实现了 GLM 架构的各个组件:

  • RotaryEmbeddings:旋转位置编码模块,实现 2D 位置编码(position_encoding_2d=True时同时编码 token 位置与块内位置),这也是 ChatGLM 区别于常规 GPT 风格模型的关键特征;
  • ChatGLMAttention:标准多头自注意力,要求hidden_size必须能被num_attention_heads整除;
  • ChatGLMBlock/ChatGLMMLP:Transformer 层与 GELU 激活的 FFN;
  • ChatGLMStack/ChatGLMModel/ChatGLMForCausalLM:堆叠层、基础模型与因果语言模型头;
  • PrefixEncoder:P-Tuning v2 的前缀编码器,支持两种模式——无投影时直接使用nn.Embedding生成[batch, prefix_len, 2*num_layers*hidden_size]的 past key/value;开启prefix_projection时先经过两层 MLP(Linear + Tanh + Linear)编码前缀。这一实现正是 llm/config/chatglm/pt_argument.json 中 prefix tuning 配置的底层支撑。

2.3 分词器与特殊 token

tokenizer.py 定义了ChatGLMTokenizer,其max_model_input_sizes对THUDM/chatglm-6b与THUDM/chatglm-6b-v1.1均设置为 2048。特殊 token 包括:

  • eos_token:"<eop>"(end of prompt)
  • mask_token:"[MASK]"
  • gmask_token:"[gMASK]"(前缀掩码标记,ChatGLM 使用[gMASK]+<sop>拼接输入)
  • pad_token:"<pad>"

3. 实战一:全量监督微调(SFT)

PaddleNLP 为 ChatGLM-6B 提供了开箱即用的 SFT 训练配置:llm/config/chatglm/sft_argument.json,使用llm/run_finetune.py入口即可启动。

3.1 SFT 配置逐项解析

{ "model_name_or_path": "THUDM/chatglm-6b", "dataset_name_or_path": "./data", "output_dir": "./checkpoints/sft_ckpts", "per_device_train_batch_size": 4, "gradient_accumulation_steps": 4, "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": 1024, "max_length": 2048, "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": 4, "pipeline_parallel_degree": 1, "zero_padding": false, "unified_checkpoint": true, "use_flash_attention": false }

关键参数说明:

  • model_name_or_path:模型权重名或本地路径,这里使用仓库支持的THUDM/chatglm-6b,可替换为THUDM/chatglm-6b-v1.1;
  • dataset_name_or_path/output_dir:训练数据目录与 checkpoint 输出目录;
  • per_device_train_batch_size=4与gradient_accumulation_steps=4:单卡 batch 4、梯度累积 4 步,等效全局 batch 为 16(多卡时再乘以卡数);
  • src_length=1024/max_length=2048:输入源文本最大长度与拼接后的最大序列长度,需不大于模型的max_sequence_length(2048);
  • fp16: true+fp16_opt_level: "O2":启用混合精度训练并采用 O2 优化级别,可在 24GB 显存级别单卡(配合并行与重计算)完成训练;
  • recompute: true:开启激活重计算以显著降低显存占用;
  • tensor_parallel_degree=4/pipeline_parallel_degree=1:4 路张量并行、1 路流水线并行,即采用 TP=4 的分片策略,把 6B 模型参数切分到 4 张卡上;
  • unified_checkpoint: true:启用统一混合并行 checkpoint 机制(对应 paddlenlp/trl/sft_config.py 中的unified_checkpoint参数),便于 TP/PP/DP 混合并行下的权重保存与加载;
  • use_flash_attention: false:默认关闭 FlashAttention,如硬件支持可开启以加速注意力计算并进一步降低显存;
  • eval_with_do_generation: false:评估时直接计算 loss(accuracy 指标),不进行自回归生成,以提升评估速度;
  • metric_for_best_model: "accuracy":配合load_best_model_at_end在每轮评估后保存最优模型。

3.2 启动命令

python -m paddle.distributed.launch llm/run_finetune.py llm/config/chatglm/sft_argument.json

4. 实战二:LoRA 参数高效微调

LoRA 仅训练低秩增量矩阵,参数量与显存开销远小于全量微调,非常适合单卡场景。llm/config/chatglm/lora_argument.json 提供了现成配置,与 SFT 配置的差异主要体现在:

  • learning_rate从3e-05提高到3e-04(LoRA 常用更大的学习率);
  • tensor_parallel_degree从 4 降为 1,单卡即可运行;
  • 新增"lora": true,在 llm/run_finetune.py 中会据此调用LoRAModel包装原模型,仅训练注入的 LoRA 参数(LoRA 实现位于 paddlenlp/peft/lora/)。

其余训练超参数(batch、epochs、序列长度、fp16、recompute、unified_checkpoint 等)与 SFT 一致。启动命令:

python -m paddle.distributed.launch llm/run_finetune.py llm/config/chatglm/lora_argument.json

训练完成后,可通过llm/tools/merge_lora_params.py将 LoRA 权重合并回原模型,得到可直接部署的完整模型。

5. 实战三:P-Tuning v2 前缀微调

llm/config/chatglm/pt_argument.json 提供了 ChatGLM-6B 的 P-Tuning v2(prefix tuning)配置:

{ "model_name_or_path": "THUDM/chatglm-6b", "dataset_name_or_path": "./data", "output_dir": "./checkpoints/pt_ckpts", "per_device_train_batch_size": 4, "gradient_accumulation_steps": 4, "per_device_eval_batch_size": 8, "eval_accumulation_steps": 16, "num_train_epochs": 3, "learning_rate": 3e-02, "warmup_steps": 30, "logging_steps": 1, "evaluation_strategy": "epoch", "save_strategy": "epoch", "src_length": 1024, "max_length": 2048, "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, "prefix_tuning": true, "zero_padding": false, "use_flash_attention": false }

与 LoRA 配置的差异点:

  • learning_rate进一步提高到3e-02(前缀参数是随机初始化的新参数,需要较大学习率快速收敛);
  • 新增"prefix_tuning": true,在 llm/run_finetune.py 中会调用get_prefix_tuning_params(model)提取模型的注意力头数、隐藏层数、hidden_size 等维度,构造PrefixConfig后用PrefixModelForCausalLM包装模型。其底层正是 2.2 节介绍的PrefixEncoder,支持prefix_projection两层 MLP 编码方案。

注意:源码中已注明 prefix tuning 目前不支持流水线并行(pipeline_parallel_degree需保持为 1),这也是该配置中 TP/PP 均为 1 的原因。

6. 实战四:PTQ 与 GPTQ 量化

PaddleNLP 通过 llm/run_quantization.py 提供量化能力,仓库为 ChatGLM-6B 准备了两种后训练量化配置。

6.1 PTQ 静态量化(ptq_argument.json)

{ "model_name_or_path": "THUDM/chatglm-6b", "per_device_train_batch_size": 8, "per_device_eval_batch_size": 8, "eval_accumulation_steps": 16, "src_length": 1024, "max_length": 2048, "fp16": true, "fp16_opt_level": "O2", "dataset_name_or_path": "./data", "output_dir": "./checkpoints/ptq_ckpts", "do_eval": true, "eval_with_do_generation": false, "do_ptq": true, "unified_checkpoint": true, "ptq_step": 16 }

PTQ 通过在校准数据上统计激活值的量化范围(ptq_step=16表示使用 16 个校准 step)来完成静态量化,do_ptq: true触发该流程。

6.2 GPTQ 量化(gptq_argument.json)

{ "model_name_or_path": "THUDM/chatglm-6b", "per_device_train_batch_size": 8, "per_device_eval_batch_size": 8, "eval_accumulation_steps": 16, "src_length": 1024, "max_length": 2048, "fp16": true, "fp16_opt_level": "O2", "dataset_name_or_path": "./data", "output_dir": "./checkpoints/gptq_ckpts", "do_eval": true, "eval_with_do_generation": false, "do_gptq": true, "unified_checkpoint": true, "gptq_step": 8 }

GPTQ 是逐层基于 Hessian 信息进行权重量化的后训练量化方法,gptq_step=8表示使用 8 个校准 step。模型配置类中的quantization_bit参数(默认 0)则用于控制加载权重时的量化位宽。启动命令统一为:

python llm/run_quantization.py llm/config/chatglm/gptq_argument.json

量化完成后输出的模型可配合 llm/docs/quantization.md 中的部署流程使用,显著降低显存占用与推理延迟。

7. 常用文件索引

用途路径
模型官方文档docs/zh/llm/config/chatglm/README.md
SFT 配置llm/config/chatglm/sft_argument.json
LoRA 配置llm/config/chatglm/lora_argument.json
P-Tuning 配置llm/config/chatglm/pt_argument.json
PTQ 配置llm/config/chatglm/ptq_argument.json
GPTQ 配置llm/config/chatglm/gptq_argument.json
模型配置类paddlenlp/transformers/chatglm/configuration.py
模型实现paddlenlp/transformers/chatglm/modeling.py
分词器paddlenlp/transformers/chatglm/tokenizer.py
权重协议paddlenlp/transformers/chatglm/LICENSE
微调入口llm/run_finetune.py
量化入口llm/run_quantization.py

8. 总结

ChatGLM-6B 是 PaddleNLP 中开箱即用、覆盖完整训练链路的双语对话模型:一方面,仓库在 paddlenlp/transformers/chatglm/ 中完整实现了 GLM 架构(2D 位置编码、P-Tuning v2 前缀编码器、专用分词器等),并支持THUDM/chatglm-6b与THUDM/chatglm-6b-v1.1两个权重版本;另一方面,llm/config/chatglm/ 下的五份 JSON 配置覆盖了 SFT 全量微调、LoRA、P-Tuning v2、PTQ 与 GPTQ 五种主流方案,可直接修改model_name_or_path、dataset_name_or_path、并行度与序列长度等参数后投入实际训练。需要注意的是,模型权重使用须严格遵守仓库内 LICENSE 的协议条款。

  • 人工智能
  • 大模型
  • 预训练
  • 微调
  • LoRA
  • RLHF
  • 强化学习
  • 分布式训练

【免费下载链接】PaddleNLP

Easy-to-use and powerful LLM and SLM library with awesome model zoo.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleNLP
点击查看免费下载

相关推荐

上一篇:Rowboat 技术解读:开源 AI 桌面同事的本地优先记忆、知识图谱与 MCP 扩展实战指南
下一篇:Pydantic AI 与 MCP:从 MCP 客户端到 MCP 服务器的完整接入指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 17:27:16

全球旅游城市SQL数据包:解压导入MySQL与数据校验全攻略

简介&#xff1a;一份覆盖全球旅游城市的 MySQL 数据文件&#xff0c;以可直接运行的 SQL 语句形式呈现&#xff0c;内含 6000 条记录&#xff0c;聚焦餐饮旅游行业。数据维度涵盖城市名称、地理位置、人口数量、著名景点与餐饮业信息&#xff0c;可用于旅游趋势分析、餐饮分布…

作者头像 李华
网站建设 2026/9/25 17:09:12

红外光谱分析技术应用于乳品检测原理及影响因素

1. 红外光谱分析技术应用于乳品检测原理及影响因素1.1 从一杯牛奶说起&#xff1a;为什么红外光谱能“看透”乳品乳品检测这个行当&#xff0c;说复杂也复杂&#xff0c;说简单也简单。复杂在于牛奶是个极其复杂的胶体体系——里面有水、脂肪、蛋白质、乳糖、矿物质&#xff0c…

作者头像 李华