If you specify your dataloader with shuffle=True and a specific batch size the dataloader will shuffle your data and put the shuffled data into batches of your specified size.
If you then call enumerate() on the dataloader you will be able to loop over the shuffled batches of your predefined size and get a counter as well.