8.5. HPC クラスターの環境モジュールの管理
環境モジュールサブシステムは、Lua ベースの環境モジュール(Lmod)を使用して、インストールされたモジュールを一覧表示します。Lmod を使用すると、さまざまなソフトウェアパッケージとその依存関係を読み込み、アンロードすることで環境を動的に変更できます。高パフォーマンスコンピューティング(HPC)環境で複数のバージョンのコンパイラー、ライブラリー、およびアプリケーションを管理するため、バージョンごとに特定のソフトウェア設定を選択できます。これには、ml に短縮される モジュール ユーティリティーを使用できます。
8.5.1. 環境モジュール管理のコマンド リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドを使用して、環境モジュールを管理できます。
moduleユーティリティーに関連するすべてのコマンドを表示します。module help
$ module helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 個々のコマンドオプションと構文を表示します。
module <command> help
$ module <command> helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 特定のモジュールの詳細を表示します。
ml whatis pmix/pmix-4.2.9
$ ml whatis pmix/pmix-4.2.9Copy to Clipboard Copied! Toggle word wrap Toggle overflow pmix/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
pmix/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-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow HPC 環境で利用可能なモジュールを一覧表示します。
ml available
$ ml availableCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
L: モジュールがロードされている。 -
d: デフォルトモジュール -
(L)アノテーションは、mpi/openmpi-5.0.8-cuda12-gpuモジュールが読み込まれていることを示します。 -
これは、
pmix/pmix-4.2.9モジュールを依存関係として読み込みます。 - モジュールシステムは、必要に応じて依存するモジュールを自動的に読み込み、アンロードします。
-
読み込まれたモジュールを一覧表示します。
ml list
$ ml listCopy to Clipboard Copied! Toggle word wrap Toggle overflow Currently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpu
Currently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールとその依存関係をアンロードします。
ml unload mpi/openmpi-5.0.8-cuda12-gpu ml list
$ ml unload mpi/openmpi-5.0.8-cuda12-gpu $ ml listCopy to Clipboard Copied! Toggle word wrap Toggle overflow No modules loaded
No modules loadedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 既存のモジュールをアンロードし、新しいモジュールを読み込みます。
ml load mpi/openmpi-5.0.8-cuda12-gpu ml list
$ ml load mpi/openmpi-5.0.8-cuda12-gpu $ ml listCopy to Clipboard Copied! Toggle word wrap Toggle overflow Currently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpu
Currently Loaded Modules: 1) pmix/pmix-4.2.9 2) mpi/openmpi-5.0.8-cuda12-gpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow ロードしたモジュールを切り替えます。
ml swap mpi/openmpi-x86_64
$ ml swap mpi/openmpi-x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow The following have been reloaded with a version change: 1) mpi/openmpi-5.0.8-cuda12-gpu => mpi/openmpi-x86_64
The following have been reloaded with a version change: 1) mpi/openmpi-5.0.8-cuda12-gpu => mpi/openmpi-x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 利用可能なモジュールを一覧表示します。
ml list
$ ml listCopy to Clipboard Copied! Toggle word wrap Toggle overflow Currently Loaded Modules: 1) mpi/openmpi-x86_64
Currently Loaded Modules: 1) mpi/openmpi-x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.5.2. Modulefiles のレイアウトとルール リンクのコピーリンクがクリップボードにコピーされました!
モジュールファイルは、HPC システム上でソフトウェア環境の読み込み、アンロード、および切り替えを行うための環境変数を定義および管理するスクリプトです。推奨されるディレクトリー構造および命名規則により、モジュール定義、ラッパーモジュール、RHEL ベースの HPC デプロイメントで複数のソフトウェア環境を管理するための一貫したルールなど、環境モジュールファイルの効率的な編成が可能になります。
- モジュール定義の手動方法
-
モジュールユーティリティーは、/usr/share/modulefilesディレクトリーにあるモジュール定義を自動的に検出します。モジュール定義のあるその他のディレクトリーがある場合は、それらをMODULEPATH環境変数に追加する必要があります。 - ラッパーモジュール
-
環境変数を変更し、
Lmodがパッケージ固有のモジュールを見つけないようにするには、ラッパーモジュールを/usr/share/modulefilesディレクトリーに配置して、これらのモジュールがMODULEPATHを変更し、外部の場所から関連モジュールを読み込むようにします。このスタイルのラッパーの例は、mpi/hpcx-2.24.1環境モジュールです。 - モジュールファイル形式
Lmodは、Lua および Tool Command Language (Tcl)形式で記述された環境モジュールをサポートします。lua スクリプトは、環境モジュールを定義するための推奨される方法です。パーミッション755が設定された.lua拡張を使用します。mlコマンドのモジュール名は、.luaの接尾辞を省略します。このドキュメントの例では、Lua スクリプトインターフェイスを使用します。これには、以下の要件があります。-
MPI ライブラリーなどの同じ機能を提供するすべてのパッケージは、共通のモジュール サブディレクトリー内にあります。この場合、..
/mpi/(すべての MPI ライブラリーバリアントの場合)。 -
package サブディレクトリー(例:
定義を追加します。これにより、一度に 1 つのパッケージタイプのモジュールのみをロードできます。conflict ("mpi"))のモジュールに conflict () - パッケージの命名の一貫性を維持します。
機能名はサブディレクトリー名として使用します。一方、各パッケージインスタンスの個々のモジュールは、以下のパターンに従って命名する必要があります。
<package provider>-<version>-<build>-<options>
<package provider>-<version>-<build>-<options>Copy to Clipboard Copied! Toggle word wrap Toggle overflow MPI ライブラリーのバリアントが複数ある場合には、異なるプロバイダーからのものもあれば、コンパイラーやビルドオプションが異なる特定のパッケージの複数のビルドであるものもあります。このような場合、命名スキームにより一貫性が確保されます。
-
MPI ライブラリーなどの同じ機能を提供するすべてのパッケージは、共通のモジュール サブディレクトリー内にあります。この場合、..
8.5.3. 利用可能な MPI 環境 リンクのコピーリンクがクリップボードにコピーされました!
HPC Slurm クラスターでは、メッセージを渡すインターフェイス(MPI)環境では、アプリケーションがノード間で通信および同期するためのランタイムサポートを提供します。Slurm は OpenMPI などの MPI 実装と統合され、分散ジョブを効率的に管理し、クラスターリソースの使用を最適化します。Slurm は mpirun を使用して、スケーラブルで高パフォーマンスのジョブのために、割り当てられたノード間で実行を調整します。提供されている RHEL HPC クラスターでは、以下の MPI 環境が利用できます。
-
openmpi
.x86_64: CUDA または GPU アクセラレーションサポートを提供しない標準オープン MPI ビルド。 -
openmpi-
5.0.8-cuda-gpu: GPU 対応の MPI 通信の CUDA サポートでコンパイルされた Open MPI モジュール -
Hpcx-2.24.1: Open MPI をベースとした NVIDIA が包括的な HPC ソフトウェアスタック。 -
Hpcx-2.24.1-pmix: Slurm 統合とジョブスケジューリングのために Process Management Interface (PMIx)で設定された HPC-X ビルド。
MPI ライブラリーの命名で一貫性を保つために、MPI インフラストラクチャーの PML (MPI インフラストラクチャーの PML)実装を指すように Unified Communication X (UCX)を指定します。
mpirun -mca pml ucx .
$ 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 アクセラレーションサポートを提供します。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
$ mpirun -n 2 /lib64/openmpi/bin/mpitests-osu_allreduceCopy to Clipboard Copied! Toggle word wrap Toggle overflow ... [test-vm] Error: coll_hcoll_module.c:312 - mca_coll_hcoll_comm_query() Hcol library init failed ...
... [test-vm] Error: coll_hcoll_module.c:312 - mca_coll_hcoll_comm_query() Hcol library init failed ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow この警告を削除するには、
-mca coll ^hcollパラメーターをmpirunコマンドに追加します。mpirun -mca coll ^hcoll -n 2 /lib64/openmpi/bin/mpitests-osu_allreduce
$ mpirun -mca coll ^hcoll -n 2 /lib64/openmpi/bin/mpitests-osu_allreduceCopy to Clipboard Copied! Toggle word wrap Toggle overflow # Size Avg Latency(us) 1 8.36 2 6.85
# Size Avg Latency(us) 1 8.36 2 6.85Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 サポートも有効になっています。