Thanks @ptrblck
Yes, somehow I am using a multi processing framework like this
if __name__ == "__main__":
    num_processes = 8

    can_do_distributed = torch.distributed.is_available() and torch.cuda.is_available()
    multiprocessing.spawn(fn=single_process_main, nprocs=num_processes, args=[params])

and in single_process_main,
def single_process_main(*args):
     
     data_loader = DataLoader(dataset, num_workers=4, batch_size=1)
     for loo in range(0, epochs):
          # some JSON parsing logic
          data_cook()
          train()

so we leverage multi processing, then each processing with multi worker dataloader, I assume we will have 8x4=32 underneath worker, but I knew dataloader 4 worker will fetch different data, but not sure whether 8 different processing 's dataloader will fetch different data, it seems not.
The reason why I am using this is because if I put JSON parsing in __get_item__ in dataloader, it will have the error as indicated above, thie multi processing and multi worker seems resolve the problem