The problem with your first approach is, that a list is a built-in type which does not have a cuda method.
The problem with your second approach is, that torch.nn.ModuleList is designed to properly handle the registration of torch.nn.Module components and thus does not allow passing tensors to it.
There are two ways to overcome this:

You could call .cuda on each element independently like this:

if gpu:
            data = [_data.cuda() for _data in data] 
            label = [_label.cuda() for _label in label] 

And

You could store your data elements in a large tensor (e.g. via torch.cat) and then call .cuda() on the whole tensor:

data = []
    label = []
        
    for D, true_label in batch_dataLabel:
        D = D.float()
        true_label = true_label.float()
        # add new dimension to tensors and append to list
        data.append(D.unsqueeze(0))
        label.append(true_label.unsqueeze(0))
    
    data = torch.cat(data, dim=0)
    label = torch.cat(label, dim=0)

    if gpu:
            data = data.cuda()
            label = label.cuda()


Note: I removed the Variable conversion, since variables and tensors have been merged a while ago in Pytorch 0.4