大数跨境

GLM大模型家族与ChatGLM3-6B微调入门——国产大模型的崛起之路

GLM大模型家族与ChatGLM3-6B微调入门——国产大模型的崛起之路 知识代码AI
2026-10-28
3
导读:GLM大模型家族与ChatGLM3-6B微调入门——国产大模型的崛起之路从GLM-130B到ChatGLM3-

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
基座模型
1300亿参数,中英双语,ICLR 2023发表
ChatGLM
对话模型
基于GLM-130B,注入代码预训练,人类意图对齐
ChatGLM2-6B
第二代对话
1.4T token训练,FlashAttention,MQA,性能大幅提升
ChatGLM3-6B
第三代对话
全新设计,工具调用,Agent能力,全面超越前代
VisualGLM-6B
多模态对话
7.8B参数,支持图像+中英文对话
CogVLM-17B
多模态预训练
17B参数,视觉专家模块,10项跨模态基准SOTA
CodeGeeX2
代码生成
基于ChatGLM2,600B代码预训练,6B超15B
WebGLM
搜索增强
100亿参数,网络增强问答,KDD 2023
AgentLM
智能体
支持工具调用等智能体能力

二、GLM预训练原理解读

自回归空白填充(Autoregressive Blank Infilling)

GLM的核心创新在于提出了基于自回归空白填充的通用语言模型。它结合了BERT(双向编码)、GPT(自回归解码)和T5(编码器-解码器)三类架构的优势。[pdf_7]

工作原理:

  1. 输入文本 [x1, x2, x3, x4, x5, x6]
  2. 随机采样两个跨度(spans):[x3] 和 [x5, x6]
  3. Part A:用 [MASK] 标记替换采样跨度 → [x1, x2, [M], x4, [M]]
  4. Part B:对跨度进行洗牌,每个跨度前加 [START],输出时附加 [END]
  5. 二维位置编码:表示跨度间和跨度内的位置关系
  6. 自注意力掩码:Part A 可互相注意但不能关注 Part B;Part B 可关注 Part A 和 B 中前文[pdf_7]

多任务预训练策略:

目标
采样方式
覆盖比例
适用任务
原始目标(短跨度 λ=3)
—
—
自然语言理解(NLU)
文档级
从均匀分布采样
原始标记的 50%~100%
长文本生成
句子级
严格保证完整句子
原始标记的 15%
seq2seq 任务

GLM在SuperGLUE上的表现(dev集 Average):

模型
平均分
BERT Large
72.0
UniLM Large
74.1
GLM Large
77.0
T5 Large
81.2
RoBERTa Large
81.5
GLM RoBERTa 82.9
 → 超越BERT和T5

三、GLM-130B:开源双语千亿大模型(ICLR 2023)

GLM-130B是一个拥有1300亿参数的中英双语预训练语言模型,在多个方面超越了GPT-3(175B)。[pdf_7]

与其他100B级大模型对比

模型
开源
架构
主要语言
量化支持
最低GPU需求
GPT-3 175B
✗
GPT
英文
—
—
OPT-175B
✓
GPT / Pre-LN
英文
INT8
8×3090
BLOOM-176B
✓
GPT / Pre-LN
多语言
INT8
8×3090
PaLM 540B
✗
GPT / Pre-LN
英文
—
—
GLM-130B ✓ GLM(Blank Infilling + MIP)/ DeepNorm 中英双语 INT4 4×3090 或 8×1080 Ti

GLM-130B 量化优势

GLM-130B成功实现了INT4权重量化,这是首个在100B级模型上实现INT4量化的案例。量化后几乎无性能下降: [pdf_7]

基准
GLM-130B FP16
INT8
INT4
GPT-3 FP16
MMLU (acc ↑)
44.75
44.71
44.80
43.9
LAMBADA (acc ↑)
80.21
80.21
79.47
76.2
Pile (BPB ↓)
0.634
0.638
0.641
0.74

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]

模型
GSM8K
MATH
BBH
MMLU
C-Eval
CMMLU
MBPP
AGIEval
ChatGLM2-6B-Base
32.4
6.5
33.7
47.9
51.7
50.0
—
—
Best Baseline
52.1
13.1
45.0
60.1
63.5
62.2
47.5
45.8
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]

模型
平均
Summary
Single-Doc QA
Multi-Doc
Code
Few-shot
Synthe
ChatGLM2-6B-32K
41.5
24.8
37.6
34.7
52.8
51.3
47.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]


总结

  1. GLM家族已经构建了从基座模型到多模态、代码、搜索、智能体的完整生态
  2. GLM-130B是首个成功实现INT4量化的100B级模型,4×RTX 3090即可部署
  3. ChatGLM3-6B在8个数据集上全面超越ChatGLM2-6B,GSM8K提升达123%
  4. QLoRA微调ChatGLM3-6B的完整流程:数据准备 → 加载量化模型 → PEFT预处理 → 配置LoRA → 训练 → 保存与推理
  5. 通过NF4 + 双重量化,6GB显存即可启动微调,大幅降低入门门槛

★

下节预告:实战私有数据微调ChatGLM3——使用ChatGPT自动生成训练数据,通过QLoRA小样本微调ChatGLM3,解决真实业务场景问题!


本文内容整理自《AI大模型微调实战营》第八节课程,由彭靖田老师(Google Developer Expert)主讲。


【声明】内容源于网络
0
0
知识代码AI
技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
内容 427
粉丝 0
知识代码AI 技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
总阅读9.3k
粉丝0
内容427