Hello all,
I’m trying to add AMP to the source code from a paper I read recently, but it crashes in the forward pass with the error message “RuntimeError: expected scalar type Half but found Float”. And I hope you can help me with this. 
The specs I’m using:
Ubuntu 20.4
Nvidia driver: 450.36.06
Cuda: 10.2
cudnn: 7.6.5
PyTorch-Nighlty : 1.7.0.dev20200721
The network is fairly simple:
scaler = GradScaler()
for epoch in trange(epochs):
    for (dataE, dataM, dataC, target) in trainLoader:
        with autocast():
            zex = AutoencoderE(dataE)
            zmx = AutoencoderM(dataM)
            zcx = AutoencoderC(dataC)
        
            ...
        
        scaler.scale(loss).backward()
        
        for optim in (optim_clas, optimE, optimM, optimC):
            scaler.step(optim)

        scaler.update()

The network classes:
class Encoder(nn.Module):
    def __init__(self, input_size, output_size, dropout_rate):
        super(Encoder, self).__init__()
        self.En = torch.nn.Sequential(
            nn.Linear(input_size, output_size),
            nn.BatchNorm1d(output_size),
            nn.ReLU(),
            nn.Dropout(dropout_rate))

    def forward(self, x):
        output = self.En(x)
        return output


class Classifier(nn.Module):
    def __init__(self, input_size, rate):
        super(Classifier, self).__init__()
        self.FC = torch.nn.Sequential(
            nn.Linear(input_size, 1),
            nn.Sigmoid())

    def forward(self, x):
        return self.FC(x)


Stacktrace:
Traceback (most recent call last):
  File "/media/tony/Volume/work/multi-omics/multi-omics_analysis/molti-omics_analysis_cetuximab.py", line 325, in <module>
    main()
  File "/media/tony/Volume/work/multi-omics/multi-omics_analysis/molti-omics_analysis_cetuximab.py", line 240, in main
    zex = AutoencoderE(dataE)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/modules/module.py", line 726, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/media/tony/Volume/work/multi-omics/multi-omics_analysis/encoder.py", line 14, in forward
    output = self.En(x)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/modules/module.py", line 726, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/modules/container.py", line 117, in forward
    input = module(input)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/modules/module.py", line 726, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 91, in forward
    return F.linear(input, self.weight, self.bias)
  File "/home/tony/anaconda3/envs/multi-omics/lib/python3.7/site-packages/torch/nn/functional.py", line 1682, in linear
    ret = torch.addmm(bias, input, weight.t())
RuntimeError: expected scalar type Half but found Float

Process finished with exit code 1