The initial plan is yes, to instantiate (and destroy) each dataloaders of related model whenever I’m running a training iteration on said model, to minimize my resource usage during training.
As each model as train and validation dataset, there will be 6 dataloaders in total (2 for each model) during training, and that doesn’t include dataloader for the big model.
My rough implementation will be somewhat like this (with example of model_a)
def model_a_step():
    # instantiate dataloader and dataset
    a_dataset = Dataset(model_a_data_set)
    dataloader = DataLoader(a_dataset)

    for x in dataloader:
        # run inference and backprop
    
    # destroy dataloader and dataset when finished
    del dataloader, a_dataset
    return trained_model