Tensorflow 为Keras模型培训优化GPU的使用

Tensorflow 为Keras模型培训优化GPU的使用,tensorflow,keras,nvidia,Tensorflow,Keras,Nvidia,我在训练一个凯拉斯模特。在培训期间,我只使用了我的CUDA内核的5%到20%,而NVIDIA RTX 2070内存的比例也很小。模型培训目前相当缓慢,我真的很想利用尽可能多的CUDA内核来加速 nvidia dmon#(在模型培训期间) 我应该调整哪些参数以提高CUDA核心利用率,从而更快地培训同一型号 以下是我当前图像生成和培训步骤的简化示例(如果需要,我可以详细说明/编辑,但我目前认为这些是问题的关键步骤): 硬件:NVIDIA 2070 GPU 平台:Linux 5.4.0-29-gene

我在训练一个凯拉斯模特。在培训期间,我只使用了我的CUDA内核的5%到20%,而NVIDIA RTX 2070内存的比例也很小。模型培训目前相当缓慢,我真的很想利用尽可能多的CUDA内核来加速

nvidia dmon#(在模型培训期间)

我应该调整哪些参数以提高CUDA核心利用率,从而更快地培训同一型号

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

硬件:NVIDIA 2070 GPU


平台:Linux 5.4.0-29-generic#33 Ubuntu x8664、NVIDIA驱动程序440.64、CUDA 10.2、Tensorflow 2.2.0-rc3

GPU利用率是一项棘手的工作,涉及的因素太多

显然,首先要尝试的是:增加批量大小

但这并不能确保最大利用率,可能您的I/O速度较慢,因此数据生成器中存在瓶颈

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

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

model.fit(…,使用_multiprocessing=True,workers=8)


最后,取决于您的型号,如果您的型号太轻而不是太深,您的利用率将很低,并且没有标准的方法进一步提高。

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

显然,首先要尝试的是:增加批量大小

但这并不能确保最大利用率,可能您的I/O速度较慢,因此数据生成器中存在瓶颈

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

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

model.fit(…,使用_multiprocessing=True,workers=8)

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

# 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
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,
)