[如果有人知道一个非常活跃的论坛来讨论这样的事情,请在评论中让我知道。]
调整跑步的训练参数时,我得到了意外的结果。
-
数据集:来自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
如果您能理解为什么会这样,我将不胜感激。