优化GPU用于Keras模型训练

时间:2020-05-10 09:35:50

标签: tensorflow keras nvidia

我正在训练Keras模型。在培训期间,我只使用了5%到20%的CUDA内核以及同等比例的 NVIDIA RTX 2070 内存。当前,模型训练非常缓慢,我真的想尽可能多地利用可用的CUDA内核来加快速度!

nvidia dmon # (during model training)

# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0    45    49     -     9     6     0     0  6801  1605

为了更快地训练相同模​​型,我应该调整哪些参数以提高CUDA核心利用率?

这是我当前图像生成和训练步骤的简化示例(如果需要,我可以详细说明/编辑,但我目前认为这些是解决问题的关键步骤):

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    r'./input_training_examples',
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary'
)
validation_generator = test_datagen.flow_from_directory(
    r'./input_validation_examples',
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary'
)

history = model.fit(
    train_generator,
    steps_per_epoch=128, epochs=30,
    validation_data=validation_generator, validation_steps=50,
)

硬件: NVIDIA 2070 GPU

平台: Linux 5.4.0-29-通用#33-Ubuntu x86_64,NVIDIA驱动程序440.64,CUDA 10.2,Tensorflow 2.2.0-rc3

1 个答案:

答案 0 :(得分:2)

GPU利用率是一项棘手的业务,涉及的因素太多。

明显要尝试的第一件事:增加批量大小

但这仅仅是不能确保最大利用率,也许您的I / O速度很慢,所以data_generator中存在瓶颈。

如果有足够的内存,则可以尝试将完整数据作为NumPy数组加载。

您可以尝试在多处理方案中增加工作人员的数量。

model.fit(..., use_multiprocessing=True, workers=8)

最后,取决于您的模型,如果模型太轻而不深,您的利用率就会降低,并且没有标准的方法可以进一步改进它。