I cannot reproduce the issue using:
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.nn.parallel import DistributedDataParallel
import types
import argparse


class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Conv2d(3, 16, 3, 1, 1)
        self.bn = nn.BatchNorm2d(16)

    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        return x


def main():
    parser = argparse.ArgumentParser(description='fdsa')
    parser.add_argument("--local_rank", default=0, type=int)

    args = parser.parse_args()
    args.gpu = args.local_rank
    torch.cuda.set_device(args.gpu)
    torch.distributed.init_process_group(backend='nccl',
                                         init_method='env://')
    args.world_size = torch.distributed.get_world_size()

    model = MyModel().to(args.gpu)
    model = DistributedDataParallel(
        model,
        device_ids=[args.gpu],
        output_device=args.local_rank,
        broadcast_buffers=False,
        find_unused_parameters=False
    )
    model = nn.SyncBatchNorm.convert_sync_batchnorm(model)
    scaler = torch.cuda.amp.GradScaler()
    criterion = nn.MSELoss()

    for i in range(2):
        model.zero_grad()
        x = torch.randn(2, 3, 16, 16, device=args.gpu)
        target = torch.randn(2, 16, 16, 16, device=args.gpu)
        with torch.cuda.amp.autocast():
            out = model(x)
            loss = criterion(out, target)

        scaler.scale(loss).backward()
        

if __name__ == "__main__":
    main()

Could you post an executable code snippet or adapt mine to reproduce the error?