多GPU:更低的性能,更多的工作人员,更小的批量大小,更小的队列

[如果有人知道一个非常活跃的论坛来讨论这样的事情,请在评论中让我知道。]

调整跑步的训练参数时,我得到了意外的结果。

  • cnn模型(约1M个参数,连续的2D cnn分为两个FC层)

  • 数据集:来自CelebA的2万张图片和218x178x3张图片

  • 具有16个内核,104 GB RAM,4个K80 GPU的GCP VM。

  • VM映像:该映像是最新的深度学习映像,带有Ubuntu和tf 1.15。

我似乎无法使GPU利用率高于60%,或者CPU利用率高于7%。我感到奇怪的是,我只有4个工作人员(用于预处理和批处理组装)获得了最快的时代速度,最大队列= 2,批处理大小为32。在我看来,增加所有这些应会提高性能并帮助GPU以最大容量运行。

Batch size  Workers  Max Queue  Epoch 1 (s)  Epoch 2 (s)

| 16  | 4  | 4  | 135 | 76 |
| 32  | 4  | 0  | 134 | 56 |
| 32  | 4  | 2  | 136 | 49 |
| 32  | 4  | 4  | 136 | 49 |
| 32  | 4  | 16 | 135 | 51 |
| 32  | 8  | 4  | 137 | 56 |
| 32  | 8  | 8  | 138 | 53 |
| 32  | 16 | 0  | 197 | 62 |
| 32  | 16 | 16 | 139 | 57 |
| 32  | 32 | 400| 161 | 70 |
| 64  | 4  | 4  | 137 | 61 |
| 64  | 16 | 400| 196 | 61 |
| 64  | 32 | 400| 200 | 72 |
| 64  | 64 | 400| 203 | 72 |
| 512 | 4  | 4  | 145 | 56 |
| 512 | 8  | 4  | 154 | 67 |
| 764 | 4  | 4  | 158 | 62 |
| 512 | 8  | 4  | 154 | 67 |
| 764 | 4  | 4  | 158 | 62 | 

模型的构建如下:

        with tf.device('/cpu:0'):
            endec = Model(inputs = E_input,outputs = E_outputs)

        endec = multi_gpu_model(endec,gpus = GPUS)

这样的训练:

    run_history = endec.fit_generator(tr_gen,steps_per_epoch = tr_gen.total_batches,epochs = EPOCHS,validation_data = val_gen,validation_steps = val_gen.total_batches,shuffle = True,verbose = 2,max_queue_size = MAX_QUEUE,use_multiprocessing = MULTI_THREAD,workers = WORKERS)

生成器获取的数据如下:

def __load_img_batch(self,batch_list):
    no_files = len(batch_list)

    x_data = np.empty((no_files,*self.img_dims))
    y_data = np.empty((no_files,self.labels.num_labels))
    for i in range(no_files):
        x_data[i,:,:] = cv2.cvtColor(cv2.imread(self.dir_path + batch_list[i]),cv2.COLOR_BGR2RGB)
        y_data[i,:] = self.labels.lookup(batch_list[i])

    return x_data,y_data

如果您能理解为什么会这样,我将不胜感激。

wgzwang 回答:多GPU:更低的性能,更多的工作人员,更小的批量大小,更小的队列

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3121851.html

大家都在问