MPI要求我将mpi程序部署到每台机器上。目前,我把mpi程序放在nfs中,但是这个方法有2个问题,一个是nfs有延迟问题,另一个是nfs不适合大型集群。我知道我可以使用一些linux shell命令将我的程序同步到每个节点,但看起来不太方便。特别是,当我经常更改程序时。有没有简单的方法呢?
答案 0 :(得分:0)
在大型集群中,NFS或任何其他网络归档系统没有任何问题。它只是意味着您的文件服务器没有为作业调整大小。如果用ssh,ftp,脚本等任何东西替换NFS而不改变其他东西,我认为这不会产生任何重大影响。此外,如果加载时间是整个运行时的一个重要且令人讨厌的组件,那么为什么首先使用MPI呢?
好吧,有足够的玩恶魔提倡。您可以做的一件事是让节点以二叉树类型排列将程序加载到其他节点上。您需要一个脚本,将可执行文件复制到另外两个节点以及脚本副本,启动该脚本在这些节点上异步运行,然后在本地运行可执行文件。结果将是复制和运行在网络上传播的连锁反应。唯一困难的一点是选择要复制的节点,以便每个节点只访问一次。它会快得多。答案 1 :(得分:0)
根据应用程序的性质和NFS网络的性质,对MPI实现和应用程序使用共享文件系统“应该”能够以合理的性能进行扩展。请记住,节点级别存在一些NFS缓存,因此同一节点上的多个排名不必遍历网络以访问文件。
一般而言,我倾向于建议在大约128个节点或1024个级别停用NFS以支持本地安装。如果使用10GigE,IPoIB或使用SFS或GPFS等高性能文件系统提供NFS,则该建议会更改。
如果您致力于本地安装,那么像rsync或scp这样的工具是分配这些位的好选择。编写最终结果。您甚至可以将tar共享和远程命令(例如ssh,clush)解压缩到本地光盘。 “解决方案”只需要坚固,不需要抛光或优雅。
答案 2 :(得分:0)
除非你有一个超过100-200个节点的集群,否则我也会说这个用例中的NFS应该没问题。
如果您只想要一个轻量级工具来进行多节点并行操作,我建议pdsh。 pdsh是HPC集群上非常常见的工具。它包含一个名为pdcp
的命令,用于执行并行节点副本,即
pdcp -w node[00-99] myfile /path/to/destination/myfile
节点名是node00,node01,... node99。
同样,您使用pdsh
命令在所有节点上并行运行命令。即,
pdsh -w node[00-99] /path/to/my/executable
或者,如果你正在寻找一些不那么特别的东西来做这些操作,我可以推荐Ansible作为一个简单轻量级的配置管理和部署工具。开始使用pdsh并不是那么简单,但从长远来看可能更容易管理......
例如,一个简单的Ansible playbook将tarball复制到所有节点,提取它,然后执行二进制文件可能看起来像:
---
- hosts: computenodes
user: myname
vars:
num_procs: 32
tasks:
- name: copy and extract tarball to deployment location
action: unarchive src=myapp.tar.gz dest=/path/to/deploy/
- name: execute app
action: command mpirun -np {{num_procs}} /path/to/deploy/myapp.exe