Reducer buckets have been rebuilt in this iteration.

2023-11-04

在跑torch多GPU报错

“Reducer buckets have been rebuilt in this iteration.”原因是torch版本问题, torch1.7以上的distributed.py发生更改导致报错:

这玩意是distributed.py里的前向函数报错

def forward(self, inputs, *kwargs):           if self.ddp_join_enabled:               ones = torch.ones(                   1, device=self.device               )               work = dist.all_reduce(ones, group=self.process_group, async_op=True)               self.reducer._set_forward_pass_work_handle(                   work, self.ddp_join_divide_by_initial_world_size               )
# Calling _rebuild_buckets before forward compuation,
      # It may allocate new buckets before deallocating old buckets
      # inside _rebuild_buckets. To save peak memory usage,
      # call _rebuild_buckets before the peak memory usage increases
      # during forward computation.
      # This should be called only once during whole training period.
      if self.reducer._rebuild_buckets():
          logging.info("Reducer buckets have been rebuilt in this iteration.")

      if self.require_forward_param_sync:
          self._sync_params()

      if self.ddp_join_enabled:
          # Notify joined ranks whether they should sync in backwards pass or not.
          self._check_global_requires_backward_grad_sync(is_joined_rank=False)

      # !!!
      if self.device_ids:
          inputs, kwargs = self.scatter(inputs, kwargs, self.device_ids)
          if len(self.device_ids) == 1:
              output = self.module(*inputs[0], **kwargs[0])
          else:
            # 单进程多线程多卡的情况
              outputs = self.parallel_apply(self._module_copies[:len(inputs)], inputs, kwargs)
              output = self.gather(outputs, self.output_device)
      else:
          output = self.module(*inputs, **kwargs)

      if torch.is_grad_enabled() and self.require_backward_grad_sync:
          self.require_forward_param_sync = True
          # We'll return the output object verbatim since it is a freeform
          # object. We need to find any tensors in this object, though,
          # because we need to figure out which parameters were used during
          # this forward pass, to ensure we short circuit reduction for any
          # unused parameters. Only if `find_unused_parameters` is set.
          if self.find_unused_parameters:
          # 当DDP参数 find_unused_parameter 为 true 时,其会在 forward 结束时,启动一个回溯,标记出所有没被用到的 parameter,提前把这些设定为 ready,这样 backward 就可以在一个 subgraph 进行,但这样会牺牲一部分时间。
              self.reducer.prepare_for_backward(list(_find_tensors(output)))
          else:
              self.reducer.prepare_for_backward([])
      else:
          self.require_forward_param_sync = False

      return output

解决思路:
1、对torch进行降级, 构建torch1.6环境
torch1.6 cuda10 torchvision 0.7.0

pip install torch==1.6.0 torchvision==0.7.0 

# CUDA 10.2
pip install torch==1.6.0 torchvision==0.7.0

# CUDA 10.1
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html

# CUDA 9.2
pip install torch==1.6.0+cu92 torchvision==0.7.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html

  1. 修改代码
    已解决,适用我的问题
    我的代码:
predicts, loss, loss_statics = model(data)

结构整体改为:

loss, loss_statics = model(data)

对于distributed.py DistributedDataParallel来说, 它的forward只接受关于 Loss的返回值,predicits就不可以加入;之前torch1.6版本没有问题;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Reducer buckets have been rebuilt in this iteration. 的相关文章

随机推荐

  • C++类和对象:对象的初始化和清理

    C 类和对象 对象的初始化和清理 1 构造函数与析构函数 2 构造函数的分类与调用 2 1 分类 2 2 调用 3 拷贝函数的调用时机 4 构造函数的调用规则 5 深拷贝与浅拷贝 6 初始化列表 7 类对象作为类成员 8 静态成员 8 1
  • JAVA操作Excel文件

    JAVA EXCEL API 是一开放源码项目 通过它Java开发人员可以读取Excel文件的内容 创建新的Excel文件 更新已经存在的Excel文件 使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表 因
  • uniapp app 实现右上角回首页;点homeButton返回上一页;onNavigationBarButtonTap不生效问题

    场景 app Android移动端 实现点击右上角图标 回首页 问题 用了官网的 homeButton 图标正常展示了 也可点击 但每次点击后是会返回上一页而非首页 后来查到说 要结合onNavigationBarButtonTap生命周期
  • 关于STM32中ADC原理

    该文章内容来源于江协助科技 如有侵权 联系删除 目录 ADC原理 逐次逼近型ADC ADC框图介绍 注入通道 规则通道介绍 ADC基本结构 重点 转换模式 数据对齐 内部校准 ADC原理可以将引脚上连续变化模拟电压转换为内存中存储的数字变量
  • 区块链Fabric-从入门到实战(一)

    加密算法 加密算法分对称加密算法和非对称加密算法 在区块链中主要使用的时非对称加密算法 非对称加密是指为满足安全性需求和所有权验证需求而集成到区块链中的加密技术 非对称加密在加密和解密过程中 使用两个非对称的密钥 分别为公钥和私钥 非对称密
  • Android studio设置快捷键

    Android studio 设置快捷键 因为习惯用eclipse快捷键 所以将Androidstudio的快捷键设置成eclipse快捷键一致 首先在setting keymap 复制一份eclipse 这样就是eclipse的快捷键 以
  • 如何用matlab画泰勒图

    前几天写文章 想画一些泰勒图 我觉得其实这个泰勒图吧 包含的信息也并不多 只是看起来比较直观 且看起来逼格比较高 就谷歌了一下怎么画 先找到的是这个代码 但是有毒 死活跑不通 不知为何 且评论里大家和我的问题都一毛一样 遂重找 http c
  • ctfshow web15-web25详细思路

    web15 提示 公开的信息比如邮箱 可能造成信息泄露 产生严重后果 进入题目后看到有个QQ邮箱 我们搜一下它的QQ 没啥信息 返回到刚才的网站加后缀看能不能进去后台 不知道用户名密码哎 那忘记密码吧 发现一个信息 刚才搜的QQ用户在西安
  • 十、Update 存储过程

    文章目录 修改数据的要求 存储过程中的数据库异常 我们需要数据库异常 MariaDB 发起异常 SIGNAL和RESIGNAL mariaDB 捕获异常 捕获指定异常 捕获自定义异常 获取异常消息 update 锁及其测试 Update 锁
  • 通过Dockerfile启动容器遇到的两个不常见错误

    1 报错 ImportError cannot import name cached property from werkzeug 安装更高级的版本 pip install Werkzeug 0 16 0 2 已安装pip 执行python
  • Python入门--关键字

    关键字是Python编程语言中具有特殊含义的保留单词 不能用作变量名 函数名 类名或其他标识符 以下是Python 3 9 0版本中的关键字列表 False None True and as assert async await break
  • 将 varchar 转换为数据类型 numeric 时出现算术溢出错误

    SQL Server 2005 中 如果使用5位以上的字符串转换为numeric时就会出现 将 varchar 转换为数据类型 numeric 时出现算术溢出错误 这样的错误 如果使用5位以下 含5位 的就不会出错
  • Python笔记18-继承&函数重写

    一 继承 重点掌握 1 概念 如果两个或者两个以上的类具有相同的属性和方法 我们可以抽取一个类出来 在抽取出来的类中声明各个类公共的部分 被抽取出来的类 父类 father class 超类 super class 基类 base clas
  • Java List转换成String数组

    实现代码 List
  • Android阿里云推送离线通知集成踩坑之路

    最近因为公司后台服务器买的是阿里云的服务 所以把友盟的推送换成了阿里云推送 首先不得不说 文档写得很差 兼容性和适配做得也不是很好 加了技术支持群 但是里面的同学问一个问题半天才有回复 好了 不扯谈 直接上代码 1 添加依赖 由于公司项目是
  • C++ 计算数组长度

    实现程序如下 include
  • Sublime Text3 BracketHighlighter

    BracketHighlighter 括号匹配插件 修改Preferences gt Package Settings gt BracketHighlighter gt Bracket Settings 修改settings User文件
  • 深入理解Gradle、Maven等JAVA项目的构建工具

    目录 简单概括构建工具的作用 构建工具的具体作用 Gradle和Maven的比较 简单概括构建工具的作用 构建工具用于自动化构建 编译 测试 和打包软件项目极大地简化软件开发的过程 提高开发效率和可靠性 让开发者更加专注于业务逻辑和代码实现
  • 云计算基本概念

    云计算的定义 1 云计算是同时描述一个系统平台或者一类应用程序的术语 云计算平台按需进行动态部署 Provision 部署 Configuration 重新部署 Reconfigure 以及取消服务 Deprovision 等 在云计算平台
  • Reducer buckets have been rebuilt in this iteration.

    在跑torch多GPU报错 Reducer buckets have been rebuilt in this iteration 原因是torch版本问题 torch1 7以上的distributed py发生更改导致报错 这玩意是dis