You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

微调GPT-J遇RuntimeError:DequantizeAndLinearBackward视图原地修改报错

解决自定义Function视图原地修改导致的RuntimeError

你的判断完全正确——这个错误确实和原地操作(in-place)修改自定义Function返回的视图有关。不需要修改激活函数的参数,只需要对自定义Function的输出做一个简单的克隆操作就能解决。

问题根源

DequantizeAndLinear.apply()返回的张量是内部F.linear()生成的视图,而PyTorch的autograd系统会跟踪这个视图的反向传播逻辑。当你用output += self.adapter(input)做原地修改时,会覆盖自定义Function关联的反向梯度计算逻辑,框架抛出这个错误是为了避免梯度计算结果出现偏差。

修复方案

在获取自定义Function的输出后,立刻调用.clone()生成独立的张量,之后再进行原地操作:

修改你的FrozenBNBLinear类的forward方法:

def forward(self, input):
    # 对自定义Function的输出进行克隆,避免后续原地操作破坏视图的反向逻辑
    output = DequantizeAndLinear.apply(input, self.weight, self.absmax, self.code, self.bias).clone()
    if self.adapter:
        output += self.adapter(input)
    return output

或者,你也可以在原地操作前单独克隆:

def forward(self, input):
    output = DequantizeAndLinear.apply(input, self.weight, self.absmax, self.code, self.bias)
    if self.adapter:
        # 克隆后再执行原地加法
        output = output.clone()
        output += self.adapter(input)
    return output

为什么这样有效?

克隆操作会创建一个和原张量内容相同但内存独立的新张量,后续的原地修改只会作用于这个新张量,不会影响原始视图关联的自定义反向传播逻辑,autograd就能正确计算梯度了。

内容的提问来源于stack exchange,提问作者May Ouir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:56:14