Often you would not load the data directly to the GPU in the Dataset.__getitem__ or in any DataLoader method, but you would push it to the device in the training loop.
Assuming your host system has enough memory to load (a batch of) images, you could perform the patch creation in the Dataset.
Depending on your use case, you could e.g. specify the batch size to be N and slice the single image into M patches. The returned batch would then be N*M of the smaller windows.