TL; DR
Вы не сэкономите время, перемещая весь набор данных одновременно.
Не думаю, что вы обязательно захотите это сделать, даже если у вас есть память GPU для обработки всего набора данных (конечно, CIFAR10 крошечный по современным стандартам).
Я пробовал пакеты разных размеров и рассчитывал время передачи в GPU следующим образом:
num_workers = 1 # Set this as needed
def time_gpu_cast(batch_size=1):
start_time = time()
for x, y in DataLoader(dataset, batch_size, num_workers=num_workers):
x.cuda(); y.cuda()
return time() - start_time
# Try various batch sizes
cast_times = [(2 ** bs, time_gpu_cast(2 ** bs)) for bs in range(15)]
# Try the entire dataset like you want to do
cast_times.append((len(dataset), time_gpu_cast(len(dataset))))
plot(*zip(*cast_times)) # Plot the time taken
Для num_workers = 1
вот что я получил:
И если мы попробуем параллельную загрузку (num_workers = 8
), это станет еще понятнее: