Featured image of post 编译安装 UCX 1.15.0 与 OpenMPI 5.0.0:详尽指南

编译安装 UCX 1.15.0 与 OpenMPI 5.0.0:详尽指南

Unified Communication X (UCX) 和 Open Message Passing Interface (OpenMPI) 是高性能计算领域中不可或缺的两个组件。UCX 提供了一套高效的底层通信库,优化了硬件资源利用,而 OpenMPI 则是广泛应用于并行计算任务的消息传递接口。本文将详细指导如何从源代码编译安装 UCX 1.15.0 版本以及与其兼容的 OpenMPI 5.0.0 版本。

# 编译安装 UCX 1.15.0 与 OpenMPI 5.0.0:详尽指南

# 一、环境准备

首先,请确保您的系统满足以下基本要求:

  1. 操作系统:支持 Linux(如 Ubuntu 20.04 LTS)或其他类 Unix 操作系统。
  2. 开发工具包:安装必要的构建工具和库,例如 build-essentiallibnuma-devpkg-config 等。
  3. 内核版本:对于最佳性能,建议使用最新稳定版内核。
  4. 需要支持 RDMA 的硬件环境或虚拟环境。
sudo apt-get update
sudo apt-get install -y build-essential libnuma-dev pkg-config

# 二、编译安装 UCX 1.15.0

  1. 下载 UCX 源码包:
wget https://github.com/openucx/ucx/releases/download/v1.15.0/ucx-1.15.0.tar.gz
tar -xzvf ucx-1.15.0.tar.gz
cd ucx-1.15.0
  1. 配置 UCX 编译选项:
mkdir build && cd build
../configure --prefix=/root/software/ucx/1.5.0

您可以根据实际需求添加更多配置选项,比如指定特定的网卡类型或者启用特定的功能。

  1. 编译并安装:
make -j 8
make install
  1. UCX 架构说明
  • UCX 1.15.0 的架构如下图所示:
Architecture-2024-02-03
组件角色说明
UCPProtocol实现高级抽象,如标记匹配、流、连接协商和建立、多轨以及处理不同的内存类型。
UCTTransport实现低级通信原语,如活动消息、远程内存访问和原子操作。
UCMMemory通用的数据结构、算法和系统实用程序的集合。
UCPProtocol截获内存注册缓存使用的内存分配和释放事件。

# 三、编译安装 OpenMPI 5.0.0

  1. 下载 OpenMPI 源码包:
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.0.tar.gz
tar -xzvf openmpi-5.0.0.tar.gz
cd openmpi-5.0.0
  1. 配置 OpenMPI 编译选项,指定使用 UCX 作为传输层:
mkdir build && cd build
../configure --without-hcoll \
--enable-python-bindings \
--enable-mpirun-prefix-by-default \
--prefix=/root/software/openmpi/5.0.0-ucx-1.15.0  \
--with-ucx=/root/software/ucx/1.15.0 \
--enable-mca-no-build=btl-uct

注释

  • 对于 OpenMPI 4.0 及更高版本,btl_uct 组件可能存在编译错误。该组件对于使用 UCX 来说并不重要;因此可以通过 --enable-mca-no-build=btl-uct 禁用:
  • --enable-python-bindings 选项用于启用 Python 绑定。
  • --enable-mpirun-prefix-by-default 选项用于在使用 mpirun 启动 MPI 程序时自动添加 --prefix 选项。
  • --without-hcoll 选项用于禁用 HCOLL 组件。不设置编译时会报错 cannot find -lnumacannot find -ludev 的错误。

最后配置选项如下:

ompi-config-2024-02-03
  1. 编译并安装:
make -j 8
make install

# 四、验证安装与设置环境变量

安装完成后,可以通过运行简单的 MPI 程序来验证 UCX 和 OpenMPI 是否成功集成:

mpirun -np 2 --mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx5_0:1 hostname

(如果在 root 上运行则需要加上 --allow-run-as-root 选项,如果有 RDMA 设备可以设置 -x UCX_NET_DEVICES

注释

如果需要结合 Slurm 使用,可以参考 Launching with Slurm

其中一种方式就是,先通过 salloc 分配资源,然后在分配的资源上运行 mpirun 命令。此时 --hostfile--host-n 等是不需要设置的,例如:

salloc -n 2
mpirun --mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx5_0:1 hostname

如果一切正常,您会看到两台主机名的输出。为了方便使用,可以将 OpenMPI 的 bin 目录等添加到系统 PATH 环境变量中:

vim ~/.bashrc
export PATH=/root/software/openmpi/5.0.0-ucx-1.15.0/bin:$PATH
export LD_LIBRARY_PATH=/root/software/openmpi/5.0.0-ucx-1.15.0/lib:$LD_LIBRARY_PATH
export CPATH=/root/software/openmpi/5.0.0-ucx-1.15.0/include:$CPATH
export MANPATH=/root/software/openmpi/5.0.0-ucx-1.15.0/share/man:$MANPATH
source ~/.bashrc

# 五、UCX 性能测试

发送方:

ucx_perftest -c 0 -d mlx5_0:1

接收方:

ucx_perftest -c 1 -d mlx5_0:1 <server_hostname> -t tag_lat

总之,通过以上步骤,我们已经成功地从源代码编译并安装了 UCX 1.15.0 和 OpenMPI 5.0.0,并将其整合为一个高效稳定的高性能计算环境。在实际应用中,可以根据具体需求进一步优化配置以获得更优性能。

本博客已稳定运行
总访客数: Loading
总访问量: Loading
发表了 73 篇文章 · 总计 323.73k

使用 Hugo 构建
主题 StackJimmy 设计
基于 v3.27.0 分支版本修改