GLM大模型家族与ChatGLM3-6B微调入门——国产大模型的崛起之路
从GLM-130B到ChatGLM3-6B,智谱AI的GLM大模型家族已经成为国产开源大模型的中坚力量。今天我们就来全面了解GLM家族的发展历程,并手把手带你实战QLoRA微调ChatGLM3-6B!
一、GLM大模型家族全景
智谱AI与清华大学KEG实验室联合研发的GLM(General Language Model)大模型家族,已经构建了一个涵盖基座模型、对话模型、多模态模型、代码模型、搜索增强模型的完整生态。[pdf_7]
智谱AI模型开源时间线
智谱AI在过去几年中开源了多个重要模型,形成了一个完整的开源生态:
-
ChatGLM-6B(2023年3月14日):初代开源中英双语对话模型,1000万+下载,GitHub 5w+ Stars -
VisualGLM-6B(2023年5月):图生文多模态对话模型 -
ChatGLM2-6B / ChatGLM2-6B-32K(2023年6月):第二代对话模型,长文本能力升级 -
WebGLM(2023年6月):搜索增强模型 -
LongBench(2023年8月):长文本理解能力评测数据集 -
CodeGeeX2(2023年8月):多语言代码生成模型 -
AgentLM / AgentBench(2023年9月):AI智能体模型与评测基准 -
CogVLM-17B(2023年10月):多模态预训练模型 -
ChatGLM3-6B / ChatGLM3-6B-32K(2023年10月):第三代对话模型,大幅性能提升[pdf_7]
GLM家族核心成员
|
|
|
|
|---|---|---|
| GLM-130B |
|
|
| ChatGLM |
|
|
| ChatGLM2-6B |
|
|
| ChatGLM3-6B |
|
|
| VisualGLM-6B |
|
|
| CogVLM-17B |
|
|
| CodeGeeX2 |
|
|
| WebGLM |
|
|
| AgentLM |
|
|
二、GLM预训练原理解读
自回归空白填充(Autoregressive Blank Infilling)
GLM的核心创新在于提出了基于自回归空白填充的通用语言模型。它结合了BERT(双向编码)、GPT(自回归解码)和T5(编码器-解码器)三类架构的优势。[pdf_7]
工作原理:
-
输入文本 [x1, x2, x3, x4, x5, x6] -
随机采样两个跨度(spans):[x3] 和 [x5, x6] -
Part A:用 [MASK] 标记替换采样跨度 → [x1, x2, [M], x4, [M]] -
Part B:对跨度进行洗牌,每个跨度前加 [START],输出时附加 [END] -
二维位置编码:表示跨度间和跨度内的位置关系 -
自注意力掩码:Part A 可互相注意但不能关注 Part B;Part B 可关注 Part A 和 B 中前文[pdf_7]
多任务预训练策略:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GLM在SuperGLUE上的表现(dev集 Average):
|
|
|
|---|---|
|
|
|
|
|
|
|
|
77.0 |
|
|
|
|
|
|
| GLM RoBERTa | 82.9
|
三、GLM-130B:开源双语千亿大模型(ICLR 2023)
GLM-130B是一个拥有1300亿参数的中英双语预训练语言模型,在多个方面超越了GPT-3(175B)。[pdf_7]
与其他100B级大模型对比
|
|
|
|
|
|
|
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| GLM-130B | ✓ | GLM(Blank Infilling + MIP)/ DeepNorm | 中英双语 | INT4 | 4×3090 或 8×1080 Ti |
GLM-130B 量化优势
GLM-130B成功实现了INT4权重量化,这是首个在100B级模型上实现INT4量化的案例。量化后几乎无性能下降: [pdf_7]
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
44.80 |
|
|
|
|
|
79.47 |
|
|
|
|
|
0.641 |
|
INT4量化后,仅需 4×RTX 3090(24G) 即可高效推理,甚至可以部署在 8×RTX 2080 Ti(11G) 上![pdf_7]
四、从ChatGLM到ChatGLM3:三代演进
初代ChatGLM-6B
基于GLM架构,62亿参数,经过约1T标识符的中英双语训练,结合监督微调、人类反馈强化学习(RLHF)等技术。INT4量化下最低只需6GB显存即可运行。[pdf_7]
ChatGLM2-6B:大幅升级
第二代在保留初代优势的基础上,引入了四大核心升级:[pdf_7]
-
更强大的性能:MMLU +23%,CEval +33%,GSM8K +571%,BBH +60% -
更长的上下文:基于FlashAttention,上下文长度从2K扩展到32K -
更高效的推理:基于Multi-Query Attention,推理速度提升42% -
更开放的协议:允许免费商业使用
ChatGLM3-6B:全面超越
第三代在ChatGLM2的基础上进行了全面升级,在8个中英文典型数据集上表现卓越:[pdf_7]
|
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ChatGLM3-6B-Base | 72.3 | 25.7 | 66.1 | 61.4 | 69.0 | 67.5 | 52.4 | 53.7 |
ChatGLM3-6B-Base全面超越ChatGLM2-6B-Base和所有同规模最优模型![pdf_7]
ChatGLM3-6B-32K:长文本能力
在LongBench长文本评测中,ChatGLM3-6B-32K相比ChatGLM2-6B-32K也取得了显著提升:[pdf_7]
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
| ChatGLM3-6B-32K | 50.2 | 26.6 | 45.8 | 46.1 | 56.2 | 61.2 | 65.0 |
长文本场景下,ChatGLM3-6B-32K相比二代模型**平均提升约50%**,在论文阅读、文档摘要和财报分析中尤为显著。[pdf_7]
五、ChatGLM3-6B 核心能力一览
对话能力
ChatGLM3-6B在对话、问答、文案生成、代码生成等任务上表现优异,支持中英双语的流畅对话。[pdf_7]
工具调用(Tool)与代码解释器(Code Interpreter)
ChatGLM3-6B支持工具模式(Tool) 和代码解释器(Code Interpreter),能够调用外部工具获取信息,例如查询天气等。[pdf_7]
多模态能力
VisualGLM-6B(7.8B参数)支持图像理解与对话,可根据图片描述场景、识别导演等信息。[pdf_7]
CogVLM-17B作为更强大的多模态预训练模型,引入视觉专家模块,在10项经典跨模态基准上达到SOTA,超越PaLI-X 55B。[pdf_7]
六、实战:QLoRA微调ChatGLM3-6B
本节课程的核心实战环节,通过QLoRA技术对ChatGLM3-6B进行高效微调。
教程说明
本教程使用QLoRA论文中介绍的量化技术:NF4数据类型、双重量化和混合精度计算,在ChatGLM3-6B模型上实现QLoRA微调。[pdf_7]
6.1 数据准备
以ADGEN(广告生成)数据集为例,任务为根据输入(content)生成一段广告词(summary):
内容:类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳
输出:这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点...
ADGEN数据集规模:
-
训练集:114,599 条 -
验证集:1,070 条[pdf_7]
6.2 加载ChatGLM3-6B量化模型
from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig
import torch
# 配置4-bit量化
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# 加载量化模型
model = AutoModel.from_pretrained(
"THUDM/chatglm3-6b",
quantization_config=quantization_config,
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
6.3 PEFT量化模型预处理
from peft import prepare_model_for_kbit_training
# 将所有非int8模块转换为fp32
# 为输入嵌入层添加forward_hook
# 启用梯度检查点
model = prepare_model_for_kbit_training(model)
6.4 QLoRA适配器配置
ChatGLM3-6B的LoRA target_modules 为 ["query_key_value"]:[pdf_7]
from peft import LoraConfig, get_peft_model
# ChatGLM3-6B的LoRA目标模块
target_modules = ["query_key_value"]
lora_config = LoraConfig(
r=8, # LoRA秩
lora_alpha=32, # 缩放因子
target_modules=target_modules,# 目标模块
lora_dropout=0.05, # Dropout率
bias="none", # 不使用bias
task_type="CAUSAL_LM" # 因果语言模型
)
qlora_model = get_peft_model(model, lora_config)
6.5 训练超参数配置
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir=f"models/chatglm3-6b-qlora",
per_device_train_batch_size=16, # 每个设备的训练批量大小
gradient_accumulation_steps=4, # 梯度累积步数
learning_rate=1e-3, # 学习率
num_train_epochs=1, # 训练轮数
lr_scheduler_type="linear", # 学习率调度器类型
warmup_ratio=0.1, # 预热比例
logging_steps=10, # 日志记录步数
save_strategy="steps", # 模型保存策略
save_steps=100, # 模型保存步数
optim="adamw_torch", # 优化器类型
fp16=True, # 混合精度训练
)
6.6 开启训练
trainer = Trainer(
model=qlora_model,
args=training_args,
train_dataset=tokenized_dataset,
data_collator=data_collator
)
trainer.train()
6.7 保存模型与推理
# 保存模型
trainer.model.save_pretrained("qlora-chatglm3-6b-adapter")
# 推理:加载基础模型 + QLoRA适配器
from peft import PeftModel
base_model = AutoModel.from_pretrained(
"THUDM/chatglm3-6b",
trust_remote_code=True,
device_map="auto"
)
qlora_model = PeftModel.from_pretrained(base_model, "qlora-chatglm3-6b-adapter")
# 微调前后对比
response_before = base_model.chat(tokenizer, "你的测试问题")
response_after = qlora_model.chat(tokenizer, "你的测试问题")
七、训练总步数计算
当使用 num_train_epochs 时,训练总步数计算方式如下:[pdf_7]
每个epoch的训练步数:steps/epoch = num_train_examples / (batch_size * gradient_accumulation_steps)
训练总步数:total_steps = steps/epoch * num_train_epochs
以ADGEN数据集为例:
-
训练样本数:114,599 -
batch_size:16 -
gradient_accumulation_steps:4 -
num_train_epochs:1 -
总步数 = 114,599 / (16 × 4) = 约1,791步
八、Homework推荐
课后作业:根据硬件资源情况,在AdvertiseGen数据集上使用QLoRA微调ChatGLM3-6B至少10K样例,观察Loss变化情况,并对比微调前后模型输出结果。[pdf_7]
总结
-
GLM家族已经构建了从基座模型到多模态、代码、搜索、智能体的完整生态 -
GLM-130B是首个成功实现INT4量化的100B级模型,4×RTX 3090即可部署 -
ChatGLM3-6B在8个数据集上全面超越ChatGLM2-6B,GSM8K提升达123% -
QLoRA微调ChatGLM3-6B的完整流程:数据准备 → 加载量化模型 → PEFT预处理 → 配置LoRA → 训练 → 保存与推理 -
通过NF4 + 双重量化,6GB显存即可启动微调,大幅降低入门门槛
★下节预告:实战私有数据微调ChatGLM3——使用ChatGPT自动生成训练数据,通过QLoRA小样本微调ChatGLM3,解决真实业务场景问题!
本文内容整理自《AI大模型微调实战营》第八节课程,由彭靖田老师(Google Developer Expert)主讲。

