我正在使用TensorFlowOnSpark和一个图像数据集训练一个U-Net模型,该数据集可以放入我的 Spark 集群上的内存中,该集群有 3 个工作节点(每个都是 Ubuntu20,内存为 11 GB)。每个节点有 1 个执行器和 4 个 CPU,提供 9 GB 内存。
当模型训练过程开始时,我可以看到每个 executor 上至少有 2GB 的可用空间内存,但是训练的批次越多,executor 使用的内存就越多,直到整个工作因out失败内存错误。
我在单节点配置(1 个使用 Spark 的工作人员)中尝试了我的代码并得到了相同的结果,但是在没有 Spark 的 1 个 CPU 上使用分布式 TensorFlow时我的代码运行良好!!
使用的命令:
spark-submit --master spark://master:7077 --conf spark.dynamicAllocation.enabled=false --conf spark.cores.max=12 --conf spark.executor.memory=8g --conf spark.executor.memoryOverhead=8192 --conf spark.memory.storageFraction=0.1 u_net_train.py --cluster_size 3
为什么会发生这种内存使用量的高增长以及如何解决它?