GLM-4-9B Chat模型微调实战指南
前言
本文将详细介绍如何对GLM-4-9B-Chat对话模型进行微调,帮助开发者快速掌握这一强大语言模型的定制化方法。作为一款开源对话模型,GLM-4-9B在多种场景下展现出卓越的性能,而通过微调,我们可以使其更好地适应特定领域的任务需求。
硬件环境准备
在进行模型微调前,确保您的硬件环境满足以下要求:
测试环境配置:
- 操作系统:Ubuntu 22.04
- 内存:512GB
- Python版本:3.10.12或3.12.3(注意:使用3.12.3时需要源码安装nltk)
- CUDA版本:12.3
- GPU驱动:535.104.05
- GPU配置:NVIDIA A100-SXM4-80GB × 8
不同微调方案的资源需求对比:
| 微调方法 | 显存占用 | 权重保存大小 | |---------------|----------|------------| | LORA (PEFT) | 约21.5GB | 17MB | | P-Tuning v2 | 约21.4GB | 121MB | | SFT (Zero3) | 约80.9GB | 20GB |
环境配置步骤
- 安装基础依赖包
- 确保已获取最新版本的模型仓库
- 安装微调专用依赖项:
pip install -r requirements.txt
注意:NLTK 3.8.1可能不完全兼容Python 3.12,需要特殊处理。
数据格式规范
微调数据需要遵循特定的JSON格式,以下是关键要点:
基础对话格式
{
"messages": [
{"role": "user", "content": "用户输入内容"},
{"role": "assistant", "content": "助手回复内容"}
]
}
带工具调用的复杂对话
{
"messages": [
{"role": "system", "content": "", "tools": [...]},
{"role": "user", "content": "用户请求"},
{"role": "assistant", "content": "工具调用"},
{"role": "observation", "content": "工具返回结果"},
{"role": "assistant", "content": "最终回复"}
]
}
重要规则:
system
角色必须出现在user
之前,且每个对话只出现一次tools
字段必须伴随system
角色出现- 工具调用时
system
的content
必须为空
配置文件详解
配置文件位于config
目录,包含三种主要类型:
- DeepSpeed配置:
ds_zero_2/3.json
- 微调方法配置:
lora.yaml
ptuning_v2.yaml
sft.yaml
关键参数说明:
- 数据配置:
train_file
/val_file
/test_file
:数据集路径num_proc
:数据加载进程数
- 训练参数:
output_dir
:输出目录max_steps
:最大训练步数per_device_train_batch_size
:每GPU批次大小
- LORA专用参数:
r
:LoRA秩lora_alpha
:缩放因子lora_dropout
:Dropout概率
- P-TuningV2参数:
num_virtual_tokens
:虚拟token数量
微调执行指南
多GPU训练(推荐)
OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=8 finetune_hf.py data/AdvertiseGen/ THUDM/glm-4-9b configs/lora.yaml
单GPU训练
python finetune.py data/AdvertiseGen/ THUDM/glm-4-9b-chat configs/lora.yaml
断点续训
python finetune.py data/AdvertiseGen/ THUDM/glm-4-9b-chat configs/lora.yaml yes # 自动从最新检查点恢复
python finetune.py data/AdvertiseGen/ THUDM/glm-4-9b-chat configs/lora.yaml 600 # 从指定检查点恢复
微调模型的使用
快速测试
python inference.py your_finetune_path
集成到其他项目
- 替换模型加载方式为:
from peft import AutoPeftModelForCausalLM
if (model_dir / 'adapter_config.json').exists():
model = AutoPeftModelForCausalLM.from_pretrained(model_dir, ...)
else:
model = AutoModelForCausalLM.from_pretrained(model_dir, ...)
-
注意检查
adapter_config.json
中的base_model_name_or_path
路径是否正确 -
其他调用方式保持不变
注意事项
- 长文本微调(如128K tokens)需要更高配置的硬件
- 工具调用微调需要确保数据格式完全正确
- 不同微调方法对最终模型性能有显著影响,建议根据任务特点选择
通过本指南,您应该能够顺利完成GLM-4-9B-Chat模型的微调工作,使其更好地服务于您的特定应用场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考