You could use something like that:
class Network(nn.Module):
    def __init__(self, inception_device, lstm_device,  discr_device):
         self.enc = inception_v3().to(inception_device)
         self.convlstm = ConvLSTM().to(lstm_device) 
         self.discriminator = fully_connect_layer().to(discr_device)
        self.discr_device = discr_device
        self.lstm_device = lstm_device 
        self.inception_device = inception_device 

    def forward(self, input):
        x = self.enc(input.to(self.inception_device))
        x = self.convlstm(x.to(self.lstm_device))
        x = self.discriminator(x.to(self.discr_device))
        return x

This would make your training a bit slower, since pytorch needs to push the tensor to the new devices at each iteration.
If the tensor is already on the correct device, the .to() becomes a no-OP.
To instantiate the netwo, you would do something like
net = Network(
             torch.device("cuda:0"),
             torch.device("cuda:1"),
             torch.device("cuda:2")
)

The integers correspond to the GPU indices. This would make the code somewhat device agnostic as you could either use other indices, or create a mixture of GPU and CPU network.