Я тренирую нейронную сеть с данными, которые слишком велики, чтобы поместиться в памяти.Я разделил данные на куски в формате HDF5, и я читаю их по одному и превращаю их в генератор, который я затем подаю в качестве входа в нейронную сеть.Я заметил, что чтение в порциях данных также является узким местом, и чтобы сделать это быстрее, пока сеть обучается на порции данных, я пытаюсь использовать другой процесс для чтения в следующей порции данных.Моя функция для чтения данных представлена ниже:
import h5py
def get_data(filename):
current_file = h5py.File(filename, 'r')
images = current_file['images'].value
coords = current_file['coords'].value
current_file.close()
return images, coords
Когда я применяю эту функцию напрямую, она отлично работает и считывает данные через ~ 45 секунд:
import time
start = time()
images, coords = get_data('Single-Cell-Image-Chunks/0.hdf5')
print(time() - start)
Однако, когда я пытаюсь использовать многопроцессорную рабочую систему, она не завершается через 10 минут, и я ее убил:
import time
from multiprocessing import Pool
start = time()
pool = Pool(1)
res = pool.apply_async(get_data, ('Single-Cell-Image-Chunks/0.hdf5',))
images, coords = res.get()
print(time() - start)