PMI.md
September 8, 2021 · View on GitHub
PMI: Process management interface,是在并行计算领域中,用来做进程管理的接口
概念
Process management system 的作用:
- 启动一个并行的程序,里面会有很多进程,比如成千上万
- 提供进程之间交换信息来容许互相通信的机制
MPICH2 和它的变种通过一个精心设计的接口: PMI 来实现上述,用标准化的方式让不同的进程管理系统能够和 MPI 库之间通信。比如在 MPICH2 内部使用的 Hydra,它就是一个 Process management system
PMI 除了和 MPICH2 类似这种MPI 的实现配合之外,还可以和外部的进程管理比如 SLURM 等配合
在论文的模型里,process management 主要由三个部分组成:
- 并行编程库,比如 MPI2
- PMI 库
- process manager
process manager 和 PMI 需要解耦合. process manager 是一个逻辑上的集中式进程(但实践中经常是几个进程组成),他负责:
- 进程启动(包括启动/停止,提供每个进程需要的环境信息,标准输入/输出/错误的转发,传播信号)
- 在并行程序的多个进程中提供信息交换(比如设置通信通道)
现有的 process managers: PBS,SUN 和 SSH

PMI Library 实现了 PMI API。PMI的实现,依赖于系统自身。比如 IBM Blue General,使用系统的一些特性来提供 PMI 服务。在廉价集群里,PMI 库可以和 process manager 之间通过 比如 TCP 通信来进行交流。而 PMI2/1 里有个预定义的 “wire protocol”,就是用 scokets 接口提供数据交换的。使用这个 wire protocol,那么任何实现 PMI wire protocol 的程序都可以和任何 PMI 进程管理的实现之间进行交互,是兼容的
PM2是解决了 PM1 里的一些扩展性问题,主要是没考虑到大规模 HPC 集群的情况
PMI 定义了一些可移植的接口,可以用来让 MPI 进程put和get key/value对。这样 P0, P1 两个进程可以把自己的信息写入进去。那此时 PMI 肯定给出了一个联系地址,可以让大家都联系它,put 和 get
PM2 里
-
提供了可扩展的数据交换方法,是 k/v 的。提供了 job attribute, database information scope 等减少 api 复杂度的优化
-
还提供了动态进程:每个 job 里包含多个程序
-
容错:respawning processes,可以代替之前同一个group 里的老进程
问题:
- PMI 和 MPI 的区别和联系:上面的图看懂了就明白了。PMI 可以给任何并发编程模型,是通用的
- 与 SLurm 这类资源管理/调度的程序的兼容性如何做到的?也是上面的图。Slurm 是 process manager ,里面实现了 pmi2,就是用来给 MPI 等通信用的
Refercence:
- PMI: A Scalable Parallell Process-Management Interface for Extreme-Scale Systems
- Design of high performance MVAPICH2: MPI2 over InfiniBand
- Intel MPI: