TypechoJoeTheme

MetMan's Blog

网站页面

Intel MPI运行时错误信息诊断

MetMan博 主
2023-11-18
/
0 评论
/
190 阅读
/
742 个字
/
百度已收录
11/18
本文最后更新于 2023年11月18日,已超过 306天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

笔者开发模式主要使用“Intel Fortran Compiler + Intel MPI”组合,在开发过程中经常遇到程序运行出错情况,如果了解Intel MPI输出的运行时错误信息,这对快速定位出错原因很有帮助。下面总结几种主要遇到的错误信息,内容主要来自于Intel官网Intel MPI Troubleshooting

Bad File Descriptor

错误信息

运行报错信息类似于(关键词Bad file descriptor

[mpiexec@node00] HYD_sock_write (../../../../../src/pm/i_hydra/libhydra/sock/hydra_sock_intel.c:353): write error (Bad file descriptor)
[mpiexec@node00] cmd_bcast_root (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:147): error sending cwd cmd to proxy
[mpiexec@node00] stdin_cb (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:324): unable to send response downstream
[mpiexec@node00] HYDI_dmx_poll_wait_for_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:79): callback returned error status
[mpiexec@node00] main (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:2064): error waiting for event

或者(关键词downstream from)

[mpiexec@host1] wait_proxies_to_terminate (../../../../../src/pm/i_hydra/mpiexec/intel/i_mpiexec.c:389): downstream from host host2 exited with status 255

可能原因

远程hydra_pmi_proxy进程不可用,由于:

  • 主机重启
  • 收到异常信号
  • 内存不够(out-of-memory, OOM)错误
  • 作业调度器因资源限制(比如墙钟时间限制)终止了任务

解决思路

  1. 确定错误是否可重复

重新提交作业,确定错误是否可重复,如果是节点硬件问题,作业系统分配计算资源可能会分配到其它节点上,导致错误不可重现

  1. 怀疑内存不够原因导致的,可通过以下方法排查

    • 可以请管理员查看系统日志确定作业报错原因、监控作业内存使用情况
    • 节点核数设置不用满提交作业
    • 提交到大内存作业节点

笔者使用的超算系统升级,新机器计算节点内存量配置降低了,导致模式在之前系统运行正常的移植到新机器报以上错误信息。

Bad Termination

错误信息1

=========================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   RANK 1 PID 27494 RUNNING AT node1
=   KILLED BY SIGNAL: 11 (Segmentation fault)
=========================================================================

或者

=========================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   RANK 1 PID 27494 RUNNING AT node1
=   KILLED BY SIGNAL: 8 (Floating point exception)
=========================================================================

可能原因

其中一个MPI进程被异常信号终止(比如上面的Segmentation fault或者Floating point exception)。

解决思路

这种错误不是MPI本身通信引起的,而是程序计算导致的,比如数组越界、除0等,需要排查这些错误。

错误信息2

=========================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= RANK 1 PID 20066 RUNNING AT node01
= KILLED BY SIGNAL: 9 (Killed)
=========================================================================

可能原因

其中一个MPI进程被异常信号(比如SIGTERM或者SIGKILL)终止,原因包括:

  • 主机重启
  • 收到异常信号
  • 内存不够(out-of-memory, OOM)错误
  • 作业调度器因资源限制(比如墙钟时间限制)终止了任务
  • 被进程管理器杀掉(如果其它进程在当前进程之前终止了)

    MPI应用挂起

MPI 应用程序挂起,没有任何输出。

可能原因1

应用没有正确使用MPI。

解决方法:增加-check-mpi选项运行MPI程序执行正确性检查。

可能原因2

远程服务(比如SSH)没有在所有节点运行或者没配置正确。

解决方法:检查节点远程服务,尝试连接到所有节点。

可能原因3

Intel MPI库运行时脚本不可用

解决方法:检查共享路径是否在所有节点可用。

可能原因4

MPI应用跑在不同的CPU架构上。

解决方法:设置export I_MPI_PLATFORM=<arch>,其中<arch>指定为最旧的平台。混用多个CPU架构会影响应用性能,不建议这样使用。

一般定位方法

检查节点状态

$ mpiexec -ppn 1 -n 2 -hosts node01,node02 hostname
node01
node02

不过使用作业调度器不允许指定节点。

打开Intel MPI调试选项

设置环境变量,输出更多的Intel MPI运行诊断信息。

export I_MPI_DEBUG=6
export I_MPI_HYDRA_DEBUG=on

参考资料

  1. https://www.intel.com/content/www/us/en/docs/mpi-library/developer-guide-windows/2021-6/troubleshooting.html
DEBUGintelmpi
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/76/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码