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

为何EDSR模型FP16推理时出现NaN?参数与输入均无异常

EDSR模型FP16推理出现NaN问题

我采用FP32训练模型、FP16进行推理。其他网络(如ResNet)用FP16推理正常,但超分辨率模型EDSR在FP16推理时出现问题。对比后发现EDSR与正常网络的差异点:

  • 使用带inplace=True的ReLU
  • 包含PixelShuffle层
  • 无BatchNorm层

我的环境配置:

  • CUDA 11.3
  • Python 3.8.12
  • PyTorch 1.12.1
  • cuDNN 8.7.0
  • GPU:RTX A6000

推理流程如下:

net_half = net.half()
net_half.eval()
input_half = input.half()

with torch.no_grad():
     output_half = net_half(input_half)

我已经做了以下排查:

  1. 通过代码确认模型参数和输入均无NaN:
torch.stack([torch.isnan(p).any() for p in net_half.parameters()]).any()
torch.isnan(input_half).any()

返回结果均为False。
2. 测试EDSR的简化操作模块,未出现NaN:

x = torch.randn(1,4,Ny//2,Nx//2)

test_block1 = nn.Sequential(
    nn.Conv2d(4,64,kernel_size=3,padding=1),
    nn.Conv2d(64,64,kernel_size=3,padding=1,bias=True),
    nn.ReLU(True),
    nn.Conv2d(64,64,kernel_size=3,padding=1,bias=True),
    nn.Conv2d(64,64*4,kernel_size=3,padding=1,bias=True),
    nn.PixelShuffle(2),
    nn.ReLU(True),
    nn.Conv2d(64,4,kernel_size=3,padding=1)
)
x = x.half().to(device)
test_block1 = test_block1.half().to(device)
with torch.no_grad():
    y = test_block1(x)

print(y)

但实际训练中,第1轮推理能得到正常结果,第4轮推理时就出现了NaN值。请问卷积神经网络中是否存在不支持FP16的函数?

内容的提问来源于stack exchange,提问作者SIwoo Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:33