系统信息
- 是否编写了自定义代码(与在TensorFlow中使用的库存示例脚本相反):是
- OS平台和发行版(例如,Linux Ubuntu 16.04):REHEL 7.9
- 从哪里安装的TensorFlow(源代码或二进制文件):源代码
- TensorFlow版本(使用下面的命令):2.4.1
- Python版本:3.7.4
- Bazel版本(如果从源代码编译):3.7.1
- GCC/编译器版本(如果从源代码编译):8.3.0
- CUDA/cuDNN版本:10.2
- GPU型号和内存:GTX 1080Ti
描述当前行为
当运行一个简单的示例时,TensorFlow会连续分配数GB的内存,直到内存耗尽。
这只发生在运行超过2个节点的情况下,而不是在运行1个或2个节点的情况下,并且它发生在MultiWorkerMirroredStrategy的创建过程中。
我还可以在一个节点上启动6个任务(每个任务3个),而没有问题,但是在3个节点上启动3个任务(每个任务1个)就不行了。
我还观察到,只有一个排名被使用,其他工作节点都很好,等待那个完成初始化(我猜想)。
描述预期行为
它可以正常工作或产生合理的错误。
独立代码以重现问题
import tensorflow as tf
from mpi_cluster_resolver import MPIClusterResolver
resolver = MPIClusterResolver()
strategy = tf.distribute.MultiWorkerMirroredStrategy(cluster_resolver=resolver)
带有
mpi_cluster_resolver.py.txt
这样就可以通过HPC集群上的SLURM/MPI来分布式运行TensorFlow
9条答案
按热度按时间gk7wooem1#
2.5.0版本也出现了同样的问题。
drnojrws2#
感谢报告@Flamefire -这是否只发生在使用
MPIClusterResolver
时,还是在一般情况下,无论使用的是哪种集群解析器,都会出现这种情况?wkyowqbh3#
你能帮我用另一个集群解析器测试这个吗?不确定如何做到这一点,因为创建那个类是为了让其在我们的HPC系统上运行。猜猜关于环境变量的事情?
这也可能与CUDA版本有关:
软件栈的其余部分几乎相同。不过,在关闭TF时(由于Python线程和TF清理方面的问题而强制终止)A100上还有其他问题。
qxsslcnc4#
有趣的是,使用某些CUDA版本完全防止了代码出现OOM?
alen0pnh5#
这可能至少是相关的,是的。然而,由于这是一个不同的集群(不同的硬件),它也可能有其他原因。尽可能使软件栈保持一致。
使用仅2个节点不会导致问题,但使用3个节点会。工作集群拥有更多的主内存,所以也许在那里也会出现这个问题。但这是猜测
af7jpaap6#
好的,通过Python
os.environ
设置TF_CONFIG变量如下(4个等级):相同:OOM。这看起来有问题吗?
7d7tgy0s7#
据我所知,这里没有任何问题。
aij0ehis8#
同样的问题
fcy6dtqo9#
我认为我们在集群上看到了类似的行为:当TF<2.12
MultiWorkerMirrorStrategy
卡在Slurm解析器时,我确实看到某些节点出现OOM错误,但我不确定这是否是完全相同的原因。我的观察是,这种症状只发生在主机名中带有前导零的主机上,而对解析器的猴子补丁似乎有效:
我猜这也是为什么在这里nodelist很重要的原因,正如之前评论中提到的。假设这应该通过:66e587c780c5来解决。