如何在Keras中计算fit_generator的CPU内存使用率?

时间:2019-07-05 11:14:13

标签: python tensorflow keras

我正在尝试使用Keras训练网络,但是fit_generator和过多的内存使用问题。

我目前有128GB的RAM,我的数据集占用20GB(压缩的)。我将压缩的数据集加载到RAM中,然后使用Sequence生成器解压缩成批数据以馈入网络。我的每个样本都是100x100x100像素,存储为float32,我使用的batch_size为64,queue_size为5,27个工人为multiprocessing=True。从理论上讲,我应该总共有100 * 100 * 100 * 4 * 64 * 5 * 27 =〜35 GB。但是,当我运行脚本时,由于过多的内存使用,该脚本被排队系统杀死了:

slurmstepd: error: Job XXXX exceeded memory limit (1192359452 > 131072000), being killed

我什至尝试使用max_queue_size少至2,并且该过程仍超出最大内存。为了使事情变得更加难以理解,有时甚至偶然地 正确执行了该过程(即使max_queue_size为30!)。

在运行脚本之前,我使用free -m验证了内存实际上是可用的,并且一切正常。我也尝试使用memory-profiler来分析脚本,尽管结果很奇怪: enter image description here

我看起来我的脚本正在产生54个(??????)不同的子代,并且正在使用1200 GB(!)的RAM。显然这没有任何意义...

我计算fit_generator的内存使用量是否错误?据我从文档中了解到的,看起来数据应该在工作进程之间共享,因此排队的批处理应该使用最大的内存部分。有什么我想念的吗?

0 个答案:

没有答案