我一直在寻找一种在我的 Mac 上使用 mpi 的方法,但一切都非常先进。
我已经成功安装了 open-mpi 使用
brew install open-mpi
我有 .c 文件可供编译和运行。当我输入:
mpicc -o <file> <file.c>
随后
mpirun <file>
我明白了
[xxxxx-MacBook-Pro.local:13623] [[44919,0],0] ORTE_ERROR_LOG:错误 文件 orted/pmix/pmix_server.c 第 262 行的参数
[xxxxx-MacBook-Pro.local:13623] [[44919,0],0] ORTE_ERROR_LOG: 错误 文件 ess_hnp_module.c 第 666 行的参数看起来 orte_init 由于某种原因失败了;你的并行进程 很可能会中止。并行进程的原因有很多 orte_init 期间可能会失败;其中一些是由于配置或 环境问题。此故障似乎是内部故障; 这是一些附加信息(可能仅与 开放 MPI 开发者):
pmix 服务器初始化失败
--> 返回值错误参数(-5)而不是 ORTE_SUCCESS
当我输入时,我也收到相同的消息:
mpirun -np 2 <file>
我做错了什么?
如果我是你,我会做以下事情:
Open MPI 的安装相当简单
https://www.open-mpi.org/software/ompi/v2.0/
> tar xf openmpi-2.0.2.tar
> cd openmpi-2.0.2/
> ./configure --prefix=$HOME/opt/usr/local
> make all
> make install
> $HOME/opt/usr/local/bin/mpirun --version
mpirun (Open MPI) 2.0.2
Report bugs to http://www.open-mpi.org/community/help/
您可以使用超级简单的 hello world 进行测试
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int rank;
int world;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &world);
printf("Hello: rank %d, world: %d\n",rank, world);
MPI_Finalize();
}
一切就绪后,只需编译并运行代码即可
$HOME/opt/usr/local/bin/mpicc -o hello ./hello.c
$HOME/opt/usr/local/bin/mpirun -np 2 ./hello
Hello: rank 0, world: 2
Hello: rank 1, world: 2
在 macOS 上完美运行
更新
如果您正在 macOS 上寻找
MPI
相关环境,我建议您查看 modules
的概念。
更新
提到的博客条目有更新版本:
基于@Oo.oO 提供的答案。
安装
OpenMPI
。brew
安装。
brew install openmpi
在 Mac OS X / MacOS Sierra 的某些版本上,默认的临时目录位置足够长,应用程序很容易为超过允许的最大文件名长度的临时文件创建文件名,这可能会导致此错误。 所以你应该使用
export TMPDIR=/tmp
设置临时目录
更多详细信息请参见此处 https://www.open-mpi.org/faq/?category=osx
如果您安装了 anaconda,这对我来说是最快的选择:
conda install mpi4py openmpi
我注意到在执行过程中 pmix 提供了一个不必要的异常:
PMIX ERROR: ERROR in file gds_ds12_lock_pthread.c at line 206
为了防止这种情况,在执行主文件之前,请始终在终端提示符上键入以下内容:
export PMIX_MCA_gds=hash
这有助于减轻 pmix 噪音,并且必须在每次训练中重复。
注意: 在 mac 中,pmi 允许的最大槽数默认为 2。 “槽”是 Open MPI 术语,表示可分配单元,我们可以在其中 启动一个进程。这决定了我们可以在代码中运行指令的次数。 要扩展插槽数量,请执行以下步骤:
1.创建一个任意名称的主机文件
2.内写:
localhost slots = <#>
其中#=否。需要的插槽数。
编译时在终端提示符下写入以下内容:
mpicc -hostfile -<filename>
在终端提示符上运行以下内容时:
mpirun -hostfile -np <#>
虽然对最后一个注释感到厌倦,但它并不经常需要,并且主机文件的文件扩展可能会成为某些体系结构的问题,例如我自己的x86。