美文网首页
流水账---记一次debug经历AssertionError:

流水账---记一次debug经历AssertionError:

作者: 加油11dd23 | 来源:发表于2021-08-11 15:21 被阅读0次

如题,首先报了如下错误:
AssertionError: Gather function not implemented for CPU tensors
我心想,这不是dp的时候的问题出错了吗,正好趁这个时机研究下pytorch做并行的内核方式。
于是首先查看了
anaconda3/envs/torch1.7/lib/python3.8/site-packages/torch/nn/parallel/scatter_gather.py
又查看了
anaconda3/envs/torch1.7/lib/python3.8/site-packages/torch/nn/parallel/_functions.py
还查看了
/cfs/doxu/software/anaconda3/envs/torch1.7/lib/python3.8/site-packages/torch/nn/parallel/data_parallel.py
最后发现了一篇有用的帖子,终于弄懂了pytorch的dp实现,以后可以写个小demo。
[PyTorch 源码解读之 DP & DDP:模型并行和分布式训练解析]https://zhuanlan.zhihu.com/p/343951042

弄懂完原理之后,就开始定位bug所在。传入gather的数据不对,那么传入这里我gather的tensor是什么?很显然是loss,恰巧loss是我自己改的,所以很有可能bug出在这里,于是我打印loss的device,发现是tuple,喔,原来是最后的[0]忘了加,导致我的loss是由tensor组成的tuple,而python对于tuple的处理机制是存储在内存中,内存这一块显然属于cpu不属于gpu,所以报错我有的tensor在cpu上,添加[0],解决问题。

loss = self.loss(output, tgt)[0]

PS,以后还是不要用tuple了,用dict好一点,毕竟内存消耗list>tuple>dict
【list最大是因为list是动态的,它需要存储指针来指向对应的元素。另外,因为列表是可变的,为了保存插入
的高效,一般会预留额外的存储空间,因此就需要记录实时的空间使用情况,当空间不足时,额外再分配空间】

相关文章

  • 流水账---记一次debug经历AssertionError:

    如题,首先报了如下错误:AssertionError: Gather function not implement...

  • 记一次RN Debug经历

    bug是如果一个scrollview上有多个TextInput,那么一个TextInput处于focus状态时点击...

  • 一次debug经历

    背景 线上系统使用的数据库是MySQL,使用了replication,单master+多slave。应用程序使用D...

  • 2019-07-28 Node Assert

    assert.AssertionError Error的子类 new assert.AssertionError(...

  • 记一次 Google 面试经历

    记一次 Google 面试经历 记一次 Google 面试经历

  • 记一次Debug过程

    前言 在写实现等高自定义Cell自测项目时,自己导致的数个Bug。因为项目较为简单,所以在实现时特意使用了一些之前...

  • 记一次程式Debug

    周末又加了一天班,这一段时间雨水不断,江南独有的梅雨季节又来了,年年这个时候都这样。 其实最近也不是太忙,就是一个...

  • 爱恋

    想写一个关于经历过最深也是唯一的爱恋。 过程有很多, 但我竟然描述得像记流水账。 又一次怀疑自己是否喜欢过人。

  • 流水

    白日依山尽,黄河入海流。 其实,流水与每日的平凡生活的流水账最为接近。那么,不妨咱就以记流水账的方式记下今日所经历...

  • java.lang.AssertionError: annota

    java.lang.AssertionError: annotationType(): unrecognized ...

网友评论

      本文标题:流水账---记一次debug经历AssertionError:

      本文链接:https://www.haomeiwen.com/subject/nercbltx.html