Thanks for the help! The reason I hadn’t attached code was because I figured this was more me not understanding something basic rather than an actual bug with my code. It seems that’s what it was (I have attached code anyways for clarity). When you say CUDA operations are asynchronous, does that mean every time I try to move the batch to the GPU, the previous CUDA operation could still be running and stall the .cuda() call? That would mean the lag is actually due to code chunk B which makes far more sense since that operation is quite computationally expensive.