问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MPI分布式任务优化:mpirun参数解析与实战指南

创作时间:
作者:
@小白创作中心

MPI分布式任务优化:mpirun参数解析与实战指南

引用
CSDN
12
来源
1.
https://blog.csdn.net/qq_35571432/article/details/78501612
2.
https://blog.csdn.net/weixin_52190646/article/details/136543759
3.
https://blog.csdn.net/a_yi_gu/article/details/137111276
4.
https://wenku.csdn.net/answer/6xtj5cx8r6
5.
https://m.blog.csdn.net/m0_48594855/article/details/144005227
6.
https://blog.csdn.net/Androiddddd/article/details/140602465
7.
https://cloud.baidu.com/article/3220832
8.
https://learn.microsoft.com/zh-cn/azure/virtual-machines/setup-mpi
9.
https://docs.ucloud.cn/gpu/user_guide/nccl_performance_tuning?id=nccl%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98
10.
https://learn.microsoft.com/zh-cn/azure/machine-learning/how-to-train-distributed-gpu?view=azureml-api-2
11.
https://wuli.wiki/online/MPIcpp.html
12.
https://docs.ucloud.cn/gpu/user_guide/A800_nccl?id=gpu%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87

在高性能计算领域,MPI(Message Passing Interface)作为分布式内存并行化的标准库,被广泛应用于大规模科学计算和工程模拟。而mpirun作为MPI的运行时系统,负责启动并行程序并管理进程间的通信。正确配置mpirun的参数对于优化系统性能至关重要。本文将重点介绍-mca plm_rsh_args参数的使用场景和效果,并扩展到其他相关参数的优化建议。

01

MPI与mpirun基础

MPI通过消息传递机制实现进程间的通信与协作,支持跨多个计算节点的并行计算。mpirun作为MPI的运行时系统,负责启动并行程序并管理进程间的通信。它支持多种任务调度系统,如PBS、LSF、SLURM等,并通过-host、-ppn等参数控制进程分布。

02

核心参数详解

-mca plm_rsh_args参数

-mca plm_rsh_args是OpenMPI中用于配置进程管理器(PLM,Process Launch and Management)的参数,通过它可以传递额外的选项给远程shell(如ssh或rsh),以满足特定需求。常见的用法包括:

  1. 指定SSH端口:

    -mca plm_rsh_args "-p 31028"
    

    这会告诉MPI使用31028端口进行SSH连接,适用于非默认端口的情况。

  2. 设置其他SSH参数:

    -mca plm_rsh_args "-i /path/to/identity_file -o StrictHostKeyChecking=no"
    

    可以添加身份验证文件或禁用严格主机密钥检查等选项。

其他关键参数

除了-mca plm_rsh_args,还有几个参数对MPI性能有重要影响:

  • -mca pml ob1:选择点对点通信模块
  • -mca btl ^openib:禁用InfiniBand通信
  • -mca coll_hcoll_enable 0:禁用混合集体通信

这些参数可以根据具体的应用场景和硬件环境进行调整,以达到最佳性能。

03

优化建议

选择合适的MPI实现

在Azure等云平台上,推荐使用HPC-X或OpenMPI等高性能MPI实现。HPC-X使用UCX框架针对InfiniBand接口进行了优化,能够充分发挥Mellanox InfiniBand硬件的优势。而OpenMPI则以其广泛的兼容性和稳定性著称。

进程布局与绑定

通过--map-by参数可以优化MPI进程的布局。例如:

mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE

其中:

  • NPROCS:指定MPI进程的数量
  • HOSTFILE:指定包含主机名或IP地址的文件
  • NUMBER_PROCESSES_PER_NUMA:每个NUMA域中的MPI进程数
  • NUMBER_THREADS_PER_PROCESS:每个MPI进程的线程数

环境变量配置

通过设置环境变量可以进一步优化MPI性能。例如:

export I_MPI_JOB_RESPECT_PROCESS_PLACEMENT=off

这将关闭默认的per-host process placement,使-ppn参数生效。

04

案例分析

在GPU云主机中进行NCCL性能调优时,-mca plm_rsh_args参数发挥了重要作用。例如:

mpirun --allow-run-as-root --oversubscribe -np 8 --bind-to numa -H {内网IP地址} -mca plm_rsh_args "-p 22 -q -o StrictHostKeyChecking=no" -mca coll_hcoll_enable 0 -mca pml ob1 -mca btl ^openib -mca btl_openib_if_include mlx5_0:1,mlx5_1:1,mlx5_2:1

这个命令中包含了多个优化参数,通过合理配置可以显著提升分布式训练任务的性能。

通过以上参数的合理配置和优化,可以充分发挥MPI框架的优势,实现大规模分布式计算任务的高效执行。无论是科学研究还是工业应用,掌握这些优化技巧都将为开发者带来显著的性能提升。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号