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
。
我有一个复杂的 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
。