searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于RoCE的OpenMPI环境构建

2024-12-09 09:30:32
7
0

1 背景和目的

高性能计算(HPC, High Performance Computing)往往依赖RDMA(Remote Direct Memory Access)网卡和IB(InfiniBand)网络来实现高带宽和低时延的通信。为了惠及大量部署在大型数据中心和云计算环境中的高性能计算业务,RDMA协议被应用到以太网,衍变为RoCE(RDMA over Converged Ethernet),目前比较广泛部署的是RoCEv2协议。大部分高性能计算应用基于MPI(Message Passing Interface)接口开发,而OpenMPI是最流行的实现MPI接口的开源软件库。本文描述如何部署一个基于RoCE网络的OpenMPI环境,方便基于OpenMPI的高性能应用的开发和测试。

2 环境构建详述

本章详细描述基于RoCEOpenMPI的环境部署步骤及其背后逻辑。

2.1 硬件环境

硬件环境要求如下:

1) 至少两台配备RoCE网卡的服务器,RoCE网卡之间IP网络联通。RDMA原生IB网络是一个无损(lossless)网络,不易丢包,而以太网是一个有损(lossy)网络,易发生丢包重传。RDMAgo-back-N重传机制会导致性能的急剧下降且收敛较慢,所以RoCE网卡和以太网交换机往往配置PFC(Priority Flow Control)DCQCN(Data Center Quantized Congestion Notification)等流量控制机制以达到最佳效果。

2.2 系统环境

系统环境要求如下:

1) 安装Linux发行版,比如ctyunos 2.0.1

2) 安装RoCE网卡驱动。使用perftest工具比如ib_send_bw测试RoCE网卡驱动是否工作正常。

3) 配置SSH免密。因为mpi控制器需要无密码访问所有的服务器以启动mpi进程,所以每台服务器需要创建密钥对并同步公钥到其他服务器:

# ssh-keygen -t rsa

# ssh-copy-id root@<peer_ip>

4) 配置网络文件系统(NFS, Network File System)。为了达到软件部署一次,到处使用的效果,也为了测试文件IO相关的MPI接口,我们可以部署如下:

每台机器上安装nfs相关软件

# yum install nfs-utils

并创建共享目录

# mkdir /mnt/share

一台机器作为服务器,配置/etc/exports文件内容如下

/mnt/share *(rw,no_root_squash)

启动服务

# systemctl start nfs-server

其余机器作为客户端,挂载目录

# mount t nfs <server_ip>:/mnt/share /mnt/share

2.3 软件环境

本文采用openmpi-4.1.6版本,为了简单部署,直接对接RDMA驱动,而不必额外部署UCX(Unified Communication X, 。另外,部署IMB(Intel MPI Benchmarks)简单测试MPI接口。软件环境的要求如下:

1) Openmpi-4.1.6的编译依赖automake-1.15。如果没有automake-1.15,从任意一台服务器下载ftp.gnu.org/gnu/automake/automake-1.15.tar.gz/mnt/share

# tar zxvf automake-1.15.tar.gz

# cd automake-1.15;./configure;make;make install

2) 从任意一台服务器下载

download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.gz/mnt/share

# tar zxvf openmpi-4.1.6.tar.gz

# cd openmpi-4.1.6;mkdir build; cd build

# ../configure \

--prefix=/mnt/share \

--enable-debug \

--with-verbs=<rdma-core root directory> \

--with-verbs-libdir=<rdma-core library directory> \

--without-ucx

# make -j; make install

3) 任意一台服务器下载

github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz/mnt/share

# tar zxvf IMB-v2021.8.tar.gz

# cd mpi-benchmarks-IMB-v2021.8

# CC=/mnt/share/bin/mpicc CXX=/mnt/share/bin/mpicxx CXXFLAGS=-fopenmp make

3 简单测试

在任一服务器上执行PingPong测试用例:

/mnt/share/bin/mpirun \

--allow-run-as-root \

--mca btl openib \

--mca btl_openib_receive_queues P,65536,1024,1008,64 \

--host <host1_ip>,<host2_ip>,... \

/mnt/share/mpi-benchmarks-IMB-v2021.8/IMB-P2P PingPong -iter 1000

mpirun会在每台参与的服务器上启动MPI应用。其中MPI参数包括

1) --allow-run-as-root表示允许以root身份运行,默认不允许以root身份运行。

2) --mca btl openib表示OpenMPI库底层传输使用ibv接口,即RDMA网络。

3) --mca btl_openib_receive_queues表示RDMA队列的配置信息。

4) --host表示参与的主机列表。

/mnt/share/mpi-benchmarks-IMB-v2021.8/IMB-P2P表示MPI应用,这里是IMB-P2P测试套件。以下是IMB-P2P的参数:

1) PingPong表示执行套件中的用例PingPong

2) -iter表示用例通信不同长度的消息的条数。

执行结果示例如下:

#----------------------------------------------------------------

# Benchmarking PingPong

# #processes = 2

#----------------------------------------------------------------

       #bytes #repetitions      t[usec]   Mbytes/sec      Msg/sec

            0         1000        10.20         0.00        98012

            1         1000        10.22         0.10        97847

            2         1000        10.21         0.20        97867

            4         1000        10.22         0.39        97756

            8         1000        10.23         0.78        97725

           16         1000        10.24         1.56        97639

           32         1000        10.26         3.12        97393

           64         1000        10.30         6.21        97017

          128         1000        10.45        12.25        95682

          256         1000        10.63        24.08        94066

          512         1000        10.89        46.98        91748

         1024         1000        11.31        90.50        88375

         2048         1000        12.24       167.24        81660

         4096         1000        14.90       274.79        67088

         8192         1000        16.68       490.79        59911

        16384         1000        36.35       450.73        27510

        32768         1000        41.31       793.08        24203

        65536         1000        53.68      1220.75        18627

       131072         1000        78.73      1664.82        12702

       262144         1000       129.58      2022.95         7717

       524288         1000       231.24      2267.28         4324

      1048576          800       438.93      2388.92         2278

      2097152          400       852.02      2461.27         1174

      4194304          200      1677.19      2500.57          596

结果第1列表示消息的长度。

结果第2列表示消息的条数。

结果第3列表示平均每条消息的单程耗时,单位微妙。

结果第45列表示测试期间的带宽,分别的单位为每秒多少MB和每秒多少条消息。

0条评论
0 / 1000
huaxiang
5文章数
1粉丝数
huaxiang
5 文章 | 1 粉丝
原创

基于RoCE的OpenMPI环境构建

2024-12-09 09:30:32
7
0

1 背景和目的

高性能计算(HPC, High Performance Computing)往往依赖RDMA(Remote Direct Memory Access)网卡和IB(InfiniBand)网络来实现高带宽和低时延的通信。为了惠及大量部署在大型数据中心和云计算环境中的高性能计算业务,RDMA协议被应用到以太网,衍变为RoCE(RDMA over Converged Ethernet),目前比较广泛部署的是RoCEv2协议。大部分高性能计算应用基于MPI(Message Passing Interface)接口开发,而OpenMPI是最流行的实现MPI接口的开源软件库。本文描述如何部署一个基于RoCE网络的OpenMPI环境,方便基于OpenMPI的高性能应用的开发和测试。

2 环境构建详述

本章详细描述基于RoCEOpenMPI的环境部署步骤及其背后逻辑。

2.1 硬件环境

硬件环境要求如下:

1) 至少两台配备RoCE网卡的服务器,RoCE网卡之间IP网络联通。RDMA原生IB网络是一个无损(lossless)网络,不易丢包,而以太网是一个有损(lossy)网络,易发生丢包重传。RDMAgo-back-N重传机制会导致性能的急剧下降且收敛较慢,所以RoCE网卡和以太网交换机往往配置PFC(Priority Flow Control)DCQCN(Data Center Quantized Congestion Notification)等流量控制机制以达到最佳效果。

2.2 系统环境

系统环境要求如下:

1) 安装Linux发行版,比如ctyunos 2.0.1

2) 安装RoCE网卡驱动。使用perftest工具比如ib_send_bw测试RoCE网卡驱动是否工作正常。

3) 配置SSH免密。因为mpi控制器需要无密码访问所有的服务器以启动mpi进程,所以每台服务器需要创建密钥对并同步公钥到其他服务器:

# ssh-keygen -t rsa

# ssh-copy-id root@<peer_ip>

4) 配置网络文件系统(NFS, Network File System)。为了达到软件部署一次,到处使用的效果,也为了测试文件IO相关的MPI接口,我们可以部署如下:

每台机器上安装nfs相关软件

# yum install nfs-utils

并创建共享目录

# mkdir /mnt/share

一台机器作为服务器,配置/etc/exports文件内容如下

/mnt/share *(rw,no_root_squash)

启动服务

# systemctl start nfs-server

其余机器作为客户端,挂载目录

# mount t nfs <server_ip>:/mnt/share /mnt/share

2.3 软件环境

本文采用openmpi-4.1.6版本,为了简单部署,直接对接RDMA驱动,而不必额外部署UCX(Unified Communication X, 。另外,部署IMB(Intel MPI Benchmarks)简单测试MPI接口。软件环境的要求如下:

1) Openmpi-4.1.6的编译依赖automake-1.15。如果没有automake-1.15,从任意一台服务器下载ftp.gnu.org/gnu/automake/automake-1.15.tar.gz/mnt/share

# tar zxvf automake-1.15.tar.gz

# cd automake-1.15;./configure;make;make install

2) 从任意一台服务器下载

download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.gz/mnt/share

# tar zxvf openmpi-4.1.6.tar.gz

# cd openmpi-4.1.6;mkdir build; cd build

# ../configure \

--prefix=/mnt/share \

--enable-debug \

--with-verbs=<rdma-core root directory> \

--with-verbs-libdir=<rdma-core library directory> \

--without-ucx

# make -j; make install

3) 任意一台服务器下载

github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz/mnt/share

# tar zxvf IMB-v2021.8.tar.gz

# cd mpi-benchmarks-IMB-v2021.8

# CC=/mnt/share/bin/mpicc CXX=/mnt/share/bin/mpicxx CXXFLAGS=-fopenmp make

3 简单测试

在任一服务器上执行PingPong测试用例:

/mnt/share/bin/mpirun \

--allow-run-as-root \

--mca btl openib \

--mca btl_openib_receive_queues P,65536,1024,1008,64 \

--host <host1_ip>,<host2_ip>,... \

/mnt/share/mpi-benchmarks-IMB-v2021.8/IMB-P2P PingPong -iter 1000

mpirun会在每台参与的服务器上启动MPI应用。其中MPI参数包括

1) --allow-run-as-root表示允许以root身份运行,默认不允许以root身份运行。

2) --mca btl openib表示OpenMPI库底层传输使用ibv接口,即RDMA网络。

3) --mca btl_openib_receive_queues表示RDMA队列的配置信息。

4) --host表示参与的主机列表。

/mnt/share/mpi-benchmarks-IMB-v2021.8/IMB-P2P表示MPI应用,这里是IMB-P2P测试套件。以下是IMB-P2P的参数:

1) PingPong表示执行套件中的用例PingPong

2) -iter表示用例通信不同长度的消息的条数。

执行结果示例如下:

#----------------------------------------------------------------

# Benchmarking PingPong

# #processes = 2

#----------------------------------------------------------------

       #bytes #repetitions      t[usec]   Mbytes/sec      Msg/sec

            0         1000        10.20         0.00        98012

            1         1000        10.22         0.10        97847

            2         1000        10.21         0.20        97867

            4         1000        10.22         0.39        97756

            8         1000        10.23         0.78        97725

           16         1000        10.24         1.56        97639

           32         1000        10.26         3.12        97393

           64         1000        10.30         6.21        97017

          128         1000        10.45        12.25        95682

          256         1000        10.63        24.08        94066

          512         1000        10.89        46.98        91748

         1024         1000        11.31        90.50        88375

         2048         1000        12.24       167.24        81660

         4096         1000        14.90       274.79        67088

         8192         1000        16.68       490.79        59911

        16384         1000        36.35       450.73        27510

        32768         1000        41.31       793.08        24203

        65536         1000        53.68      1220.75        18627

       131072         1000        78.73      1664.82        12702

       262144         1000       129.58      2022.95         7717

       524288         1000       231.24      2267.28         4324

      1048576          800       438.93      2388.92         2278

      2097152          400       852.02      2461.27         1174

      4194304          200      1677.19      2500.57          596

结果第1列表示消息的长度。

结果第2列表示消息的条数。

结果第3列表示平均每条消息的单程耗时,单位微妙。

结果第45列表示测试期间的带宽,分别的单位为每秒多少MB和每秒多少条消息。

文章来自个人专栏
huaxiang的专栏
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
0