我有一个分为文件的大数据集。 我想在一个文件中读取和处理我的数据,为此我有这个keras生成器:
def myGenerator():
while 1:
rnd = random.randint(1,200)
strRnd = str(rnd)
lenRnd = len(strRnd)
rndPadded = strRnd.rjust(5, '0')
nSearchesInBatch = 100
f = "path/part-" + rndPadded + "*" #read one block of data
data = sqlContext.read.load(f).toPandas()
imax = int(data.shape[0]/nSearchesInBatch) #number of batches that will be created sequentially from the generator
for i in range(imax):
data_batch = data[i*nSearchesInBatch:(i+1)*nSearchesInBatch]
features = data_batch['features']
output = data_batch['output']
yield features, output
问题在于读取占用的最大部分(每个文件大约200mb),同时GPU等待,可以预先读取下一批,同时GPU在前一个上进行训练?
当一个文件被读取并分步(内循环)时,CPU被隐藏并且GPU训练,一旦纪元结束,GPU就会空闲并且cpu开始读取(需要20 / 30秒)。
任何可以并行化的解决方案吗?