diff --git a/_pages/hpc.md b/_pages/hpc.md index b12e63fe0..9cf7cd184 100644 --- a/_pages/hpc.md +++ b/_pages/hpc.md @@ -264,6 +264,12 @@ HPC/機械学習ワークロードを実行する際に有益なテクニカル また **OpenMPI** は、 **[クラスタ・ネットワーク](/ocitutorials/hpc/#5-1-クラスタネットワーク)** を介して高帯域・低遅延のMPIプロセス間通信を実現するための通信フレームワークに **[UCX](https://openucx.org/)** を採用し、MPI通信性能を最適化するためには **UCX** のパラメータを適切に設定することが求められます。 本テクニカルTipsは、 **OpenMPI** のMPI通信性能に影響するパラメーターやその指定方法に関する有益なTipsを解説します。 +- **[パフォーマンスを考慮したプロセス・スレッドのコア割当て指定方法](/ocitutorials/hpc/benchmark/cpu-binding/)** + + NUMAアーキテクチャを採用するインスタンスに於けるMPIやOpenMPの並列プログラム実行は、生成されるプロセスやスレッドをどのようにインスタンスのコアに割当てるかでその性能が大きく変動するため、その配置を意識してアプリケーションを実行することが求められます。 + このため、使用するシェイプに搭載されるプロセッサのアーキテクチャやアプリケーションの特性に合わせて意図したとおりにプロセスやスレッドをコアに配置するために必要な、MPI実装、OpenMP実装、及びジョブスケジューラがそれぞれ有するコア割当て制御機能に精通している必要があります。 + 本テクニカルTipsは、 **MPI** 実装に **[OpenMPI](https://www.open-mpi.org/)** 、 **OpenMP** 実装にGNUコンパイラ、及びジョブスケジューラに **[Slurm](https://slurm.schedmd.com/)** を取り上げ、これらのコア割当て機能を駆使してMPIプロセスやOpenMPスレッドのコア割当てを行う方法を解説します。 + ## 2-3. プロファイリング関連Tips集 本章は、HPCアプリケーションのパフォーマンス解析やチューニングに必要な情報を収集する、プロファイリング関連Tips集を提供します。 @@ -444,7 +450,7 @@ HPC/機械学習ワークロードを実行する際に有益なテクニカル **[OpenFOAM](https://www.openfoam.com/)** は、CAE分野で多くの利用実績を持つオープンソースのCFDアプリケーションです。 **OpenFOAM** は、メッシュ作成等のプリ処理、ソルバーによる解析処理、及び解析結果を可視化するポスト処理の全てのCFD解析フローを、自身が提供するツール群と外部のツール群を組合せてオープンソースソフトウェアで完結することが可能です。また **OpenFOAM** が提供するソルバーは、MPIで並列化されており、1万コアを超える並列実行の実績も報告されています。 - 本テクニカルTipsは、 **OpenFOAM** とこれを中核とするCFD解析フローに有用なオープンソースのツール群を、HPCワークロードの実行に最適なベアメタルインスタンスにインストールし、これを利用する方法を解説します。 + 本テクニカルTipsは、 **OpenFOAM** とこれを中核とするCFD解析フローに有用なオープンソースのツール群をHPCワークロードの実行に最適なベアメタルインスタンスにインストールし、これを利用する方法を解説します。 - **[Slurmによるリソース管理・ジョブ管理システム運用Tips](/ocitutorials/hpc/tech-knowhow/slurm-tips/)** diff --git a/tutorials/_hpc/benchmark/cpu-binding.md b/tutorials/_hpc/benchmark/cpu-binding.md new file mode 100644 index 000000000..db7607dd3 --- /dev/null +++ b/tutorials/_hpc/benchmark/cpu-binding.md @@ -0,0 +1,1106 @@ +--- +title: "パフォーマンスを考慮したプロセス・スレッドのコア割当て指定方法" +excerpt: "NUMAアーキテクチャを採用するインスタンスに於けるMPIやOpenMPの並列プログラム実行は、生成されるプロセスやスレッドをどのようにインスタンスのコアに割当てるかでその性能が大きく変動するため、その配置を意識してアプリケーションを実行することが求められます。このため、使用するシェイプに搭載されるプロセッサのアーキテクチャやアプリケーションの特性に合わせて意図したとおりにプロセスやスレッドをコアに配置するために必要な、MPI実装、OpenMP実装、及びジョブスケジューラが有するコア割当て制御機能に精通している必要があります。本テクニカルTipsは、MPI実装にOpenMPI、OpenMP実装にGNUコンパイラ、及びジョブスケジューラにSlurmを取り上げ、これらのコア割当て機能を駆使してプロセス・スレッドのコア割当てを行う方法を解説します。" +order: "226" +layout: single +header: + overlay_filter: rgba(34, 66, 55, 0.7) +#link: https://community.oracle.com/tech/welcome/discussion/4474261/ +--- + +*** +# 0. 概要 + +本パフォーマンス関連Tipsは、NUMA(Non-Umiform Memory Access)アーキテクチャを採用するインスタンスに於ける並列プログラムの実行時性能に大きく影響する、MPIが生成するプロセスとOpenMPが生成するスレッドのコア割当てについて、アプリケーション性能に有利となる典型的なパターンを例に挙げ、以下の観点でその実行方法を解説します。 + +1. **[PRRTE](https://github.com/openpmix/prrte)** を使用するプロセス・スレッドのコア割当て +この割当て方法は、 **[OpenMPI](https://www.open-mpi.org/)** に同梱される **PRRTE** のMPIプロセスのコア割当て機能と、 **GNUコンパイラ** のOpenMPスレッドのコア割当て機能を組合せて、意図したプロセス・スレッドのコア割当てを実現します。 +この方法は、ジョブスケジューラを使用せずに **mpirun** を使用してMPI並列アプリケーションをインタラクティブに実行する場合に使用します。 +2. **[Slurm](https://slurm.schedmd.com/)** を使用するプロセス・スレッドのコア割当て +この割当て方法は、 **Slurm** のMPIプロセスのコア割当て機能と、 **GNUコンパイラ** のOpenMPスレッドのコア割当て機能を組合せて、意図したプロセス・スレッドのコア割当てを実現します。 +この方法は、 **Slurm** のジョブスケジューラ環境で **srun** を使用してMPI並列アプリケーションを実行する場合に使用します。 + +プロセス・スレッドのコア割当ては、使用するインスタンスのNUMAアーキテクチャやNUMAノードの構成方法に影響を受けますが、本パフォーマンス関連Tipsでは **Intel Ice Lake** プロセッサを搭載する **[BM.Optimized3.36](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm#bm-hpc-optimized)** を使用し、NUMAノード構成に **NUMA nodes per socket** (以降 **NPS** と呼称)が **1** (デフォルト)(以降 **NPS1** と呼称)と **2** (以降 **NPS2** と呼称)の場合を取り上げ、それぞれに関するコア割当て方法を解説します。 + +また使用する **BM.Optimized3.36** は、 **Simultanious Multi Threading** (以降 **SMT** と呼称)を無効化(デフォルト有効)しています。 + +**NPS** と **SMT** の設定方法は、 **[OCI HPCパフォーマンス関連情報](/ocitutorials/hpc/#2-oci-hpcパフォーマンス関連情報)** の **[パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法](/ocitutorials/hpc/benchmark/bios-setting/)** を参照してください。 + +以下は、 **BM.Optimized3.36** のアーキテクチャ図です。 + +![BM.Optimized3.36アーキテクチャ図](x9_architecture.png) + +本テクニカルTipsで取り上げるプロセス・スレッドのコア割当ては、パフォーマンスの観点で利用する可能性の高い、以下のパターンを解説します。 +マルチノード実行の場合は、ノード内コア割当てパターンを全てのノードに拡張します。 + +| No. | NPS | ノード当たり
プロセス数 | プロセス当たり
スレッド数 | 備考 | +| :----: | :------: | :-------------: | :--------------: | :----------------------------------------------------------------------------------------: | +| **1** | **NPS1** | 1 | 1 | ノード間通信性能を考慮してプロセスを
**[クラスタ・ネットワーク](/ocitutorials/hpc/#5-1-クラスタネットワーク)** 接続用NIC側のソケットに配置 | +| **2** | **NPS1** | 2 | 1 | - | +| **3** | **NPS1** | 4 | 1 | - | +| **4** | **NPS1** | 8 | 1 | - | +| **5** | **NPS1** | 16 | 1 | - | +| **6** | **NPS1** | 32 | 1 | - | +| **7** | **NPS1** | 36 | 1 | ソケットに対するサイクリック分割 | +| **8** | **NPS1** | 36 | 1 | ソケットに対するブロック分割 | +| **9** | **NPS1** | 2 | 18 | MPI/OpenMPハイブリッド並列実行 | +| **10** | **NPS2** | 4 | 1 | - | +| **11** | **NPS2** | 8 | 1 | - | +| **12** | **NPS2** | 16 | 1 | - | +| **13** | **NPS2** | 32 | 1 | - | +| **14** | **NPS2** | 36 | 1 | NUMAノードに対するサイクリック分割 | +| **15** | **NPS2** | 36 | 1 | NUMAノードに対するブロック分割 | +| **16** | **NPS2** | 4 | 9 | MPI/OpenMPハイブリッド並列実行 | + +![コアバインディング1](core_binding1.png) + +![コアバインディング2](core_binding2.png) + +![コアバインディング3](core_binding3.png) + +また最後の章では、プロセス・スレッドのコア割当てが想定通りに行われているかどうかを確認する方法と、この方法を使用して本テクニカルTipsで紹介したコア割当てを行った際の出力例を紹介します。 + +*** +# 1. PRRTEを使用するプロセス・スレッドのコア割当て + +## 1-0. 概要 + +本章は、 **[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurm環境での利用を前提とするUCX通信フレームワークベースのOpenMPI構築方法](/ocitutorials/hpc/tech-knowhow/build-openmpi/)** に従って構築された **OpenMPI** に含まれる **PRRTE** を使用し、 **[0. 概要](#0-概要)** に記載のコア割当てパターンを実現する方法を解説します。 + +以降で解説するコア割当て方法は、以下の **mpirun** コマンドオプションと **GNUコンパイラ** 環境変数を組合せて実現します。 + +[ **mpirun** オプション] +- **-n** :起動するMPIプロセス数 +- **--bind-to** :MPIプロセスを割当てるリソース単位 +- **--map-by** :MPIプロセスを割り振るリソース単位 +- **--rank-by** :MPIプロセスを割り振るポリシー + +[ **GNUコンパイラ** 環境変数] +- **OMP_NUM_THREADS** :MPIプロセス当たりのOpenMPスレッド数 +- **OMP_PROC_BIND** :OpenMPスレッドのコア割当て方法 + +例えば **No. 8** のコア割当てを1ノードで行う場合のコマンドは、以下になります。 + +```sh +$ mpirun -n 36 --hostfile ~/hostlist.txt --bind-to core --map-by ppr:18:package --rank-by fill ./a.out +``` + +また **No. 16** のコア割当てを1ノードで行う場合のコマンドは、以下になります。 + +```sh +$ mpirun -n 4 --hostfile ~/hostlist.txt --bind-to core --map-by ppr:1:numa:PE=9 -x OMP_NUM_THREAD=9 -x OMP_PROC_BIND=TRUE ./a.out +``` + +以降では、コア割当てパターンを実現するオプション・環境変数の組み合わせを解説します。 + +## 1-1. 各コア割当てパターンのオプション・環境変数組合せ + +本章は、 **[0. 概要](#0-概要)** に記載の各コア割当てパターンを実現するための、 **mpirun** コマンドオプションと **GNUコンパイラ** 環境変数の組合せを記載します。 +なお、表中に **-** と記載されている箇所は、そのオプション・環境変数を指定する必要が無い(デフォルトのままで良い)ことを示します。 +また、マルチノード実行の場合は、 **-n** オプションの設定値をノード数で掛けた値に変更します。例えば **No.1** の割当てパターンを2ノードで実行する場合は、 **-n** オプションに **2** を指定します。 + +|No.|-n|--bind-to|--map-by|--rank-by|OMP_NUM_THREADS|OMP_PROC_BIND| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|**1**|1|-|pe-list=18|-|-|-| +|**2**|2|core|ppr:1:package|-|-|-| +|**3**|4|core|ppr:2:package|fill|-|-| +|**4**|8|core|ppr:4:package|fill|-|-| +|**5**|16|core|ppr:8:package|fill|-|-| +|**6**|32|core|ppr:16:package|fill|-|-| +|**8**|36|core|ppr:18:package|fill|-|-| +|**9**|2|core|ppr:1:package:PE=18|-|18|TRUE| +|**10**|4|core|ppr:1:numa|-|-|-| +|**11**|8|core|ppr:2:numa|fill|-|-| +|**12**|16|core|ppr:4:numa|fill|-|-| +|**13**|32|core|ppr:8:numa|fill|-|-| +|**15**|36|core|ppr:9:numa|fill|-|-| +|**16**|4|core|ppr:1:numa:PE=9|-|9|TRUE| + +*** +# 2. Slurmを使用するプロセス・スレッドのコア割当て + +## 2-0. 概要 + +本章は、 **[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurmによるリソース管理・ジョブ管理システム構築方法](/ocitutorials/hpc/tech-knowhow/setup-slurm-cluster/)** に従って構築された **Slurm** ジョブスケジューラ環境で、 **[0. 概要](#0-概要)** に記載のコア割当てパターンを実現する方法を解説します。 +ここで **NPS1** と **NPS2** のコア割当てパターンは、 **[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurmによるリソース管理・ジョブ管理システム運用Tips](/ocitutorials/hpc/tech-knowhow/slurm-tips/)** の **[3. ヘテロジニアス環境下のパーティションを使った計算/GPUノード割り当て制御](/ocitutorials/hpc/tech-knowhow/slurm-tips/#3-ヘテロジニアス環境下のパーティションを使った計算gpuノード割り当て制御)** に従って構築したパーティション **nps1** と **nps2** で実行することを前提とします。 + +以降で解説するコア割当て方法は、以下の **srun** コマンドオプションと **GNUコンパイラ** 環境変数を組合せて実現します。 + +[ **srun** オプション] +- **-p** :投入するパーティション +- **-n** :起動するMPIプロセス数 +- **-N** :割当てるノード数 +- **-c** :プロセス当たりに割り当てるコア数 +- **--cpu-bind** :MPIプロセスを割当てるリソース単位 +- **-m** :MPIプロセスを割り振るポリシー + +[ **GNUコンパイラ** 環境変数] +- **OMP_NUM_THREADS** :MPIプロセス当たりのOpenMPスレッド数 +- **OMP_PROC_BIND** :OpenMPスレッドのコア割当て方法 + +例えば **No. 8** のコア割当てを1ノードで行う場合のコマンドは、以下になります。 + +```sh +$ srun -p nps1 -n 36 --cpu-bind=cores -m block:block ./a.out +``` + +また **No. 16** のコア割当てを2ノードで行う場合のコマンドは、以下になります。 + +```sh +$ OMP_NUM_THREADS=9 OMP_PROC_BIND=TRUE srun -p nps2 -n 8 -N 2 -c 9 --cpu-bind=rank_ldom ./a.out +``` + +以降では、コア割当てパターンを実現するオプション・環境変数の組み合わせを解説します。 + +## 2-1. 各コア割当てパターンのオプション・環境変数組合せ + +本章は、 **[0. 概要](#0-概要)** に記載の各コア割当てパターンを実現するための、 **srun** コマンドオプションと **GNUコンパイラ** 環境変数の組合せを記載します。 +なお、表中に **-** と記載されている箇所は、そのオプション・環境変数を指定する必要が無い(デフォルトのままで良い)ことを示します。 +また、マルチノード実行の場合は、ノード数を **-N** オプションに指定し、 **-n** オプションの設定値をノード数で掛けた値に変更します。例えば **No.1** の割当てパターンを2ノードで実行する場合は、 **-n** オプション **-N** オプション共に **2** を指定します。シングルノード実行の場合は、 **-N** オプションを指定する必要がありません。 + +|No.|-p|-n|-c|--cpu-bind|-m|OMP_NUM_THREADS|OMP_PROC_BIND| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|**1**|**nps1**|1|-|map_cpu:18|-|-|-| +|**2**|**nps1**|2|-|cores|-|-|-| +|**3**|**nps1**|4|-|cores|-|-|-| +|**4**|**nps1**|8|-|cores|-|-|-| +|**5**|**nps1**|16|-|cores|-|-|-| +|**6**|**nps1**|32|-|cores|-|-|-| +|**7**|**nps1**|36|-|cores|-|-|-| +|**8**|**nps1**|36|-|cores|block:block|-|-| +|**9**|**nps1**|2|18|cores|-|18|TRUE| +|**10**|**nps2**|4|-|rank_ldom|-|-|-| +|**11**|**nps2**|8|-|rank_ldom|-|-|-| +|**12**|**nps2**|16|-|rank_ldom|-|-|-| +|**13**|**nps2**|32|-|rank_ldom|-|-|-| +|**14**|**nps2**|36|-|rank_ldom|-|-|-| +|**15**|**nps2**|36|-|ldoms|block:block|-|-| +|**16**|**nps2**|4|9|rank_ldom|-|9|TRUE| + +*** +# 3. プロセス・スレッドのコア割当て確認方法 + +## 3-0. 概要 + +本章は、ここまで紹介したプロセス・スレッドのコア割当てが想定通りに行われているかを確認する方法を解説し、この方法を使用して各コア割当てパターンを確認した結果をご紹介します。 + +ここで紹介する確認方法は、コア割当て対象のプログラムがフラットMPI並列かMPI/OpenMPハイブリッド並列か、コア割当てに **PRRTE** を使用するか **Slurm** を使用するかにより、以下の手法を採用します。 + +- フラットMPI並列 + - **PRRTE** + **PRRTE** の **--report-bindings** オプションの出力から、以下の情報を取得します。 + - MPIランク + - ノードホスト名 + - プロセスが割当てられたコア番号 + - **Slurm** + **Slurm** が実行時に設定する **SLURM_** 環境変数と、 **taskset** コマンドの出力から、以下の情報を取得します。 + - MPIランク + - ノード番号 + - プロセスが割当てられたコア番号 +- MPI/OpenMPハイブリッド並列 + - **PRRTE** + **GNUコンパイラ** が実行時に設定する **OMPI_COMM_WORLD_** 環境変数と、スレッド番号とこれが割当てられたコア番号を表示するOpenMPプログラムの出力から、以下の情報を取得します。 + - MPIランク + - ノード番号 + - スレッド番号 + - スレッドが割当てられたコア番号 + - **Slurm** + **Slurm** が実行時に設定する **SLURM_** 環境変数と、スレッド番号とこれが割当てられたコア番号を表示するOpenMPプログラムの出力から、以下の情報を取得します。 + - MPIランク + - ノード番号 + - スレッド番号 + - スレッドが割当てられたコア番号 + +スレッド番号とこれが割当てられたコア番号を表示するOpenMPプログラムは、以下のソースコードを使用し、 + +[show_thread_bind.c] + +```sh +/* + # Compile command + $ gcc -fopenmp show_thread_bind.c +*/ +#include +#include +#include +#include +#include +#include +#define min(a,b) a確保 | MPIプロセス
起動 | MPIプロセス間
通信初期化 | ノード間
リモート実行|起動コマンド | +| :-: | :-------: | :-------: | :-------------------------------------------------------------------------: | :---------------------------------------------------------------: | :--------: | +| 1. | **Slurm** | **Slurm** | **[PMIx](https://pmix.github.io/)** | **Slurm** |**srun** | +| 2. | **Slurm** | **Slurm** | **PMIx** | **Slurm** |**mpirun**
(※1) | +| 3. | **Slurm** | **[PRRTE](https://docs.prrte.org/en/latest/)** | **PMIx** | **SSH**
(※2) |**mpirun** | -それぞれの動作モードは、MPIアプリケーションの起動に以下のコマンドを使用します。 - -1. **Slurm** に付属する **srun** -2. **Slurm** と連携するように構築された **OpenMPI** に付属する **mpirun** -3. **Slurm** と連携するように構築されていない **OpenMPI** に付属する **mpirun** (パスフレーズ無しで計算ノード間をSSHアクセス出来る必要があります。) +※1)本テクニカルTipsの手順に従い、 **Slurm** と連携するよう **OpenMPI** がビルドされている必要があります。 +※2)パスフレーズ無しで計算ノード間をSSHアクセス出来るよう設定する必要があります。 ここで **1.** の動作モードは、その他の動作モードに対して以下の利点があります。 -- 高並列アプリケーションを高速に起動することが可能 +- 高並列アプリケーションを高速に起動することが可能(※3) - プロセスバインディングや終了処理等のプロセス管理を **Slurm** に統合することが可能 - 精度の高いアカウンティング情報を **Slurm** に提供することが可能 - **Slurm** クラスタ内のパスフレーズ無しSSHアクセス設定が不要 -また **[UCX](https://openucx.org/)** は、HPCでの利用を念頭に開発されているオープンソースの通信フレームワークで、ノード内・ノード間を問わず以下の多様なトランスポートレベルの通信手段を **OpenMPI** から利用することが出来ます。 +※3)この詳細は、**[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurmによるリソース管理・ジョブ管理システム構築方法](/ocitutorials/hpc/tech-knowhow/setup-slurm-cluster/)** の **[0. 概要](/ocitutorials/hpc/tech-knowhow/setup-slurm-cluster/#0-概要)** を参照してください。 + +また **[UCX](https://openucx.org/)** は、HPCでの利用を念頭に開発されているトランスポートレベルのオープンソース通信フレームワークで、 **OpenMPI** から利用可能な以下のノード内・ノード間通信手段を提供します。 [ノード内] - POSIX共有メモリ @@ -194,7 +195,7 @@ $ make bt-mz CLASS=C 次に、以下コマンドを **OpenMPI** を利用するユーザで何れか1ノードで実行し、 **NAS Parallel Benchmarks** を実行、その結果を確認します。 ```sh -$ mpirun -n 36 -N 18 -hostfile ~/hostlist.txt -x OMP_NUM_THREADS=2 -x UCX_NET_DEVICES=mlx5_2:1 --bind-to none ./bin/bt-mz.C.x +$ mpirun -n 36 -N 18 --hostfile ~/hostlist.txt -x OMP_NUM_THREADS=2 -x UCX_NET_DEVICES=mlx5_2:1 --bind-to none ./bin/bt-mz.C.x NAS Parallel Benchmarks (NPB3.4-MZ MPI+OpenMP) - BT-MZ Benchmark diff --git a/tutorials/_hpc/tech-knowhow/cluster-with-pdsh.md b/tutorials/_hpc/tech-knowhow/cluster-with-pdsh.md index 223c4e4d4..cbd3e5f48 100644 --- a/tutorials/_hpc/tech-knowhow/cluster-with-pdsh.md +++ b/tutorials/_hpc/tech-knowhow/cluster-with-pdsh.md @@ -223,6 +223,8 @@ inst-f5fra-x9-ol8: inst-f5fra-x9-ol8 inst-f5fra-x9-ol8: inst-f5fra-x9-ol8 ``` +**-f 1** オプションを付与した場合の管理対象ノードへのコマンド発行順序は、ホストリストファイルに於ける出現順ではなく、ホスト名のアルファベット順です。 + ## 2-3. 管理対象ノードがレスポンスしない場合 管理対象ノードが障害等でSSHのコマンド要求に応じられない場合は、当然 **pdsh** の実行も問題の管理対象ノードのところで停止します。 diff --git a/tutorials/_hpc/tech-knowhow/compute-host-list.md b/tutorials/_hpc/tech-knowhow/compute-host-list.md index 28dd776cc..712a60dca 100644 --- a/tutorials/_hpc/tech-knowhow/compute-host-list.md +++ b/tutorials/_hpc/tech-knowhow/compute-host-list.md @@ -34,6 +34,8 @@ PRETTY_NAME="Oracle Linux Server 8.6" $ ``` +またMPIプログラムを実行する際も、起動コマンド( **mpirun** 等)への実行ノード指示( **--hostfile** オプション)に上記のホスト名リスト(いわゆるホストファイル)が必要になることがあります。 + このホスト名リストは、以下のような方法で効率的に作成することが可能です。 1. **OCI** コンソールを活用する方法 diff --git a/tutorials/_hpc/tech-knowhow/install-openfoam.md b/tutorials/_hpc/tech-knowhow/install-openfoam.md index 2c6cffb0b..4b60012df 100644 --- a/tutorials/_hpc/tech-knowhow/install-openfoam.md +++ b/tutorials/_hpc/tech-knowhow/install-openfoam.md @@ -1,6 +1,6 @@ --- title: "OpenFOAMインストール・利用方法" -excerpt: "OpenFOAMは、CAE分野で多くの利用実績を持つオープンソースのCFDアプリケーションです。OpenFOAMは、メッシュ作成等のプリ処理、ソルバーによる解析処理、及び解析結果を可視化するポスト処理の全てのCFD解析フローを、自身が提供するツール群と外部のツール群を組合せてオープンソースソフトウェアで完結することが可能です。またOpenFOAMが提供するソルバーは、MPIで並列化されており、1万コアを超える並列実行の実績も報告されています。本テクニカルTipsは、OpenFOAMとこれを中核とするCFD解析フローに有用なオープンソースのツール群を、HPCワークロードの実行に最適なベアメタルインスタンスにインストールし、これを利用する方法を解説します。" +excerpt: "OpenFOAMは、CAE分野で多くの利用実績を持つオープンソースのCFDアプリケーションです。OpenFOAMは、メッシュ作成等のプリ処理、ソルバーによる解析処理、及び解析結果を可視化するポスト処理の全てのCFD解析フローを、自身が提供するツール群と外部のツール群を組合せてオープンソースソフトウェアで完結することが可能です。またOpenFOAMが提供するソルバーは、MPIで並列化されており、1万コアを超える並列実行の実績も報告されています。本テクニカルTipsは、OpenFOAMとこれを中核とするCFD解析フローに有用なオープンソースのツール群をHPCワークロードの実行に最適なベアメタルインスタンスにインストールし、これを利用する方法を解説します。" order: "354" layout: single header: @@ -130,7 +130,7 @@ MPI言語規格に準拠するMPI実装 - **OpenFOAM** と外部ツールのソースプログラムのダウンロード・展開 前提ソフトウェアの **OpenMPI** をインストール・セットアップします。 -この方法は、 **[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurm環境での利用を前提とするOpenMPI構築方法](/ocitutorials/hpc/tech-knowhow/build-openmpi/)** を参照してください。 +この方法は、 **[OCI HPCテクニカルTips集](/ocitutorials/hpc/#3-oci-hpcテクニカルtips集)** の **[Slurm環境での利用を前提とするUCX通信フレームワークベースのOpenMPI構築方法](/ocitutorials/hpc/tech-knowhow/build-openmpi/)** を参照してください。 次に、以下コマンドをopcユーザで実行し、前提rpmパッケージを提供するyumレポジトリを追加します。 diff --git a/tutorials/_hpc/tech-knowhow/slurm-tips.md b/tutorials/_hpc/tech-knowhow/slurm-tips.md index 96efadb84..fc4ad68de 100644 --- a/tutorials/_hpc/tech-knowhow/slurm-tips.md +++ b/tutorials/_hpc/tech-knowhow/slurm-tips.md @@ -240,11 +240,11 @@ $ HPC/GPUクラスタは、構成する計算/GPUノードが異なるリソースを有するヘテロジニアスな環境となることがあります。 この際、ジョブが想定するリソースを持つ計算/GPUノードで実行されることを保証する必要がありますが、 **Slurm** のパーティションに割り当てられる計算/GPUノードを適切に指定することで、この運用要件を実現することが可能です。 -本Tipsは、前述の運用要件を念頭に、ジョブを投入するパーティションを使い分けることで想定する計算/GPUノードに適切にジョブが割当てられる **Slurm** 環境を構築する方法を解説します。 +前述の運用要件を念頭に本Tipsは、ジョブ投入パーティションを使い分けることで、想定するリソースを持つ計算/GPUノードに適切にジョブが割当てられる **Slurm** 環境を構築する方法を解説します。 構築する **Slurm** 環境は、計算ノードに6ノードの **[BM.Optimized3.36](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm#bm-hpc-optimized)** を使用し、これを **NUMA nodes per socket** (以降 **NPS** と呼称)と **Simultanious Multi Threading** (以降 **SMT** と呼称)の組合せが以下となるパーティション構成とします。(※1) -| パーティション名 | 割当てられるノード名 | NPS | SMT | デフォルトパーティション(※2) | +| パーティション名 | 割当てられるノード名 | NPS | SMT | デフォルトパーティション
(※2) | | :------: | :---------------------------------------------------------------------------------------: | :------: | :-: | :--------------: | | all | inst-aaaaa-x9 inst-bbbbb-x9
inst-ccccc-x9 inst-ddddd-x9
inst-eeeee-x9 inst-fffff-x9 | - | - | Yes | | nps1 | inst-aaaaa-x9 inst-bbbbb-x9 | **NPS1** | 無効 | No | @@ -279,7 +279,7 @@ PartitionName=smte Nodes=inst-eeeee-x9,inst-fffff-x9 MaxTime=INFINITE State=UP この設定は、 **BM.Optimized3.36** がノード当たり2ソケットでソケット当たり18コアでコア当たり2ハードウェアスレッドを搭載することを念頭に、 **NPS1** と **NPS2** と **SMT** 有効・無効の計算ノードを異なるリソース定義の **NodeName** フィールドで定義しています。(※3) -※3)**slurm.conf** 中の **Socket** は、 **NUMA**(Non-Umiform Memory Access)ノードに相当するため、 **NPS2** の場合は **Socket** がノード当たり4個として定義します。 +※3)**slurm.conf** 中の **Socket** は、NUMA(Non-Umiform Memory Access)ノードに相当するため、 **NPS2** の場合は **Socket** がノード当たり4個として定義します。 ## 3.2. slurm.conf修正の反映