8.5. 管理 HPC 集群的环境模块
环境模块子系统使用基于 Lua 的环境模块(Lmod)来列出已安装的模块。使用 Lmod 时,您可以通过加载和卸载各种软件包及其依赖项来动态修改环境。它管理高性能计算(HPC)环境中的多个编译器、库和应用版本,以便您可以为每个版本选择特定的软件配置。为此,您可以使用 module 实用程序,它简写为 ml。
8.5.1. 环境模块管理的命令 复制链接链接已复制到粘贴板!
您可以使用以下命令来管理环境模块:
显示与
模块工具相关的所有命令:$ module help显示单个命令选项和语法:
$ module <command> help显示特定模块的详情:
$ ml whatis pmix/pmix-4.2.9pmix/pmix-4.2.9 : Description: PMIx 4.2.9 installed in /opt/pmix/4.2.9 pmix/pmix-4.2.9 : Version: 4.2.9-1列出 HPC 环境中的可用模块:
$ ml available-----------------------/usr/share/modulefiles------------------------ mpi/hpcx-2.24.1-pmix-4.2.9 mpi/openmpi-5.0.8-cuda12-gpu (L,D) mpi/hpcx-2.24.1 pmix/pmix-4.2.9 (L) mpi/openmpi-x86_64 ----------------/usr/share/lmod/lmod/modulefiles/Core---------------- lmod settarg其中:
-
l: Module is loaded -
D:默认模块 -
(L)注解表示 loadedmpi/openmpi-5.0.8-cuda12-gpu模块。 -
这也会将
pmix/pmix-4.2.9模块作为依赖项加载。 - 模块系统根据需要自动加载和卸载依赖模块。
-
列出载入的模块:
$ ml listCurrently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpu卸载模块及其依赖项:
$ ml unload mpi/openmpi-5.0.8-cuda12-gpu $ ml listNo modules loaded卸载现有模块并载入新模块:
$ ml load mpi/openmpi-5.0.8-cuda12-gpu $ ml listCurrently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpu切换载入的模块:
$ ml swap mpi/openmpi-x86_64The following have been reloaded with a version change: 1) mpi/openmpi-5.0.8-cuda12-gpu => mpi/openmpi-x86_64列出可用的模块:
$ ml listCurrently Loaded Modules: 1) mpi/openmpi-x86_64
8.5.2. Modulefiles 布局和规则 复制链接链接已复制到粘贴板!
modulefile 是一个定义和管理 HPC 系统上加载、卸载和切换软件环境的环境变量的脚本。推荐的目录结构和命名约定可以有效地环境模块文件组织,包括模块定义、打包程序模块以及在基于 RHEL 的 HPC 部署中管理多个软件环境的一致规则。
- 模块定义的手动方法
-
模块工具自动发现放置在/usr/share/modulefiles目录中的模块定义。如果您的其他目录带有模块定义,则需要将它们添加到MODULEPATH环境变量中。 - wrapper 模块
-
为避免修改环境变量并允许
Lmod查找特定于软件包的模块,请将wrapper模块放在/usr/share/modulefiles目录中,以便这些模块修改MODULEPATH并从外部位置加载相关模块。这种打包程序的一个示例是mpi/hpcx-2.24.1环境模块。 - 模块文件格式
Lmod支持使用 Lua 和工具命令语言(Tcl)格式编写的环境模块。lua 脚本是定义环境模块的首选方法。使用设定755权限的.lua扩展。ml命令的模块名称省略.lua后缀。本文档中提供的示例使用 Lua 脚本接口。它有以下要求:-
提供相同功能的所有软件包(如 MPI 库)都位于一个通用模块子目录中。在这种情况下,所有 MPI 库变体 ./
mpi/。 -
为软件包子目录(如冲突
("mpi")))向模块添加conflict ()定义,该定义一次只能加载该软件包类型的一个模块。 - 保持软件包命名一致。
使用功能名称作为子目录名称,而每个软件包实例的单个模块应根据以下模式命名:
<package provider>-<version>-<build>-<options>对于多个 MPI 库变体,有些来自不同的供应商,另一些是带有不同编译器和构建选项的给定软件包的多个构建。在这种情况下,命名方案提供了一致性。
-
提供相同功能的所有软件包(如 MPI 库)都位于一个通用模块子目录中。在这种情况下,所有 MPI 库变体 ./
8.5.3. 可用的 MPI 环境 复制链接链接已复制到粘贴板!
在 HPC Slurm 集群中,消息传递接口(MPI)环境为应用程序提供运行时支持,以便应用程序在节点间进行通信和同步。Slurm 与 MPI 实现(如 OpenMPI)集成,以便有效地管理分布式作业并优化对集群资源的使用。Slurm 使用 mpirun 在分配的节点之间编配执行,以进行可扩展的高性能作业。在提供的 RHEL HPC 集群中,有以下 MPI 环境:
-
openmpi.x86_64: Standard open MPI build,不提供 CUDA 或 GPU 加速支持。 -
openmpi-5.0.8-cuda-gpu: Open MPI 模块使用 CUDA 支持 GPU 感知 MPI 通信 -
Hpcx-2.24.1:基于 Open MPI 的 NVIDIA 全面的 HPC 软件堆栈。 -
Hpcx-2.24.1-pmix: HPC-X 构建配置了 Slurm 集成和作业调度的进程管理接口(PMIx)。
为了命名 MPI 库的一致性,请指定 Unified Communication X (UCX)作为对 MPI 基础架构指向消息传递层(PML)实现的点:
$ mpirun -mca pml ucx .
- openmpi.x86_64
- 此模块提供 OpenMPI 4.1.1 的标准构建。虽然它包含 PMIx 3.x 支持,但它不提供 CUDA 或 GPU 加速支持。RHEL InfiniBand 驱动程序和基础架构提供 InfiniBand (IB)/Remote Direct Memory Access (RDMA)功能。OpenMPI 库使用 gcc-11.4 编译。如果您的应用程序没有使用 CUDA 语言扩展或需要 GPU 卸载支持,请使用此模块。
- openmpi-5.0.8-cuda-gpu
此模块使用 NVIDIA HPC-X 软件包库提供带有 PMIx 4.x 支持和 CUDA 和 NVIDIA GPU 加速支持的 OpenMPI 5.0.8。RHEL InfiniBand 驱动程序和基础架构提供 InfiniBand (IB)/Remote Direct Memory Access (RDMA)功能。OpenMPI 库使用 gcc-11.5 编译。只有在使用需要 GPU 加速的启用了 CUDA 的应用程序时才选择这个模块。
注意如果没有 InfiniBand NIC,在 InfiniBand NIC 自动发现失败时会显示一个警告:
$ mpirun -n 2 /lib64/openmpi/bin/mpitests-osu_allreduce... [test-vm] Error: coll_hcoll_module.c:312 - mca_coll_hcoll_comm_query() Hcol library init failed ...您可以通过在
mpirun命令中添加-mca coll ^hcoll参数来删除这个警告:$ mpirun -mca coll ^hcoll -n 2 /lib64/openmpi/bin/mpitests-osu_allreduce# Size Avg Latency(us) 1 8.36 2 6.85- hpcx-2.24.1
- 此模块提供了一个 NVIDIA 构建的 OpenMPI 4.1.5 环境。它不支持 PMIx,但提供 CUDA 和 NVIDIA GPU 加速支持。RHEL InfiniBand 驱动程序和基础架构提供 InfiniBand (IB)/Remote Direct Memory Access (RDMA)功能。
- hpcx-2.24.1-pmix
-
此模块提供与
mpi/hpcx-2.24.1模块相同的环境,同时启用了 PMIx 4.x 支持。