You could stratify your sampling to use - say - only 250k negative samples per epoch. I’m not sure there is much support for it, though. I would probably subclass the dataset, set the length to 250k and draw a random permutation on each epoch from which the first 250k indices are the dataset contents.
I’m not certain how well that works with multiple dataloading processes though.
Best regards
Thomas