LLMs之InternLM-20B:源码解读(train.py文件)—初始化配置→数据预处理(txt/json/jsonl等需转换为bin/meta文件再入模)→模型训练(批处理加载+内存分析+支持在

132 篇文章 158 订阅 ¥39.90 ¥99.00
557 篇文章 426 订阅
15 篇文章 2 订阅
本文档详细解读了InternLM-20B模型训练脚本`train.py`,涵盖了从配置初始化、数据预处理到模型训练与评估的全过程。包括参数设置、模型计算量估算、数据加载、模型和损失函数初始化、优化器与学习率调度、日志记录、内存分析、分布式训练等关键步骤。
摘要由CSDN通过智能技术生成

LLMs之InternLM-20B:源码解读(train.py文件)—初始化配置→数据预处理(txt/json/jsonl等需转换为bin/meta文件再入模)→模型训练(批处理加载+内存分析+支持在特定步数进行验证评估+TensorBoard可视化监控+支持分布式训练【多机多卡训练同步更新】)+模型评估(ACC+PPL)+性能监控(日志记录+性能分析+内存监控等)

目录

源码解读(train.py文件)

# Step1、解析命令行参数

# Step2、初始化分布式环境

# Step3、初始化异常监控

# Step4、函数中调用main函数开始训练过程

# 1、初始化配置

# 1.1、初始化训练参数:从配置文件中读取一些训练过程中的参数,如跳过的批次数、总训练步数、验证频率、标签平滑等设置。# 控制每训练valid_every步后在验证集上进行评估,指定多少个训练步骤后进行一次验证

# 1.2、估计模型计算量

# 1.3、获取并广播当前时间

# 1.4、初始化日志器

# 2、数据预处理

# 2.1、初始化训练和验证数据加载器:读取不同输入文件格式(txt/json/jsonl)转为bin文件再处理bin文件和meta文件为训练集

# 3、模型训练与评估

# 3.0、读取模型配置文件:从指定的配置文件中读取配置信息。

# 3.1、初始化模型:调用initialize_model函数初始化神经网络模型

# 3.2、初始化损失函数:调用FlashGPTLMLoss类初始化损失函数,其中可能包括一些并行计算。

# 3.3、初始化优化器、学习率调度器等并恢复训练状态:创建一个TrainState对象,用于存储训练状态,然后初始化优化器、学习率调度器等,同时尝试从之前的训练中恢复状态。

# 3.4、初始化其它相关配置

# (1)、初始化自定义日志写入器

# (2)、初始化度量指标

# (3)、初始化SchedulerMetricHook调度器钩子:可以根据metric调整学习率等超参数

# (4)、初始化训练器:根据训练指标自动调整学习率等超参数

# (5)、初始化内存分析工具:如果启用了内存分析,将会初始化一个内存分析工具。

# (6)、初始化批次跳过器:创建一个BatchSkipper对象,用于跳过一些批次的训练。

# 3.5、执行模型训练:批处理加载+内存分析+支持在特定步数进行验证评估+TensorBoard可视化监控+支持分布式训练【多机多卡训练同步更新】

# (1)、将训练数据加载器 train_dl 转换为一个迭代器对象 train_iter,用于逐批次地遍历训练数据。

# (2)、with语句初始化性能分析工具:执行下面的训练循环,并在循环结束后完成性能分析

# (3)、开始训练循环:进入一个训练循环,不断迭代数据批次进行模型训练。每个批次的训练包括前向传播、反向传播、参数更新、性能指标记录、验证等多个步骤。

# (4)、利用empty_cache_and_diag函数清理GPU内存或进行一些诊断操作,根据参数 interval 控制操作的频率。

# (5)、从训练数据加载器 train_dl 中获取一个新的数据批次

# (6)、记录训练过程中已经消耗的样本数量

# (7)、判断是否应该跳过当前批次的训练:在满足一些条件的情况下跳过当前批次的训练,实现一些特定的训练策略或逻辑

# (8)、将模型参数的梯度清零,以准备进行反向传播。在每个训练批次开始前,通常需要清零梯度,因为梯度是在反向传播中累积的。

# (9)、处理数据:如果当前批次数据中包含名为 "type_ids" 的字段,通常用于处理多输入模型,其中 "type_ids" 可能用于区分不同类型的输入数据,例如文本和图像

# (10)、执行正向和反向传播:对当前模块启动记录计时器,并执行训练器的计划(schedule)来进行前向传播和反向传播,计算损失(loss)等。

# (11)、更新模型参数,会返回成功更新的状态和梯度范数信息;如果参数更新失败会增加一次无效记录并且发送一条警告消息

# (12)、计算和记录训练中的各种指标,如损失、准确度、梯度范数等。

# (13)、定期进行验证:在训练过程中,定期在验证数据集上评估模型的性能损失Loss+准确率ACC+困惑度PPL

# (14)、定期保存训练状态:以便在需要时恢复训练

# (15)、如果启用了内存分析器,用于跟踪记录模型训练过程中的内存使用情况

# 3.6、在训练结束后,等待异步上传操作完成,确保保存的训练状态已经完全上传或保存

实战代码


源代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个处女座的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值