LLMs之Chinese-LLaMA-Alpaca-2:源码解读(run_clm_sft_with_peft.py文件)—模型训练前置工作(参数解析+配置日志)→模型初始化(检测是否存在训练过的che

本文详细解读了`run_clm_sft_with_peft.py`文件,涵盖模型训练的前期工作,如参数解析、日志配置,模型初始化,数据预处理,模型优化(量化、LoRA、CheckPointing等)。同时,介绍了训练过程中的模型加载、数据收集器创建、指令数据集加载,以及训练和评估过程,包括模型的自动保存和性能评估(PPL指标)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LLMs之Chinese-LLaMA-Alpaca-2:源码解读(run_clm_sft_with_peft.py文件)—模型训练前置工作(参数解析+配置日志)→模型初始化(检测是否存在训练过的checkpoint+加载预训练模型和tokenizer)→数据预处理(监督式任务的数据收集器+指令数据集【json格式】)→优化模型配置(模型量化+匹配模型vocabulary大小与tokenizer+初始化PEFT模型【LoRA】+CheckPointing等)→模型训练(继续训练+评估指标+自动保存中间训练结果)/模型评估(+PPL指标)

目录

源码解读(run_clm_sft_with_peft.py文件)详细步骤

# 1、模型训练前置工作:参数解析+配置日志

# 1.1、参数解析(基于HfArgumentParser库)三个主要参数类

# 1.1.1、if判断,根据命令行参数的不同,可以选择从命令行或JSON配置文件中获取参数

# 1.1.2、根据训练参数检查是否将llama_attn需要替换为flash_attn注意力机制,检查training_args中的flash_attn参数是否设置,

# 1.1.3、向某个监控或记录系统发送一条遥测数据(更好地分配资源来维护它们),包括模型参数配置和数据处理参数配置。

# 1.2、配置日志:包括日志格式和级别。通过日志了解训练过程,观察问题和进度

# 1.2.1、配置训练日志的样式格式和输出行为

# 1.2.2、设置不同库和模块的日志级别和格式

# 1.2.3、输出训练设备和参数的运行概况

# 2、模型初始化

# 2.1、检测是否存在训练过的checkpoint(可恢复并继续训练),确保训练过程的连续性和稳定性,这有助于在训练过程中灵活地管理和恢复模型训练。

# 2.1.1、验证输出目录是否存在、检查是否为训练步骤、是否允许覆盖输出目录

# 2.2、加载预训练模型和tokenizer

# 2.2.1、设置随机数种子,保证实验可重复性

# 2.2.2、配置和初始化模型的config

# 2.2.3、初始化tokenizer

# 3、数据预处理

# 3.1、创建一个监督式学习任务的数据收集器data_collator,用于将样本批量处理成模型可以接受的格式

# 3.2、初始化评估数据集和训练数据集

# 3.3、加载训练/评估的指令数据集(jason格式)

# 3.3.1、if判断执行模型训练:包括构建指令数据集,输出数据集示例

# 3.3.2、if判断执行模型评估:包括构建指令数据集,输出数据集示例

# 4、优化模型配置:否启用量化、设置LoRA参数、是否使用梯度检查点

# 4.1、设置模型量化—支持加载量化模型训练

# 4.1.0、定义torch_dtype:指定张量数据类型的可选参数

# 4.1.1、定义compute_dtype:根据模型training_args参数决定浮点数精度

# 4.1.2、如果启用模型量化:判断是否为4bit或8bit,表示是否要进行4位或8位的位加载

# 4.1.3、if判断来打印量化配置信息

# 4.2、预训练模型初始化,加载模型, 同时匹配模型vocabulary大小与tokenizer,它初始化好模型后, 就可以进行下游任务如微调训练等过程了

# 4.1.0用于将设备名称映射到整数值,在模型初始化时,将使用device_map来指定模型运行的设备。

# 4.2.1、先从预训练模型加载模型,指定了许多参数,包括模型名称或路径、配置、缓存目录、数据类型、梯度检查点配置、量化配置等。这将创建一个适用于因果语言建模任务的模型。

# 4.2.2、是否采用量化

# 4.2.3、配置模型的缓存使用方式:

# 4.2.4、处理模型vocabulary大小与tokenizer匹配问题

# 4.3、初始化PEFT模型:为后续微调训练提供了已初始化的PEFT模型

# 4.3.1、if判断,如果提供了peft_path,则从预训练模型加载已经训练好的PEFT模型,否则从配置文件中根据一系列参数初始化一个新的模型

# 4.4、判断是否启动CheckPointing技术

# 4.5、循环模型所有模块,根据一系列条件和模块名称来调整模型的配置,包括数据类型和梯度要求

# 4.6、调整模型参数状态以满足后续特定需求:目的是向后兼容训练得到的模型,保留模型原始结构

# 5、模型训练和评估: 周期性保存checkpoint,输出结果和模型参数

# 5.1、配置训练器Trainer并添加回调函数来定期自动保存中间训练

# 5.1.1、初始化Trainer对象进行模型训练,会自动完成迭代、优化等训练流程

# 5.1.2、添加回调函数SavePeftModelCallback实现定期自动保存中间训练

# 5.2、if判断执行模型【训练】任务:支持加载checkpoint继续训练。

# 5.2.1、判断从哪个checkpoint点恢复训练(继续训练的方式):根据以下情况选择恢复训练的检查点

# 5.2.2、调用trainer.train()方法来开始或继续训练模型,并传递了检查点信息

# 5.2.3、训练结果中获取训练指标metrics(如loss等),并记录这些指标

# 5.2.4、记录训练样本的数量

# 5.2.5、保存metrics、模型参数和模型状态,以便可以恢复训练

# 5.3、if判断执行模型【评估】任务:

# 5.3.1、调用trainer.evaluate()方法评估模型

# 5.3.2、记录eval中的评估样本的数量

# 5.3.3、metrics内新增PPL指标,它通常用于衡量语言模型的性能。Perplexity越低,表示模型的性能越好。

# 5.3.4、实时记录评估指标、样本数量等信息

实战代码


源码解读(run_clm_sft_with_peft.py文件)详细步骤

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值