PyTorch1.11.x创建TrainingArguments对象报is_initialized属性错误
问题原因
该报错由Transformers库与PyTorch 1.11.X版本不兼容导致:torch.distributed.is_initialized是PyTorch 1.12及以上版本才在模块顶层对外暴露的公开API。当前环境安装的Transformers版本在初始化TrainingArguments对象、执行分布式环境预校验逻辑时,会直接调用这个顶层API,而PyTorch 1.11.X版本未在torch.distributed模块的命名空间下导出该方法(方法实际存在于子模块torch.distributed.distributed_c10d中,未做顶层映射),因此触发属性不存在的异常。
可行解决方法
根据实际环境约束三选一即可:
- 优先方案(无代码侵入、稳定性最高):升级PyTorch至1.12.0及以上稳定版本,匹配当前安装的Transformers库的依赖要求。升级完成后原有业务代码无需任何修改,即可正常初始化
TrainingArguments对象。 - 固定PyTorch 1.11.X版本场景方案:将Transformers降级至兼容PyTorch 1.11.X的最后一个稳定版本
4.20.1,执行命令pip install transformers==4.20.1完成降级后,原有代码无需调整即可正常运行。 - 临时应急方案(不想调整现有依赖版本时使用):在导入
TrainingArguments之前,手动给torch.distributed模块补全缺失的顶层接口映射,在代码最开头添加如下片段即可绕过报错,补丁逻辑和高版本PyTorch原生行为完全一致,单卡、多卡训练场景均适用:
import torch import torch.distributed # 补全PyTorch 1.11.X版本未暴露到顶层的接口 if not hasattr(torch.distributed, "is_initialized"): from torch.distributed import distributed_c10d torch.distributed.is_initialized = distributed_c10d.is_initialized
内容的提问来源于stack exchange,提问作者Rajesh Thakur
相关产品推荐
相关产品推荐

