LLMs之ChatGLM2:ChatGLM-Finetuning之源码解读(train.py文件)—解析命令行(模型路径+数据集相关【最大序列长度/最大输入长度】+训练参数相关【批次大小/学习率/权重衰减系数/训练轮数/梯度累计步数/学习率预热比例】+
导读:本代码文件实现了加载数据、定义预训练模型,根据不同的训练类型进行微调,使用DeepSpeed来进行分布式高效训练(利用deepspeed封装数据并行,以及通过step()和backward()实现优化器步进与反向传播),并定期打印训练过程中的损失和保存模型。当前代码中不包含模型评估部分,可以自定义测试样本进行规则打分自行评估。
目录
解析命令→加载数据→模型训练(四种方式微调+DeepSpeed封装数据并行)+模型保存(定期输出loss)
# DataSet:训练集的路径、训练数据中允许的最大序列长度、输入的最大长度、是否跳过一些样本?
# deepspeed features:DeepSpeed配置文件的路径
# P-tuning:前缀序列的长度,,P-tuning会先输入这个长度的前缀来初始化隐状态,是否要应用前缀投影,是否对前缀序列进行投影得到固定长度的Embedding
# 1.2.2、从指定的JSON文件中加载DeepSpeed配置参数(ZeRO2或ZeRO3)并添加其它参数:如批量大小、微批次大小(PP并行技术需要)、梯度积累步数
# 1.2.3、初始化主日志写入器(判断只有主进程才写入):只有在全局排名小于等于0的进程(通常是主进程)上才会创建TensorBoard的日志写入器
# 3.1、加载模型:根据训练类型(lora、freeze、ptuning、all)加载相应的模型
# 3.2、载入优化器和学习率调度器,设置相关参数,最后封装到deepspeed的optimizer和scheduler中
# 3.5、初始化DeepSpeed:将模型和优化器包装到deepspeed中
# 3.6、开始执行模型训练,包括循环迭代训练数据,计算损失,反向传播,梯度裁剪,更新模型参数等。
# 3.6.2、循环迭代训练数据,遍历dataloader,输入到模型,计算loss,执行反向传播
# 3.6.3、梯度裁剪:防止梯度爆炸,用于稳定深度学习模型训练的技巧
# 3.6.4、定期显示训练损失并保存模型:使用deepspeed的step进行优化器步进
LLMs之ChatGLM2:ChatGLM-Finetuning之源码解读(train.py文件)—解析命令行(模型路径+数据集相关【最大序列长度/最大输入长度】+训练参数相关【批次大小/学习率/权重衰减系数/训练轮数/梯度累计步数/学习率预热比例】+结果输出相关【输出路径/训练方式【四种方式微调,如Freeze/Lora/P-Tuning/全量参数】/进程标志/loss频率/保存模型频率】+否启用梯度检查点+DeepSpeed配置+LoRA/Freeze/P-tuning配置)及初始化设置(是否启用分