具有多CPU培训的多GPU,如何整合

时间:2020-02-24 07:43:04

标签: python multithreading neural-network gpu

我正在使用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也会处于空闲状态。我该如何克服呢?感谢您的协助!

0 个答案:

没有答案