编译安装 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 版本。
一、环境准备 首先,请确保您的系统满足以下基本要求:
操作系统:支持 Linux(如 Ubuntu 20.04 LTS)或其他类 Unix 操作系统。 开发工具包:安装必要的构建工具和库,例如 build-essential ,libnuma-dev ,pkg-config 等。 内核版本:对于最佳性能,建议使用最新稳定版内核。 需要支持 RDMA 的硬件环境或虚拟环境。 1
2
sudo apt-get update
sudo apt-get install -y build-essential libnuma-dev pkg-config
二、编译安装 UCX 1.15.0 下载 UCX 源码包: 1
2
3
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
配置 UCX 编译选项: 1
2
mkdir build && cd build
../configure --prefix= /root/software/ucx/1.5.0
您可以根据实际需求添加更多配置选项,比如指定特定的网卡类型或者启用特定的功能。
编译并安装: 1
2
make -j 8
make install
UCX 架构说明 组件 角色 说明 UCP Protocol 实现高级抽象,如标记匹配、流、连接协商和建立、多轨以及处理不同的内存类型。 UCT Transport 实现低级通信原语,如活动消息、远程内存访问和原子操作。 UCM Memory 通用的数据结构、算法和系统实用程序的集合。 UCP Protocol 截获内存注册缓存使用的内存分配和释放事件。
三、编译安装 OpenMPI 5.0.0 下载 OpenMPI 源码包: 1
2
3
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
配置 OpenMPI 编译选项,指定使用 UCX 作为传输层: 1
2
3
4
5
6
7
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 -lnuma 与 cannot find -ludev 的错误。最后配置选项如下:
编译并安装: 1
2
make -j 8
make install
四、验证安装与设置环境变量 安装完成后,可以通过运行简单的 MPI 程序来验证 UCX 和 OpenMPI 是否成功集成:
1
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 等是不需要设置的,例如:
1
2
salloc -n 2
mpirun --mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES = mlx5_0:1 hostname
如果一切正常,您会看到两台主机名的输出。为了方便使用,可以将 OpenMPI 的 bin 目录等添加到系统 PATH 环境变量中:
1
2
3
4
5
6
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 性能测试 发送方:
1
ucx_perftest -c 0 -d mlx5_0:1
接收方:
1
ucx_perftest -c 1 -d mlx5_0:1 <server_hostname> -t tag_lat
总之,通过以上步骤,我们已经成功地从源代码编译并安装了 UCX 1.15.0 和 OpenMPI 5.0.0,并将其整合为一个高效稳定的高性能计算环境。在实际应用中,可以根据具体需求进一步优化配置以获得更优性能。