优化用于 Keras 模型训练的 GPU 使用
Posted
技术标签:
【中文标题】优化用于 Keras 模型训练的 GPU 使用【英文标题】:Optimising GPU use for Keras model training 【发布时间】:2020-08-25 19:44:18 【问题描述】:我正在训练一个 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-generic #33-Ubuntu x86_64、NVIDIA 驱动程序 440.64、CUDA 10.2、Tensorflow 2.2.0-rc3
【问题讨论】:
【参考方案1】:GPU 利用率是一项棘手的工作,涉及的因素太多。
首先要尝试的显然是:增加批量大小。
但这并不能确保最大利用率,也许你的 I/O 很慢,所以 data_generator 存在瓶颈。
如果您有足够的 RAM 内存,您可以尝试将完整数据加载为 NumPy
数组。
您可以尝试在多处理方案中增加工人数量。
model.fit(..., use_multiprocessing=True, workers=8)
最后,取决于您的模型,如果您的模型太轻且不够深,那么您的利用率就会很低,并且没有标准的方法可以进一步改进它。
【讨论】:
以上是关于优化用于 Keras 模型训练的 GPU 使用的主要内容,如果未能解决你的问题,请参考以下文章
keras使用多GPU并行训练模型 | keras multi gpu training
如何使用 gpu 并行训练 tensorflow.keras 模型? TensorFlow 版本 2.5.0