MultiGPU:工人越多,性能越低,批量越小,queu越小

2024-09-26 22:43:23 发布

您现在位置:Python中文网/ 问答频道 /正文

[如果有人知道一个非常活跃的论坛可以讨论类似的事情,请在评论中告诉我。]

当我调整跑步的训练参数时,我得到了意想不到的结果

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

  • 数据集:来自CelebA的20k图像和218x178x3图像

  • GCP虚拟机,16核,104 GB RAM,4 K80 GPU

  • VM图像:该图像是最新的深度学习图像,带有Ubuntu和TF1.15

我似乎无法让GPU利用率超过60%,或CPU利用率超过7%。对我来说,这真的很奇怪,我有4个工人(用于预处理和批处理组装),最大队列=2,批处理大小为32,获得了最快的EPOC速度。在我看来,增加所有这些应该会提高性能,并帮助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

如果你能深入了解为什么会发生这种情况,我将不胜感激


Tags: no模型图像selfdata参数labelsgpu

热门问题