MPI4PY 奇怪的 OS 错误

MPI4PY strange OS error

我有一个复杂的 MPI4PY 脚本,它给出了一个看似不可能的错误。

脚本的重要部分:

for rnd in range(50):
    if rnd > 0:
        WEIGHT_FILE = '{}/weights_{}.wts'.format(WORK_DIR, rnd - 1)
        WORK_DIR = '{}'.format(rnd)

    if PROCESS_NUM == 0:
        if not os.path.isdir(WORK_DIR):
            os.mkdir(WORK_DIR)
    ....

所以在第二次迭代后我得到 OS Error, cannot create directory, directory exists。这怎么可能?如果该目录存在,则不应创建它。 PROCESS_NUM 是 MPI 等级,因此只有一个进程应该尝试创建它。是否存在某种竞争条件或锁定错误?有什么想法吗?

您需要在检查前创建完整路径名:

if not os.path.isdir(os.path.join(full_path, WORK_DIR)):

让我们使用:

os.makedirs(WORK_DIR, exist_ok=True)

我好像找到答案了,深陷架构,与python无关。

我在 mpich 中使用 SLURM 分发管理器,在其中一个节点上安装了 open-mpi 以及 mpich,造成了一些麻烦。该节点上的核心编号对于所有分配都是 0/1,导致脚本中的竞争条件导致多个核心获得相同 PROCESS_NUM