我正在使用Youtube 5M音乐视频数据集,我想在它们上训练算法。为了使用数据集,我必须下载每个视频并将其填充以使其大小相同。然后,我将视频拟合到神经网络中的标签。 我有一个在线服务器上的8 gpu系统和8 cpu核心系统。我想为每个下载/填充过程指定一个cpu,然后使用GPU进行训练。
什么是最有效的方法。 我将下载并处理8个视频..然后将它们发送到GPU的视频,还是每个CPU有一个GPU,让它们像这样运行。同样,按照每种情况的代码大纲的样子。
我的多处理代码如下:
if __name__ == '__main__':
processes = []
p = multiprocessing.Process(target=video_proc())
processes.append(p)
p.start()
for process in processes:
process.join()
该函数称为video_proc,我的多GPU代码如下。这个多GPU代码包含在video_proc中,因此每个cpu都可以访问所有8个GPU。这可能也可以。
parallel_model = multi_gpu_model(model, gpus=8)
parallel_model.compile(loss='binary_crossentropy',
optimizer='rmsprop')
# This `fit` call will be distributed on 8 GPUs.
callbacks = [
EarlyStoppingByLossVal(monitor='loss', value=0.001, verbose=1),
# EarlyStopping(monitor='val_loss', patience=2, verbose=0),
ModelCheckpoint(kfold_weights_path, monitor='loss', save_best_only=True, verbose=0),
]
parallel_model.fit(X_D, Y_D, batch_size=8, nb_epoch=nb_epoch,
shuffle=True, verbose=1,
callbacks=callbacks)
另一个考虑因素是,我希望GPU永远不会像在下载过程进行时那样处于空闲状态。而且,在神经网络中拟合数据期间,CPU也会处于空闲状态。我该如何克服呢?感谢您的协助!