文章目录
- 前言
- 一、完整源码呈现
- 二、训练step训练源码解读
-
- 1、step内循环开始
- 2、_load_rng_state状态载入
- 3、跳过当前epoch的已迭代step
- 4、累计梯度状态记录(self.control)
- 5、模型训练(self.training_step(model, inputs))
- 6、loss的nan与inf处理(tr_loss)
- 7、参数计算self.floating_point_ops计算
- 8、is_last_step_and_steps_less_than_grad_acc获得
- 9、梯度clip、optimizer.step()、lr_scheduler.step()、权重保存结构逻辑
- 10、梯度clip(来源9)
- 11、self.optimizer.step()与lr_scheduler.step()的更新(来源9)
- 12、state参数、self.control(on_step_end)更新与权重保存(self._maybe_log_save_evaluate)
- 13、step停止迭代
- 三、模型训练(self.training_step)
-
- 1、step循环调用源码
- 2、training_step完整结构源码说明
- 3、数据格式转换(training_step)
- 4、训练模式选择(training_step)
- 5、self.compute_loss输出内容(条件:选择compute_loss_context_manager模式训练)
- 6、loss的mean处理(条件:选择compute_loss_context_manager模式训练)
- 7、反向传播backword(条件:选择compute_loss_context_manager模式训练)
- 8、training_step函数return结果(条件:选择compute_loss_context_manager模式训练)
- 四、self.compute_loss(model, inputs)源码解读(training_step)
- 总结
前言
在huggingface中,有关trainer内容实在太多了,想完整给出trainer相关内容需要多篇文章来阐明。我想了想,我将布局6篇文章来构建有关内容。第一篇文章介绍TrainingArguments与trainner参数;第二篇文章给出一个完整Demo,并介绍trainner(train与_inner_training_loop)源码的整体结构,呈现一个整体框架;第三篇文章介绍(_inner_training_loop)给出数据构造、优化器构建方法源码解读;第四篇篇文章介绍(_inner_training_loop)中epoch外循环训练相关源码解读;第五篇文章介绍(_inner_training_loop)中step内循环训练相关源码解读;第六篇文章介绍Resume方法内容,包含继承数据、继承优化器、继承模型等实现完整断点续训功能。 而本篇为第五篇文章,主要解读huggingface的trainer的_inner_training_loop的step内循环训练相关源码内容。