当前位置 博文首页 > 沉迷单车的追风少年:RuntimeError: cudnn RNN backward can onl

    沉迷单车的追风少年:RuntimeError: cudnn RNN backward can onl

    作者:[db:作者] 时间:2021-08-18 09:47

    问题描述:

    RuntimeError: cudnn RNN backward can only be called in training mode

    问题分析:

    原因是反向传播的时候不能是非train状态。

    我的代码里面在反向传播之前加了个Alexnet,Alexnet计算loss后会自己反向传播,此时在整体LSTM反向传播的时候就会出现这个非train状态的问题。

    解决:

    百度一下:

    第一页的方法我都试过,全都没有用。。。

    彻底解决:

    在开始训练之前加上:

    torch.backends.cudnn.enabled=False

    即可彻底解决!!!


    更新:

    刚才那种方法只能强行改变当前模型的状态,最核心的问题还是代码出现了bug,仔细查一查train的过程中有哪些地方触发了非train状态。常见的是触发了evaluation状态。

    一种好的调试方法是每次循环进入train的时候记录当前epoch并将其打印出来,如果处于非train,往往会导致多次重复进入循环。

    如果此时有张量保存在GPU,往往也会先造成显存爆炸!!

    cs