Tensorflow KERA显示了一次培训的多个过程

Tensorflow KERA显示了一次培训的多个过程,tensorflow,caching,memory,keras,Tensorflow,Caching,Memory,Keras,每当我开始使用Keras进行培训时,我都会使用多个过程(几十个),正如您在本文中看到的那样。这正常吗 这可能是我经历记忆问题的原因吗?随着培训的进行,缓存变满,然后交换被激活,几小时后需要重新启动机器 培训在单个GPU上进行,使用fit_generator: training_model.fit_generator( generator=train_generator, steps_per_epoch=config["steps"], epochs=config["epo

每当我开始使用Keras进行培训时,我都会使用多个过程(几十个),正如您在本文中看到的那样。这正常吗

这可能是我经历记忆问题的原因吗?随着培训的进行,缓存变满,然后交换被激活,几小时后需要重新启动机器

培训在单个GPU上进行,使用fit_generator:

training_model.fit_generator(
    generator=train_generator,
    steps_per_epoch=config["steps"],
    epochs=config["epochs"],
    verbose=1,
    callbacks=callbacks
)
  • Keras 2.2.4
  • tensorflow gpu 1.13.1
  • CUDA 10.0

谢谢你的帮助

从您提供的信息来看,似乎是内存不足

请确认您是否正在使用GPU。您可以通过运行命令进行检查

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
此外,如果我们使用GPU,则可以在
nvtop
中监控流程,而不是在
htop
上监控流程

确定整个项目中哪个操作占用更多内存和时间的最佳方法是使用Tensorflow Profiler

因此,如果可能,您可以考虑将Tensorflow版本升级到1.15或2.2,其中
model.fit
也执行
model.fit\u生成器的工作

使用探查器的代码如下所示:

# Create a TensorBoard callback
logs = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")

tboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs,
                                                 histogram_freq = 1,
                                                 profile_batch = '500,520')

model.fit(ds_train,
          epochs=2,
          validation_data=ds_test,
          callbacks = [tboard_callback])
执行的高级详细信息可在
Profiler
的概述页面中查看,可在
Tensorboard
Profile
选项卡中查看,如下所示

从上面的屏幕截图可以看出,输入处理占用了大部分执行时间(83%)

此外,它还将为我们提供减少内存消耗的建议,从而优化我们的执行

此外,
Tools
下拉列表中的其他选项,如
TraceViewer
提供了有用的信息,如操作级别的执行信息

有关更多信息,请参阅和


希望这有帮助。学习愉快

从您提供的信息来看,似乎是内存不足

请确认您是否正在使用GPU。您可以通过运行命令进行检查

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
此外,如果我们使用GPU,则可以在
nvtop
中监控流程,而不是在
htop
上监控流程

确定整个项目中哪个操作占用更多内存和时间的最佳方法是使用Tensorflow Profiler

因此,如果可能,您可以考虑将Tensorflow版本升级到1.15或2.2,其中
model.fit
也执行
model.fit\u生成器的工作

使用探查器的代码如下所示:

# Create a TensorBoard callback
logs = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")

tboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs,
                                                 histogram_freq = 1,
                                                 profile_batch = '500,520')

model.fit(ds_train,
          epochs=2,
          validation_data=ds_test,
          callbacks = [tboard_callback])
执行的高级详细信息可在
Profiler
的概述页面中查看,可在
Tensorboard
Profile
选项卡中查看,如下所示

从上面的屏幕截图可以看出,输入处理占用了大部分执行时间(83%)

此外,它还将为我们提供减少内存消耗的建议,从而优化我们的执行

此外,
Tools
下拉列表中的其他选项,如
TraceViewer
提供了有用的信息,如操作级别的执行信息

有关更多信息,请参阅和


希望这有帮助。学习愉快

你能把你的fit_生成器代码贴出来吗?你在使用多重处理吗?我编辑了我的帖子!我没有使用多处理或限定数量的工人。一切都是默认的。你能发布你的fit_生成器代码吗?你在使用多重处理吗?我编辑了我的帖子!我没有使用多处理或限定数量的工人。一切都是默认的。谢谢你的回答!我确认我正在使用GPU。我很想使用探查器,但是现在迁移到TF2.2会很复杂。我不认为我的问题是由内存不足引起的,内存“已使用”大约是128GB中的6GB。缓存/缓冲区占用了所有剩余内存。感谢nvtop提示,它真的很有帮助。谢谢你的回答!我确认我正在使用GPU。我很想使用探查器,但是现在迁移到TF2.2会很复杂。我不认为我的问题是由内存不足引起的,内存“已使用”大约是128GB中的6GB。缓存/缓冲区占用了所有剩余内存。谢谢你的建议,真的很有帮助。