Are you sure the difference in your score is due to the usage of cycle?
How much do the results differ and how often have you compared them?
You would have to set the seed and disable non-deterministic behavior to compare both approaches.
See the reproducibility notes 5 for more information.
Usually you won’t use cycle as one whole DataLoader iteration equals one epoch in training.
This makes it easy so track some stats using epochs.
Also it’s pretty uncommon to push the data onto the GPU before training, as this will fill up the GPU leaving less space for your model and training. Usually you try to keep the memory usage as low as possible to be able to fit large models.
Also using a DataLoader with multiple workers, the next batches can be loaded and preprocessed, while the GPU is busy with the training. If your GPU workload is large enough, this will mask the (CPU) loading times.