拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PyTorch Lightning 1.5 升级到 2.0 常规用户迁移指南:Trainer 与回调 API 变更全解析

人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】pytorch-lightningPretrain, finetune ANY AI model of ANY size on 1 or 10,000 GPUs with zero code changes.项目地址https://gitcode.com/gh_mirrors/py/pytorch-lightning点击查看免费下载导读本文以官方升级文档 v1.5 常规用户Regular User迁移清单为主体系统梳理 PyTorch Lightning 从 1.5 升级到 2.0 过程中普通用户必须面对的 8 项 API 变更覆盖Trainer.fit/validate数据加载参数、DDP 插件参数收敛、EarlyStopping与ModelCheckpoint回调签名、以及reload_dataloaders_every_epoch、distributed_backend等 Trainer 标志位的替换。读完本文你将掌握每条变更的旧写法、新写法与背后的设计意图并能对照当前仓库源码定位这些 API 在 2.x 中的实际实现从而无痛完成升级迁移。升级背景与文档组织方式PyTorch Lightning 的 1.5 系列属于 2.0 大版本前的过渡版本。官方升级文档 docs/source-pytorch/upgrade/from_1_5.rst 将用户按使用深度分为三档常规用户Regular User、高级用户Advanced User与开发者Developer。其中常规用户章节通过include指令引入sections/1_5_regular.rst等逐版本文件形成一张旧用法 → 新用法 → 参考 PR的迁移对照表。本文聚焦的 sections/1_5_regular.rst 正是 1.5 版本对应的那张表覆盖了绝大多数日常训练代码在升级时最容易踩坑的 API 变化。注意升级文档是按版本递进的1.5、1.6、1.7、1.8、1.9 各有独立章节分别见 sections/1_6_regular.rst、sections/1_7_regular.rst 等本文只处理 1.5 段其他版本段的迁移项请一并查阅以避免遗漏。一、迁移对照总表1.5 → 2.0 常规用户下表完整继承自原文档左侧为你在 1.5 中的旧写法右侧为 2.0 中的标准写法Ref 列为对应的 GitHub PR 编号这些 PR 的合并记录可直接在 src/lightning/pytorch/CHANGELOG.md 中检索到。旧写法1.5新写法2.0Ref使用trainer.fit(train_dataloaders...)改用trainer.fit(dataloaders...)PR7431使用trainer.validate(val_dataloaders...)改用trainer.validate(dataloaders...)PR7431向DDPPlugin/DDPSpawnPlugin传入num_nodes删除该参数节点数改由Trainer统一传入PR7026向DDPPlugin/DDPSpawnPlugin传入sync_batchnorm删除该参数改由Trainer统一传入PR7026使用EarlyStopping时不提供monitor参数、依赖默认值必须显式传入monitor现为必填参数PR7907在ModelCheckpoint中使用every_n_val_epochs将参数改名为every_n_epochsPR8383使用 Trainer 标志位reload_dataloaders_every_epoch改用reload_dataloaders_every_n_epochsPR5043使用 Trainer 标志位distributed_backend改用strategyPR8575下面逐条展开说明动机、具体写法与源码依据。二、数据加载参数标准化train_dataloaders/val_dataloaders→dataloaders变更内容升级到 2.0 后trainer.fit()与trainer.validate()等训练入口的数据加载参数被统一为dataloaders旧trainer.fit(train_dataloaderstrain_loader, val_dataloadersval_loader)新trainer.fit(dataloaderstrain_loader)验证集通过dataloaders或datamodule传递旧trainer.validate(val_dataloadersval_loader)新trainer.validate(dataloadersval_loader)该变更源于 PR7431其目的从 CHANGELOG 记录Standardized the dataloaders arguments oftrainer.{fit,validate,test,tune}可印证是消除fit、validate、test、predict等入口之间参数命名不一致的问题统一以dataloaders作为数据加载器的入口名。当前仓库中的实际签名供对照需要特别说明的是在 2.x 后续演进中fit的参数命名又做了细化。以当前仓库 src/lightning/pytorch/trainer/trainer.py 为准fit的签名是def fit( self, model: pl.LightningModule, train_dataloaders: Optional[Union[TRAIN_DATALOADERS, LightningDataModule]] None, val_dataloaders: Optional[EVAL_DATALOADERS] None, datamodule: Optional[LightningDataModule] None, ckpt_path: Optional[_PATH] None, weights_only: Optional[bool] None, ) - None:而validatetrainer.py与test、predict则统一使用dataloaders。同时源码中保留了将LightningDataModule作为第二位置参数传入的兼容逻辑trainer.py 中if isinstance(train_dataloaders, LightningDataModule): datamodule train_dataloaders并在同时传入datamodule与train_dataloaders/val_dataloaders时抛出MisconfigurationException提示二者不可混用。迁移要点升级时不要机械地把旧代码里的train_dataloaders一字不改地照搬。应以目标版本的官方签名即你实际安装的 Lightning 版本Trainer.fit的帮助文档为准核心原则是——训练集、验证集数据入口名与datamodule保持互斥且命名一致。三、DDP 插件参数收敛num_nodes与sync_batchnorm移交给 Trainer变更内容在 1.5 中使用DDPPlugin/DDPSpawnPlugin时可以这样配置from pytorch_lightning.plugins import DDPPlugin plugin DDPPlugin(num_nodes4, sync_batchnormTrue) trainer Trainer(strategyplugin, num_nodes4)升级后PR7026num_nodes从插件上移除一律通过Trainer(num_nodes...)传入sync_batchnorm从插件上移除一律通过Trainer(sync_batchnorm...)传入。设计意图这是一次典型的职责上移重构分布式训练的环境参数节点数与模型同步策略同步 BatchNorm本质上是训练过程级配置而不是某个具体插件Strategy私有的能力。把它们统一收敛到Trainer之后无论你后续切换到 DDP、FSDP 还是 DeepSpeed 策略这些配置都从同一入口生效插件本身保持纯策略实现的单一职责。迁移要点1.5 中同时出现在Trainer和插件里的重复参数删除插件侧写法即可Trainer 侧写法保持不变。四、EarlyStopping的monitor参数改为必填变更内容1.5 及更早版本中EarlyStopping允许不传monitor而依赖默认值。升级后PR7907monitor变为必填位置参数# 旧依赖默认值1.5 及以前 early_stop EarlyStopping(patience3) # 新必须显式指定监控指标2.0 early_stop EarlyStopping(monitorval_loss, patience3, modemin)源码佐证从当前仓库 src/lightning/pytorch/callbacks/early_stopping.py 可见构造函数签名中monitor: str已是无默认值的必填参数def __init__( self, monitor: str, # 必填监控指标名 min_delta: float 0.0, patience: int 3, ... )monitor在整个早停流程中贯穿始终state_dict的生成依赖self.monitor与self.modeearly_stopping.py检查指标时从日志中取出logs.get(self.monitor)early_stopping.py若指标缺失会抛出明确异常提示Early stopping conditioned on metric ... which is not available。因此迁移时除了补上monitor还应确认该指标确实在验证日志中记录通常由self.log(val_loss, ...)产生否则早停回调会在运行时报错。相关行为可在 tests/tests_pytorch/callbacks/test_early_stopping.py 中找到大量用例佐证。五、ModelCheckpointevery_n_val_epochs更名为every_n_epochs变更内容# 旧1.5 checkpoint_callback ModelCheckpoint(every_n_val_epochs5) # 新2.0 checkpoint_callback ModelCheckpoint(every_n_epochs5)该变更PR8383把每隔多少轮保存检查点的触发语义从验证轮次明确为训练轮次与Trainer的check_val_every_n_epoch等以 epoch 为单位的配置保持一致的命名习惯。源码佐证当前仓库 src/lightning/pytorch/callbacks/model_checkpoint.py 中参数已完全更名为every_n_epochs且与every_n_train_steps、train_time_interval构成互斥的触发条件every_n_epochs: Optional[int] None,内部_init_triggers会对三者做互斥校验model_checkpoint.py同时设置超过 1 个触发条件会抛出MisconfigurationException。此外注意以下几点若every_n_epochs、every_n_train_steps、train_time_interval均未设置默认every_n_epochs 1每轮保存every_n_epochs 0表示禁用按 epoch 触发的 top-k 保存model_checkpoint.py触发判定逻辑为(trainer.current_epoch 1) % self._every_n_epochs 0model_checkpoint.py。迁移要点1.5 中写了every_n_val_epochs...的地方直接全局改名即可若同时设置了check_val_every_n_epoch注意二者取值的整除关系官方文档建议使every_n_epochs与check_val_every_n_epoch互相整除以保证保存时机可预期。六、reload_dataloaders_every_epoch→reload_dataloaders_every_n_epochs变更内容# 旧1.5 trainer Trainer(reload_dataloaders_every_epochTrue) # 新2.0正整数表示每 N 轮重载一次0 表示关闭默认 trainer Trainer(reload_dataloaders_every_n_epochs1)该变更PR5043将原来是否每轮重载的布尔开关升级为每 N 轮重载一次的整数参数为每隔 N 轮刷新一次 DataLoader提供原生支持。CHANGELOG 中明确记录了ChangedTrainerarg and functionality fromreload_dataloaders_every_epochtoreload_dataloaders_every_n_epochs并在后续版本移除了旧参数Removed deprecatedreload_dataloaders_every_epochfromTrainerin favour ofreload_dataloaders_every_n_epochs。源码佐证当前仓库 src/lightning/pytorch/trainer/trainer.py 中该参数签名为reload_dataloaders_every_n_epochs: int 0,其值在 src/lightning/pytorch/trainer/connectors/data_connector.py 中做类型校验必须是int且 0否则抛出异常。实际的每 N 轮重载调度发生在训练循环与评估循环中——fit_loop.py与evaluation_loop.py都会读取self.trainer.reload_dataloaders_every_n_epochs记录重载轮次如 src/lightning/pytorch/loops/fit_loop.py。另外需注意一个实践坑data_connector.py中有一条针对persistent_workersTrue、pin_memoryTrue且reload_dataloaders_every_n_epochs 0组合的告警提示该组合可能因 PyTorch DataLoader 的限制导致不稳定data_connector.py。迁移要点旧的True对应新值1旧的False对应新值0默认值不重载。七、distributed_backend→strategy变更内容# 旧1.5 trainer Trainer(distributed_backendddp) # 新2.0 trainer Trainer(strategyddp)该变更PR8575将 Trainer 的分布式后端标志位统一改名为strategy并在 2.0 中彻底移除distributed_backend。strategy既支持字符串别名如ddp、fsdp、deepspeed、ddp_spawn等也支持直接传入自定义 Strategy 实例。源码佐证当前仓库 src/lightning/pytorch/trainer/trainer.py 中strategy: Union[str, Strategy] auto,默认值为auto由 Trainer 根据加速器与运行环境自动推导合适的分布式策略strategy参数随后被传入连接器统一解析并实例化trainer.py。各内置策略的实现集中在 src/lightning/pytorch/strategies/ 目录如ddp.py、fsdp.py、deepspeed.py等字符串别名到策略类的映射关系可参见策略注册表相关代码。迁移要点搜索代码中的distributed_backend并全部替换为strategy同时建议利用strategy可接受实例的特性将第三节中提到的插件级配置迁移到Trainer 传入strategy实例 全局参数的模式。八、升级后的自查清单完成上述 8 项修改后建议按以下清单做一次回归检查数据入口全仓搜索train_dataloaders、val_dataloaders在fit/validate/test/predict中的使用确认与目标版本的官方签名一致且不与datamodule同时传入DDP 插件确认DDPPlugin/DDPSpawnPlugin的num_nodes、sync_batchnorm已删除统一由Trainer配置EarlyStopping确认每个EarlyStopping(...)都传入了monitor且监控指标确实存在于日志中ModelCheckpoint确认every_n_val_epochs已全部改名且未与every_n_train_steps、train_time_interval同时设置重载 DataLoader确认布尔值已转为整数True→1False→0分布式策略确认distributed_backend已全部替换为strategy。升级过程中如遇其他版本的 API 变化1.61.9 段可继续查阅 docs/source-pytorch/upgrade/from_1_5.rst 中的相应章节各变更的完整历史记录可在 src/lightning/pytorch/CHANGELOG.md 中按 PR 编号检索。若你的代码从更早版本如 1.4 及以前迁移则可参考 docs/source-pytorch/upgrade/from_1_4.rst 的对应迁移章节。小结1.5 → 2.0 的升级对常规用户而言核心是API 收敛数据入口统一命名、分布式相关配置上收至Trainer、回调必填参数显式化、布尔开关演进为更灵活的整数/枚举参数。本文给出的 8 项对照表与源码佐证可以帮助你在升级时做到改一处、验一处把迁移风险降到最低。赞分享人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】pytorch-lightningPretrain, finetune ANY AI model of ANY size on 1 or 10,000 GPUs with zero code changes.项目地址https://gitcode.com/gh_mirrors/py/pytorch-lightning点击查看免费下载相关推荐PyTorch Lightning 1.5 到 2.0 升级完整指南从 Trainer 参数重构到 Strategy 架构迁移PyTorch Lightning 1.5 到 2.0 升级完整指南从 Trainer 参数重构到 Strategy 架构迁移 本文基于 from_1_5.r人工智能深度学习机器学习预训练分布式训练微调PyTorch Lightning 1.6 高级用户 API 迁移指南从 Trainer 参数到回调与策略的全面重构PyTorch Lightning 1.6 高级用户 API 迁移指南从 Trainer 参数到回调与策略的全面重构 本文基于 docs/source pyt人工智能深度学习机器学习预训练分布式训练微调PyTorch Lightning 1.8 升级 2.0 迁移指南Regular User 篇API 变更与替换方案全解析PyTorch Lightning 1.8 升级 2.0 迁移指南Regular User 篇API 变更与替换方案全解析 本文基于 PyTorch Li人工智能深度学习机器学习预训练分布式训练微调创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门