Make TorchServer
Here we follow the logic that the DeepMelissaServer is agnostic to ML library (receive, handle_data, check_data). While we need a second layer that depends on Torch only - TorchServer. Handling the initialization of distributed training methods, and the finalization of those methods.
This means that developers gain more control over these initialization and finalization methods - and user class (LorenzServer) is easier to read, with less duplicated code.
The new inheritance tree follows:
DeepMelissaServer = library agnostic data collector <- developer controlled
TorchServer(DeepMelissaServer) = Imports torch, initializes distributed training, handles torch rank checking etc. <- developer controlled
LorenzServer(TorchServer) = Creates train loop, creates model architecture <- user controlled