尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PyTorch Lightning 2.0 开发者升级指南:XLAStrategy 与 SingleTPUStrategy 的 `is_distributed` 属性移除

PyTorch Lightning 2.0 开发者升级指南:XLAStrategy 与 SingleTPUStrategy 的 `is_distributed` 属性移除 人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】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 2.0 升级文档中面向**开发者Developer**的两条破坏性变更XLAStrategy.is_distributed与SingleTPUStrategy.is_distributed属性被正式移除。文章以当前仓库的源码与变更记录为据说明两条属性为何被判定为恒真/恒假、移除后应如何判断当前训练环境是否处于分布式状态帮助框架二次开发者与插件作者在升级到 2.0 后无缝迁移。一、升级背景2.0 升级指南的三级文档结构PyTorch Lightning 2.0 的升级指南被拆分为面向不同读者群体的三个入口文件并在总览页 from_2_0.rst 中通过 RST 的include指令统一组织Regular User普通用户引入 2_0_regular.rst涵盖 PyTorch 版本要求、devicesauto行为变化、num_val_batches语义调整等。Advanced User高级用户引入 2_0_advanced.rst涵盖dataloader_iter元组解包、torchdistx移除、Kubeflow 环境显式指定等。Developer开发者即本文档 2_0_devel.rst聚焦策略层Strategy内部 API 的破坏性变更——共两条且都指向is_distributed属性。从文档组织方式可以看出Developer 部分面向的是直接使用或扩展lightning.pytorch.strategies层 API 的开发者而非普通调用Trainer的用户。二、变更速览两条属性移除继承原文表格原文以 If/Then/Ref 表格形式给出两条变更完整内容如下如果If那么Then参考Ref使用了XLAStrategy.is_distributed属性该属性已被移除因为它恒为TruePR #17381使用了SingleTPUStrategy.is_distributed属性该属性已被移除因为它恒为FalsePR #17381两条变更出自同一次重构PR #17381其共同点是这两个属性的返回值在运行时是常量保留它们只会给 API 使用者造成需要查询当前状态的错误预期。仓库变更记录也印证了这一点见 PyTorch CHANGELOGRemoved theXLAStrategy.is_distributedproperty. It is always True Removed theSingleTPUStrategy.is_distributedproperty. It is always False三、为什么XLAStrategy.is_distributed恒为True源码溯源3.1 XLAStrategy 本质上就是多设备分布式策略在 src/lightning/pytorch/strategies/xla.py 中XLAStrategy的定义为class XLAStrategy(DDPStrategy): Strategy for training multiple TPU devices using the :func:torch_xla.distributed.xla_multiprocessing.spawn method.它直接继承自DDPStrategy用于多个 TPU 设备上的训练并通过torch_xla.distributed.xla_multiprocessing.spawn启动多个进程。从源码结构看其setup_distributed()负责设置分布式运行所需的状态xla.py包括对单设备 PjRT 运行时报错——明确说明该策略不支持在单个设备上运行它实现了all_gather、broadcast、reduce、barrier底层调用xm.rendezvous等完整分布式集体通信原语process_dataloader会将 DataLoader 包装为torch_xla.distributed.parallel_loader.MpDeviceLoader按world_size进行数据分发。也就是说只要一个策略是XLAStrategy它就必然运行在多个 TPU 设备、多个进程上is_distributed的返回值没有任何动态性恒为True。3.2 移除后的现状DDP 系属性保留为遗留接口虽然XLAStrategy.is_distributed被移除但基类DDPStrategy上仍然保留了同名属性只是被标记为向后兼容的遗留属性Legacy property见 ddp.pyproperty def is_distributed(self) - bool: # pragma: no-cover Legacy property kept for backwards compatibility. rank_zero_deprecation( f{type(self).__name__}.is_distributed is deprecated. Use is discouraged., stacklevel6 ) return True任何继承自DDPStrategy的策略包括XLAStrategy访问is_distributed都会触发弃用警告并恒返回True。注意在 2.0 中这条属性是从XLAStrategy类上移除的因此直接通过类文档声明已移除而基类上的实现仅作为兼容层存在开发者不应再依赖它。3.3 Trainer 侧的真实判断逻辑如果你需要判断当前 Trainer 是否运行在分布式模式下2.0 的正确入口是Trainer内部的加速器连接器见 accelerator_connector.pyproperty def is_distributed(self) - bool: distributed_strategies [ DDPStrategy, FSDPStrategy, DeepSpeedStrategy, ModelParallelStrategy, XLAStrategy, ] if isinstance(self.strategy, tuple(distributed_strategies)): return True if hasattr(self.strategy, is_distributed): # Used for custom plugins. They should implement this property return self.strategy.is_distributed return False从这段实现可以看出两点关键设计内建分布式策略走白名单XLAStrategy被明确列入distributed_strategies列表与DDPStrategy、FSDPStrategy、DeepSpeedStrategy、ModelParallelStrategy并列因此XLAStrategy恒判定为分布式——这与原文档恒为 True的说明完全一致。自定义策略仍可自行实现is_distributed对于用户自定义插件custom pluginAcceleratorConnector仍会通过hasattr探测并调用策略上的is_distributed属性。也就是说被移除的只是内建 XLA/TPU 策略上的属性扩展机制本身保留。四、为什么SingleTPUStrategy.is_distributed恒为False遗留类剖析4.1 SingleTPUStrategy 是单设备遗留类SingleTPUStrategy位于仓库的遗留代码目录 src/lightning/pytorch/_graveyard/tpu.py 中class SingleTPUStrategy(SingleDeviceXLAStrategy): Legacy class. Use :class:~lightning.pytorch.strategies.single_xla.SingleDeviceXLAStrategy instead. def __init__(self, *args: Any, **kwargs: Any) - None: rank_zero_deprecation(The single_tpu strategy is deprecated. Use single_xla instead.) super().__init__(*args, **kwargs)它继承自SingleDeviceXLAStrategy——单 XLA 设备训练策略实现位于 src/lightning/pytorch/strategies/single_xla.py。类文档与构造器中的rank_zero_deprecation均明确标注这是遗留类请改用SingleDeviceXLAStrategy。4.2 恒为 False的语义来源SingleDeviceXLAStrategy继承自SingleDeviceStrategy其语义就是只有一个设备、单进程、非分布式。因此只要策略是SingleTPUStrategy或SingleDeviceXLAStrategy训练就运行在单一 XLA 设备上不存在进程组、不需要all_gather/broadcast等集体通信对照 accelerator_connector.py 的白名单判断逻辑SingleDeviceXLAStrategy不在distributed_strategies之列且单设备策略基类上也没有is_distributed属性因此AcceleratorConnector.is_distributed恒返回False。这正是原文档判定其恒为 False并移除它的原因——单设备策略的分布式状态在定义上就是确定的无需运行时查询。4.3 迁移TPU 命名 → XLA 命名2.0 中整个 TPU 相关 API 都完成了TPU → XLA的更名迁移SingleTPUStrategy只是其中一环。同一遗留文件中还包含TPUAccelerator、TPUPrecisionPlugin、TPUBf16PrecisionPlugin等遗留类均提示改用XLAAccelerator、XLAPrecision。如果你在升级时遇到SingleTPUStrategy应直接替换为from lightning.pytorch.strategies import SingleDeviceXLAStrategy strategy SingleDeviceXLAStrategy(device0)五、迁移步骤替换is_distributed的三种写法如果你或你维护的自定义策略/回调在 2.0 之前依赖strategy.is_distributed请按下述方式迁移方案一使用 Trainer 内部的官方判断入口推荐与框架一致is_distributed trainer._accelerator_connector.is_distributed这正是 Lightning 自身在批量大小查找器 batch_size_finder.py、学习率/批大小调优器 tuning.py、LightningModule内部指标同步 module.py 以及数据连接器 data_connector.py 中的统一用法。注意该属性以_开头属于内部 API使用时需自行承担版本变动风险。方案二用isinstance显式判断策略类型from lightning.pytorch.strategies import DDPStrategy, FSDPStrategy, DeepSpeedStrategy, XLAStrategy is_distributed isinstance(trainer.strategy, (DDPStrategy, FSDPStrategy, DeepSpeedStrategy, XLAStrategy))此写法与 accelerator_connector.py 内部的白名单逻辑完全对齐且不依赖私有属性。方案三自定义策略中自行实现如果你编写的是自定义分布式策略插件框架仍会通过hasattr(self.strategy, is_distributed)探测你的实现accelerator_connector.py。此时请按你的策略的真实语义返回True/False但不要再继承或访问已移除的XLAStrategy/SingleTPUStrategy属性。六、变更在仓库中的落地与验证PyTorch 侧变更记录src/lightning/pytorch/CHANGELOG.md 记录了本次移除归属 PR #17381Fabric 侧联动变更src/lightning/fabric/CHANGELOG.md 同时记录DDPStrategy.is_distributed被弃用——该策略在定义上就是分布式的与 PyTorch 侧恒为 True的移除理由一致判断逻辑的单一事实来源当前仓库中分布式状态的权威判断收敛到 accelerator_connector.py白名单机制取代了散落在各策略类上的is_distributed属性测试覆盖策略类在 tests_pytorch/strategies 与 tests_fabric/strategies 下均有对应测试目录其中test_xla.py覆盖 XLA 策略的注册与行为升级后可运行相关测试确认迁移无回归。七、小结属性2.0 之前的返回值2.0 的处置迁移建议XLAStrategy.is_distributed恒True已移除使用trainer._accelerator_connector.is_distributed或策略类型isinstance判断SingleTPUStrategy.is_distributed恒False已移除改用SingleDeviceXLAStrategy单设备场景按非分布式处理本次变更的本质是 API 清理将语义上恒定、查询无意义的属性从类接口中删除并把分布式状态的权威判断收拢到 Trainer 的加速器连接器。开发者升级到 2.0 时只需按上文三种方案之一改写对这两个属性的访问即可无需改变训练逻辑本身。赞分享人工智能深度学习机器学习预训练分布式训练微调【免费下载链接】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点击查看免费下载相关推荐解决gitlab-plugin常见问题从配置错误到构建失败的排查指南解决gitlab plugin常见问题从配置错误到构建失败的排查指南 在Jenkins与GitLab集成的过程中gitlab plugin是连接两者的重要桥PyTorch Lightning 应用开发基础指南PyTorch Lightning 应用开发基础指南 前言 PyTorch Lightning 是一个用于简化深度学习研发流程的框架而其应用开发组件则进一步扩人工智能深度学习机器学习预训练分布式训练微调PyTorch Lightning 访问与替换 DataLoader 完全指南Trainer 属性与 CombinedLoader 实战PyTorch Lightning 访问与替换 DataLoader 完全指南Trainer 属性与 CombinedLoader 实战 在 PyTorch人工智能深度学习机器学习预训练分布式训练微调创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表