第十三章:huggingface的resume训练源码内容
文章目录
- 前言
- 一、Resume训练源码解读(Trainer->train方法)
- 1、resume_from_checkpoint设定
- 2、resume_from_checkpoint获得文件夹路径
- 3、条件判断加载权重(resume_from_checkpoint is not None and not is_sagemaker_mp_enabled() and not self.is_deepspeed_enabled)
- 4、inner_training_loop继续传入resume_from_checkpoint文件路径
- 二、Resume训练源码解读(_inner_training_loop)
- 1、条件判断加载权重(is_sagemaker_mp_enabled() and resume_from_checkpoint is not None)
- 2、条件判断加载权重(resume_from_checkpoint is not None and self.is_deepspeed_enabled)
- 3、optimizer_and_scheduler载入
- 4、状态载入与更新(trainer_state.json)
- 1、ignore_data_skip决定当前epoch继续迭代
- 2、trainer_state.json内容
- 5、self.model、self.optimizer、self.lr_scheduler、train_dataloader更新
- 6、跳过resume的epoch
- 7、随机状态加载与step
- 1、满足steps_trained_in_current_epoch == 0条件加载随机状态参数rng_state.pth
- 2、当前迭代数据处理与rng_to_sync设置
- 3、满足rng_to_sync条件加载随机状态参数rng_state.pth
- 8、总结
- 三、self._load_from_checkpoint(resume_from_checkpoint)源码解读
- 1、参数
- 2、获取模型相关配置文件路径
- 3、config加载更新
- 1、config = PretrainedConfig.from_json_file(config_file)
- 4、权重文件加载
- 1、不同条件权重载入
- 2、os.path.isfile(weights_file) or os.path.isfile(safe_weights_file)条件载入权重
- 3、is_peft_available() and isinstance(model, PeftModel)条件载入权重-LoRA
- 4、else条件载入权重
- 四、self._load_optimizer_and_scheduler源码解读
- 1、self._load_optimizer_and_scheduler源码调用
- 2、checkpoint is None与self.is_deepspeed_enabled判断
- 3、optimizer.pt文件存在判断
- 4、optimizer.pt、scheduler.pt与scaler.pt重载结构
- 5、小节概括
- 六、self._load_rng_state(resume_from_checkpoint)源码解读
- 1、self._load_rng_state完整源码
- 2、self._load_rng_state源码解读
- 总结
前言
大模型基本使用huggingface来实现。对于不太理解其内容基本按照官网教程或相关博客等来实现。想进一步激发开源大模型在行业领域提升性能是棘手问题。该问题会涉及开源代码二次开发进行实验测试。基于此,本教程不同文字或理论介绍内容,而从源码解读其训练逻辑、权重保存、高效微调方法(LoRA)、断点续训方法、模型推理权重处理等方法。本教程所有内容完全依托huggingface源码与相关Demo验证来解读,助力大模型使用。
本篇文章基于上篇文章Demo解读相关resume源码内容,特别是权重等相关内容加载。
一、Resume训练源码解读(Trainer->train方法)
依然使用trainer.train函数内容
,但我这次直解读与resume相关内容,其它在前面文章已有解读。
1、resume_from_checkpoint设定
仍然进入train函数,可知不给参数resume_from_checkpoint是默认为None,或给参数resume_from_checkpoint=False
则通过下面转成None。
其代码如下:
def train(
self,
resume_from_chec