Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
库伯内特斯与MPI_Mpi_Kubernetes_Openmpi - Fatal编程技术网

库伯内特斯与MPI

库伯内特斯与MPI,mpi,kubernetes,openmpi,Mpi,Kubernetes,Openmpi,我想在Kubernetes群集上运行MPI作业。背景是,我实际上正在运行一个现代的、很好的容器化应用程序,但部分工作负载是一个遗留的MPI作业,短期内不会重新编写,我希望尽可能将其融入kubernetes的“世界视图” 最初的一个问题是:有没有人成功地在kube集群上运行MPI作业?我看到过让MPI作业在docker容器中运行的工作,但他正在沿着docker swarm的道路前进(每个容器中都运行使用Consor的对等发现),我想坚持使用kubernetes(它已经知道所有对等体的信息),并从外

我想在Kubernetes群集上运行MPI作业。背景是,我实际上正在运行一个现代的、很好的容器化应用程序,但部分工作负载是一个遗留的MPI作业,短期内不会重新编写,我希望尽可能将其融入kubernetes的“世界视图”

最初的一个问题是:有没有人成功地在kube集群上运行MPI作业?我看到过让MPI作业在docker容器中运行的工作,但他正在沿着docker swarm的道路前进(每个容器中都运行使用Consor的对等发现),我想坚持使用kubernetes(它已经知道所有对等体的信息),并从外部将这些信息注入容器。我可以完全控制应用程序的所有部分,例如,我可以选择使用哪个MPI实现

关于如何进行,我有几个想法:

  • 包含slurm和应用程序代码的fat容器->填充 slurm.conf包含容器中对等方的适当信息 启动->使用srun作为容器入口点启动作业

  • 只有OpenMPI(无slurm)的更薄容器->填充 容器中包含外部信息的rankfile(由提供 kubernetes)->使用mpirun作为容器入口点

  • 一种更精简的方法,我基本上通过 设置一些环境变量(例如OpenMPI-ORTE变量)-> 直接运行mpicc的二进制文件(它将在其中找到对等文件) (通过环境变量)

  • 其他选择

  • 灰心丧气


  • 我知道,尝试将MPI等“已建立”的工作流与kubernetes和容器的“新热点”相结合有点阻抗不匹配,但我只是在走错路之前寻找指针/陷阱。如果什么都不存在,我很乐意破解一些东西并将其推回到上游。

    假设您不想使用特定于硬件的MPI库(例如任何使用直接访问通信结构的东西),我会选择选项2

  • 首先,为mpirun实现一个包装器,用于填充必要的数据 使用kubernetes API,如果使用 服务(可能是个好主意),也可以刮除暴露在外的吊舱 直接连接端口

  • 添加某种形式的检查点程序,可用于 启动实际运行代码之前的“会合”同步(I 不知道MPI处理短暂节点的效果如何)。这是为了 确保mpirun启动时有一组稳定的POD可供使用

  • 最后用必要的代码构建一个容器 猜测
    mpirun
    的SSH服务用于启动中的进程 其他豆荚


  • 另一个有趣的选择是使用有状态集,甚至可能与SLURM-inside一起运行,它实现了在kubernetes上运行的MPI机器的“虚拟”集群

    这为每个节点提供了稳定的主机名,这将减少发现和跟踪状态的问题。您还可以为容器的本地工作文件系统使用有状态分配的存储(通过一些工作,可以使其始终引用相同的本地SSD)


    另一个好处是,它可能对实际应用程序的侵入性最小。

    我在Kubernetes上尝试了几天MPI作业,并使用
    dnsPolicy:None
    dnsConfig
    CustomDNS=true
    功能门)解决了这个问题

    我把我的舱单(如掌舵图)推到这里


    我希望这会有所帮助。

    我怀疑选项3是否有效。openmpi的
    orterun
    (也称为
    mpirun
    mpiexec
    )不仅仅是多次启动可执行文件。它充当职级之间的中央信息代理。选项2似乎是最合理的。是的,自从我提出这个问题以来,在库伯内特斯有两种新的方法可以做到这一点。不过,我还没有机会尝试一下:)@ben你能告诉我你在评论中提到的这些新方法吗?非常感谢。好吧,这是一种即兴的评论,但我主要指的是用于设置基础设施的helm charts和十四行诗(虽然我从来没有正确地完成过),我的一个学生使用方法2在集群中制作裸docker容器(没有swarm/kubernetes,由Ansible提供),并取得了一些成功。看见