我正在训练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
答案 0 :(得分:2)
GPU利用率是一项棘手的业务,涉及的因素太多。
明显要尝试的第一件事:增加批量大小。
但这仅仅是不能确保最大利用率,也许您的I / O速度很慢,所以data_generator中存在瓶颈。
如果有足够的内存,则可以尝试将完整数据作为NumPy
数组加载。
您可以尝试在多处理方案中增加工作人员的数量。
model.fit(..., use_multiprocessing=True, workers=8)
最后,取决于您的模型,如果模型太轻而不深,您的利用率就会降低,并且没有标准的方法可以进一步改进它。