gpt4 book ai didi

MPI 生成 : Not enough slots available/All which nodes are allocated for this job are already filled

转载 作者:行者123 更新时间:2023-12-02 04:40:19 27 4
gpt4 key购买 nike

我正在尝试使用 MPI 的 Spawn 功能来运行也使用 MPI 的子进程。我正在使用 MPI 2x 和动态进程管理。

我有一个在 python 中运行的主进程(也许我应该说“主程序”)(通过 mpi4py ),它使用 MPI 在内核之间进行通信。这个主进程/程序在 16 个内核上运行,它也会使 MPI_Comm_spawn_multiple调用 C 和 Fortran 程序(也使用 MPI)。当 C 和 Fortran 进程运行时,主 python 程序会等待它们完成。

更明确一点,主 python 程序主要做两件事:

  • 使用 MPI 对步骤 (2) 中的生成进行预处理。 MPI_Barrier在此预处理之后调用以确保所有 rank 在步骤 (2) 开始之前都已完成其预处理。请注意,预处理分布在所有 16 个内核上,并且在预处理结束时,结果信息将传递回根等级(例如 rank == 0)。
  • 在预处理之后,root rank 产生 4 个 worker,每个 worker 使用 4 个内核(即需要所有 16 个内核同时运行所有 4 个进程)。这是通过 MPI_Comm_spawn_multiple 完成的这些工作人员使用 MPI 在他们的 4 个核心内进行通信。在主python程序中,只有rank == 0产生 C 和 Fortran 子进程,以及一个 MPI_Barrier在所有等级的产卵后调用,以便所有 rank != 0核心等待,直到它们继续执行之前产生的进程完成。
  • 在 for 循环中多次重复 (1) 和 (2)。


  • 我遇到的问题 是如果我使用 mpiexec -np 16要启动主 python 程序,所有内核都被主程序占用,我收到错误消息:

    All nodes which are allocated for this job are already filled.



    当程序遇到 MPI_Comm_spawn_multiple线。

    如果我对 -np 使用小于 16 的任何其他值,然后只分配了一些内核,一些内核可用(但我仍然需要全部 16 个),所以我得到了类似的错误:

    There are not enough slots available in the system to satisfy the 4 slots that were requested by the application: /home/username/anaconda/envs/myenvironment/bin/python

    Either request fewer slots for your application, or make more slots available for use.



    所以看起来即使我要运行 MPI_Barrier在步骤 (2) 中阻塞直到产生的进程完成,MPI 仍然认为这些内核正在被使用并且不会在它们之上分配另一个进程。有没有办法解决这个问题?

    (如果答案是主机文件,能否请您为我解释一下?我不理解完整的想法以及它们在这里可能如何有用。)

    最佳答案

    这是这个问题的海报。我发现我可以使用 -oversubscribe作为 mpiexec 的参数为了避免这些错误,但正如祖兰在他的评论中提到的那样,这可能是一个糟糕的决定。

    此外,我不知道内核是否像我希望的那样被订阅。例如,可能所有 4 个 C/Fortran 进程都在相同的 4 个内核上运行。我不知道该怎么说。

    关于MPI 生成 : Not enough slots available/All which nodes are allocated for this job are already filled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087327/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com