在 / 中执行时如何不以 root 身份执行 MPI
How to execute MPI not as root when executing in /
我 运行正在处理 SSH 和 MPICH 执行的一些问题。从我之前提出的一些问题来看,我能够进展到执行 mpi_hello.c 程序的地步。
作为参考,我正在按照本教程设置 MPICH:https://help.ubuntu.com/community/MpichCluster
我在根目录中创建了一个名为 clusterFiles 的目录,并在所有节点上创建了一个名为 clusterUser (clusteruser) 的用户。我导出了 clusterFiles 并在所有节点中安装了 clusterFiles。此外,我将 clusterFiles 的所有权更改为主节点上的 clusterUser。我还将 clusterUser 的主目录更改为 /clusterFiles。
我在主节点上为 clusterUser 创建了一个 ssh 密钥,并将该密钥添加到授权列表中。我在所有节点和主节点上安装了一个钥匙串,我按照指南中的说明编辑了 .bashrc(我将指南中的内容复制到 .bashrc 中)
我还在所有节点上安装了 MPICH2 和 GCC。
我为我的特定集群编辑了机器文件。
但是,当我去执行MPI hello_world.c程序时,这就是错误发生的地方。
我将指南中的代码复制并粘贴到一个.c 文件中并命名为mpi_hello.c(这是在主节点上完成的)。
在指南中,他只是将最后一部分称为mpicc [arguments]
和mpiexec [arguments]
。但是,当我去调用mpicc时,我需要sudo mpicc [arguments]
。这是我应该关心的问题还是应该这样做的正确方法?
当我 运行 mpiexec(没有 sudo)时,我收到以下错误:
clusteruser@rgcluster2blade1:~$ mpiexec -n 7 -f machinefile ./mpi_hello
[mpiexec@rgcluster2blade1] HYDU_parse_hostfile (./utils/args/args.c:323): unable to open host file: machinefile
[mpiexec@rgcluster2blade1] mfile_fn (./ui/mpich/utils.c:341): error parsing hostfile
[mpiexec@rgcluster2blade1] match_arg (./utils/args/args.c:153): match handler returned error
[mpiexec@rgcluster2blade1] HYDU_parse_array (./utils/args/args.c:175): argument matching returned error
[mpiexec@rgcluster2blade1] parse_args (./ui/mpich/utils.c:1609): error parsing input array
[mpiexec@rgcluster2blade1] HYD_uii_mpx_get_parameters (./ui/mpich/utils.c:1660): unable to parse user arguments
[mpiexec@rgcluster2blade1] main (./ui/mpich/mpiexec.c:153): error parsing parameters
这些文件是不是忘记安装了?起初,我在想我需要在 mpiexec 前面加上 sudo。因此,当我执行:sudo mpiexec [arguments]
它 "runs" 但是当我需要它以 clusteruser 身份连接时,它以 root 身份连接到 SSH 集群。
我主要担心的是他没有以 root 身份执行他的命令。我想知道是否有一个隐含的步骤,或者至少有一个我应该执行但没有执行的命令?
此外,我注意到当我尝试将 clusterFiles 的所有权更改为其他节点上的 clusterUser 时,我会收到不允许操作的错误(执行此命令时我是 root)。我的想法是,由于我更改了主节点的所有权,它传播到其他节点,因为它们具有相同的用户名。所以我实际上是在将所有权更改为自身。这是一个正确的想法还是有更多的想法?
编辑:
根据用户Zulan的建议,我检查了machinefile
的权限,有趣的是,它仍然设置为rgcluster2blade1。我决定 运行 命令 sudo chown -R clusteruser /clusterFiles
以使 clusterFiles 中的所有 files/folders 归 clusteruser 所有。我只在主节点上完成了此操作。将检查其他节点。
编辑 2:
好的,所以在检查了集群的其余部分之后(在执行整个操作之前,我现在只测试了 4 个节点)我发现其中 2 个节点正在向 clusteruser 之外的另一个用户授予权限。他们将其提供给用户渲染。我试图执行 sudo chown command
但在这两个操作上,我都收到了不允许操作的错误
作为更新。由于我发现GID和UID都乱了,所以我决定删除用户并创建一个新帐户。在做任何事情之前,我确保检查并在需要时更改用户的 UID 和 GID,以便它们在所有节点上都相同。我不记得我脑海中闪过的命令。稍后会寻找它。一旦我找到它,我会更新这个答案。
之后,我按照指南进行操作,一切正常。
我 运行正在处理 SSH 和 MPICH 执行的一些问题。从我之前提出的一些问题来看,我能够进展到执行 mpi_hello.c 程序的地步。
作为参考,我正在按照本教程设置 MPICH:https://help.ubuntu.com/community/MpichCluster
我在根目录中创建了一个名为 clusterFiles 的目录,并在所有节点上创建了一个名为 clusterUser (clusteruser) 的用户。我导出了 clusterFiles 并在所有节点中安装了 clusterFiles。此外,我将 clusterFiles 的所有权更改为主节点上的 clusterUser。我还将 clusterUser 的主目录更改为 /clusterFiles。
我在主节点上为 clusterUser 创建了一个 ssh 密钥,并将该密钥添加到授权列表中。我在所有节点和主节点上安装了一个钥匙串,我按照指南中的说明编辑了 .bashrc(我将指南中的内容复制到 .bashrc 中)
我还在所有节点上安装了 MPICH2 和 GCC。
我为我的特定集群编辑了机器文件。
但是,当我去执行MPI hello_world.c程序时,这就是错误发生的地方。
我将指南中的代码复制并粘贴到一个.c 文件中并命名为mpi_hello.c(这是在主节点上完成的)。
在指南中,他只是将最后一部分称为mpicc [arguments]
和mpiexec [arguments]
。但是,当我去调用mpicc时,我需要sudo mpicc [arguments]
。这是我应该关心的问题还是应该这样做的正确方法?
当我 运行 mpiexec(没有 sudo)时,我收到以下错误:
clusteruser@rgcluster2blade1:~$ mpiexec -n 7 -f machinefile ./mpi_hello
[mpiexec@rgcluster2blade1] HYDU_parse_hostfile (./utils/args/args.c:323): unable to open host file: machinefile
[mpiexec@rgcluster2blade1] mfile_fn (./ui/mpich/utils.c:341): error parsing hostfile
[mpiexec@rgcluster2blade1] match_arg (./utils/args/args.c:153): match handler returned error
[mpiexec@rgcluster2blade1] HYDU_parse_array (./utils/args/args.c:175): argument matching returned error
[mpiexec@rgcluster2blade1] parse_args (./ui/mpich/utils.c:1609): error parsing input array
[mpiexec@rgcluster2blade1] HYD_uii_mpx_get_parameters (./ui/mpich/utils.c:1660): unable to parse user arguments
[mpiexec@rgcluster2blade1] main (./ui/mpich/mpiexec.c:153): error parsing parameters
这些文件是不是忘记安装了?起初,我在想我需要在 mpiexec 前面加上 sudo。因此,当我执行:sudo mpiexec [arguments]
它 "runs" 但是当我需要它以 clusteruser 身份连接时,它以 root 身份连接到 SSH 集群。
我主要担心的是他没有以 root 身份执行他的命令。我想知道是否有一个隐含的步骤,或者至少有一个我应该执行但没有执行的命令?
此外,我注意到当我尝试将 clusterFiles 的所有权更改为其他节点上的 clusterUser 时,我会收到不允许操作的错误(执行此命令时我是 root)。我的想法是,由于我更改了主节点的所有权,它传播到其他节点,因为它们具有相同的用户名。所以我实际上是在将所有权更改为自身。这是一个正确的想法还是有更多的想法?
编辑:
根据用户Zulan的建议,我检查了machinefile
的权限,有趣的是,它仍然设置为rgcluster2blade1。我决定 运行 命令 sudo chown -R clusteruser /clusterFiles
以使 clusterFiles 中的所有 files/folders 归 clusteruser 所有。我只在主节点上完成了此操作。将检查其他节点。
编辑 2:
好的,所以在检查了集群的其余部分之后(在执行整个操作之前,我现在只测试了 4 个节点)我发现其中 2 个节点正在向 clusteruser 之外的另一个用户授予权限。他们将其提供给用户渲染。我试图执行 sudo chown command
但在这两个操作上,我都收到了不允许操作的错误
作为更新。由于我发现GID和UID都乱了,所以我决定删除用户并创建一个新帐户。在做任何事情之前,我确保检查并在需要时更改用户的 UID 和 GID,以便它们在所有节点上都相同。我不记得我脑海中闪过的命令。稍后会寻找它。一旦我找到它,我会更新这个答案。
之后,我按照指南进行操作,一切正常。