鲲鹏社区首页
中文
注册
高性能计算之MPI——常见问题总结

高性能计算之MPI——常见问题总结

HPC

发表于 2025/09/23

0

MPI(Message Passing Interface)是高性能计算(High Performance Computing,HPC)事实上的“ bloodstream”:它提供跨节点、可扩展、低延迟的并行通信原语,使成千上万个CPU/GPU核心得以协同求解同一科学问题;从TOP500超算到国产异构系统,几乎所有HPC应用——气象模拟、分子动力学、AI训练——都依赖MPI在分布式内存间高效搬运数据,因此“无MPI、不HPC”已成为高性能计算领域的基本共识。

但几乎所有的HPC问题都会在MPI层暴露给用户,因为针对MPI的问题做个总结供大家参考。


1. 最常见的MPI报错问题是在加入各种参数之后产生的,可以通过将参数删除掉,回归原有的默认值尝试运行看程序是否正常运行。
由于自研的ucg模块在某些场景下不支持导致运行报错,增加 -mca coll ^ucg可运行,说明该程序OMP支持运行但是HMPI不支持运行或者设置UCG的参数出错,需进一步排查。

2. 作业进程数过大时, 报错“there are not enough slots available...”如图所示:


此时所起进程已超过所选节点的总核数,增加节点或者减少进程数。


3. 多节点运行时发生以下报错

第一步、检查环境变量时不是正常加载,在多节点运行的时候加上参数-x PATH -x LD_LIBRARY_PATH向发起之外的节点传输环境变量;
第二、检查指定的多节点是否挂载上了共享盘,且共享盘是否一致。

4. 在多节点的场景下运行程序,偶尔会出现timeout报错,如下图所示:

第一步、使用ping等检测工具,检查节点之间的连通性,ping通情况以及免密配置情况;
第二步、检查节点网卡是否被DOWN掉了;
第三步、在运行指令中加入“-x UCX_UD_VERBS_TIMER_BACKOFF=1.0 -x UCX_UD_VERBS_TIMER_TICK=100ms -x UCX_UD_VERBS_TIMEOUT=30s”参数(参数可以独立添加),如果能够正常运行,属于网络波动问题或者硬件线路问题。
其中,第三步的参数第一个为设置下一次的超时时间是上一次的倍数,第二个参数为设置第一次超时时间设置,第三个参数为将默认的超时阈值设置为30s。


5. 多节点运行mpirun的时候报某个文件无法找到或打开,如下图所示:

第一步、检查LD_LIBRARY_PATH是否正常加载环境变量;
第二步、检查在各个节点上是否存在该文件;
第三步、检查在各个节点上面执行文件是否是有可执行权限;
第四步、如果是系统缺少相关文件,下载相关缺少的系统文件。

6. 多节点运行mpirun的时候不是报错提示,而是mpi启动失败提示如图所示:

检查运行的指定节点之间免密是否有一两个节点没有配置成功,ORTE报错为mpi程序未在其他节点上启动成功,所以检查免密配置是否正确。


7. 多节点运行mpirun的时候提示“Name or service not known”,如下图所示:


检查rankfile和hostfile,这是由于在指定节点环境的时候主机名错误导致的错误。

8. 单节点内,不同进程使用不同网卡对打;多节点时,相同指令部分节点提示错误“ucp_ep_create(...)failed:Destination is unreachable....”
如图所示错误提示:

ep在与对端建链时,由于网络问题导致链接请求无法达到对端,解决方案如下:
6.1、单节点内:
第一步、“ip a”检查使用的网卡是不是在同一个网络平面上,以免网络不通;
第二步、检查节点内网卡是否“down”;
第三步、检查使用的通信类型是否是ucx和网卡支持的类型。
6.2、多节点时:
第一步、将报错提示最开始的报错提示对比本篇中提到的错误提示对比找到相同的情况。多节点运行的时候,由于报错提示太多只关注后面的错误提示,但是后面的错误提示一般都是最开始的错误提示引起的,所以关注最开始的错误提示很重要。
第二步、错误提示中会打印“hostname”这为提示错误的对端节点名称,切换到对应的节点上检查网络配置、网卡配置是否有问题。

9. 由于网卡配置引起的超时报错问题,错误提示“connect ....... failed: connection timed out”
在多节点运行mpi程序的时候,偶尔会遇到的问题,一般出现在bios更新或者节点下电重启之后,区别于第8点中会显示hostname,该报错不会显示hostname,如下图所示:

第一步、检查各个端到端之间的连通性;
第二步、如果选择的通信类型是rc,使用RoCE网络,可能是RoCE网络没有配置,网口没有指定IP地址,通过show_gid命令检查网口有没有配置IP地址,下图为有IP地址的show_gid打印提示,无ip地址的缺少一个。

10. 当任务压力过大,或者节点有较多用户使用的时候,运行MPI作业提示网络设备内存无法分配,如下图所示:


该问题为某一个网卡所在numa的内存不足,无法给网卡相应的内存,导致网卡无法正常运行,需检查内存是否在位或进行内存扩容。

11. 在使用“-x UCX_NET_DEVICES”指定某一网卡的时候,提示“network device ... is not avaliable”。
解决方案为使用rdma link指令检查网卡名称以及是否能够使用该网卡,将“UCX_NET_DEVICES”后面网卡进行替换。

12. 指定网络类型错误,提示指定的网络通信方式不可用,如下图所示:


原因为这是在mpirun运行的时候UCX_TLS参数选择了网卡不支持的网络类型,解决方案可使用“ucx_info -d”查看网卡类型以及网络协议,如下图所示:


13. 多节点的点对点通信场景下,可相互ping通,免密配置成功,共享盘正常,网卡配置没有问题(但perftest测试失败),mpi环境参数正确,mpirun在每个节点上能够监视到运行,过一会时间后错误提示如下图所示:

解决方案为:加上subnet参数。

14. 有时在使用osu_iallgatherv或者osu_iallgather以及其他osu测试程序的时候小包场景能够正常的打印测试结果,但是当包长好过某一大小的时候会出现“UCP request timeout”的错误提示。该问题可能是bcopy进行切包而默认的接收队列长度不足导致有些被切的包没有收到导致的。在运行指令中加上“-x UCX_RNDV_THRESH=8192(或16k)”,能够解决该问题。