このチュートリアルは、HPC向けIntel Ice Lakeプロセッサを搭載する BM.Optimized3.36 を クラスタ・ネットワーク を使用してノード間接続し、HPCワークロードを実行するためのHPCクラスタを構築する際のベースとなるインフラストラクチャを構築、そのインターコネクト性能を検証します。
このチュートリアルで作成する環境は、ユーザ管理、ホスト名管理、共有ファイルシステム、プログラム開発環境、ジョブスケジューラ等、必要なソフトウェア環境をこの上に整備し、ご自身の要件に沿ったHPCクラスタを構築する際の基礎インフラストラクチャとして利用することが可能です。
なお、これらのクラスタ管理に必要なソフトウェアの導入までを自動化する HPCクラスタスタック も利用可能で、詳細は OCI HPCチュートリアル集 の HPCクラスタを構築する(スタティッククラスタ自動構築編) を参照ください。
またこのチュートリアルは、環境構築後により大規模な計算を実施する必要が生じたり、メンテナンスによりノードを入れ替える必要が生じることを想定し、既存の クラスタ・ネットワーク に計算ノードを追加する方法と、特定の計算ノードを入れ替える方法も学習します。
所要時間 : 約1時間
前提条件 : クラスタ・ネットワーク を収容する コンパートメント ( ルート・コンパートメント でもOKです)の作成と、この コンパートメント に対する必要なリソース管理権限がユーザーに付与されていること。
注意 : 本コンテンツ内の画面ショットは、現在のOCIコンソール画面と異なっている場合があります。
0. HPCクラスタ作成事前作業
0-0. 概要
HPCクラスタを構成する クラスタ・ネットワーク と計算ノードは、OCIコンソールから クラスタ・ネットワーク を作成することでデプロイします。
このため、この計算ノードをTCP接続する 仮想クラウド・ネットワーク と、インターネットから直接アクセス出来ないプライベートサブネットに通常接続される計算ノードにログインする際の踏み台となるBastionノードを、HPCクラスタ作成前に予め用意する必要があります。
本章は、これらHPCクラスタ作成の前提となるリソースを作成します。
0-1. 仮想クラウド・ネットワーク作成
本章は、計算ノードをTCP接続する 仮想クラウド・ネットワーク を作成します。
仮想クラウド・ネットワーク の作成は、 OCIチュートリアル の その2 - クラウドに仮想ネットワーク(VCN)を作る の手順通りに実行し、以下のリソースを作成します。
- 仮想クラウド・ネットワーク (10.0.0.0/16)
- パブリックサブネット(10.0.1.0/24)
- プライベートサブネット(10.0.2.0/24)
- インターネット・ゲートウェイ (パブリックサブネットにアタッチ)
- NATゲートウェイ (プライベートサブネットにアタッチ)
- サービス・ゲートウェイ (プライベートサブネットにアタッチ)
- ルート表 x 2(パブリックサブネットとプライベートサブネットにアタッチ)
- セキュリティリスト x 2(パブリックサブネットとプライベートサブネットにアタッチ)
この 仮想クラウド・ネットワーク は、 セキュリティリスト で以下のアクセス制限が掛けられています。
- インターネットからのアクセス:パブリックサブネットに接続されるインスタンスの22番ポート(SSH)に限定
- インターネットへのアクセス:インターネット上の任意のIPアドレス・ポートに制限なくアクセス可能
0-2. Bastionノード作成
本章は、計算ノードにログインする際の踏み台となるBastinノードを作成します。
Bastionノードの作成は、 OCIチュートリアル の その3 - インスタンスを作成する の手順を参考に、ご自身の要件に沿ったインスタンスを先の手順で 仮想クラウド・ネットワーク を作成した コンパートメント とパブリックサブネットを指定して作成します。
本チュートリアルは、以下属性のインスタンスをBastionノードとして作成します。
- イメージ : Oracle Linux 8.9ベースのHPC クラスタネットワーキングイメージ (※1)
- シェイプ : VM.Optimized3.Flex (任意のコア数・メモリ容量)
- SSHキーの追加 : Bastionノードにログインする際使用するSSH秘密鍵に対応する公開鍵
※1)OCI HPCテクニカルTips集 の クラスタネットワーキングイメージの選び方 の 1. クラスタネットワーキングイメージ一覧 のイメージ No.1 です。
次に、このBastionノード上でSSHの鍵ペアを作成します。このSSH鍵は、Bastionノードから計算ノードにログインする際に使用します。
先のチュートリアル インスタンスを作成する に記載のインスタンスへの接続方法に従い、BastionノードにopcユーザでSSHログインして以下コマンドでSSH鍵ペアを作成、作成された公開鍵を後の クラスタ・ネットワーク 作成手順で指定します。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/opc/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/opc/.ssh/id_rsa.
Your public key has been saved in /home/opc/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2EvR7FXtEYAsDknJG1oREie1kv2r1PN3OYrYCP/Xlyg opc@bast
The keys randomart image is:
+---[RSA 2048]----+
| +=*= . ..oo.|
| *B.+ o . ..|
| ooo* + . ..|
| ..+.+ . .|
| . S.. |
| .... |
| o.+ o o|
| . + *E.+ *.|
| . +.=+.o o|
+----[SHA256]-----+
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0TDo4QJPbXNRq/c5wrc+rGU/dLZdUziHPIQ7t/Wn+00rztZa/3eujw1DQvMsoUrJ+MHjE89fzZCkBS2t4KucqDfDqcrPuaKF3+LPBkgW0NdvytBcBP2J9zk15/O9tIVvsX8WBi8jgPGxnQMo4mQuwfvMh1zUF5dmvX3gXU3p+lH5akZa8sy/y16lupge7soN01cQLyZfsnH3BA7TKFyHxTe4MOSHnbv0r+6Cvyy7Url0RxCHpQhApA68KBIbfvhRHFg2WNtgggtVGWk+PGmTK7DTtYNaiwSfZkuqFdEQM1T6ofkELDruB5D1HgDi3z+mnWYlHMNHZU5GREH66acGJ opc@bast
$
次に、以降作成する計算ノードの名前解決をインスタンス名で行うため、 OCI HPCテクニカルTips集 の 計算ノードの効果的な名前解決方法 の手順を実施します。
次に、以降作成する計算ノードで実施する手順を pdsh を使用して効率よく進めるため、 OCI HPCテクニカルTips集 の pdshで効率的にクラスタ管理オペレーションを実行 の 1. pdshインストール・セットアップ の手順を実施し、 pdsh をインストール・セットアップします。
なおこの手順は、該当する手順を全ての計算ノードで実施する場合、必要ありません。
1. HPCクラスタ作成
1-0. 概要
クラスタ・ネットワーク は、作成時に指定する インスタンス構成 に基づいて作成時に指定するノード数の計算ノードを インスタンス・プール がデプロイし、これを クラスタ・ネットワーク に接続します。
計算ノードに使用する BM.Optimized3.36 に装備されるNVMeローカルディスクは、OS起動時点でファイルシステムが作成されていないため、 cloud-init でこの作成を行います。
以上よりHPCクラスタの作成は、以下の手順を経て行います。
- cloud-init 設定ファイル(cloud-config)作成
- インスタンス構成作成
- クラスタ・ネットワーク作成
なお計算ノードのOSは、HPC クラスタネットワーキングイメージ の Oracle Linux 8を使用します。
1-1. cloud-config作成
本章は、 cloud-init 設定ファイル(cloud-config)を作成します。
本チュートリアルは、 cloud-init を以下の目的で使用します。
- タイムゾーンをJSTに変更
- NVMeローカルディスクファイルシステム作成
- firewalld停止
以下は、本チュートリアルで使用する BM.Optimized3.36 用のcloud-configで、OCIコンソールを実行している端末上にテキストファイルで保存します。
#cloud-config
#
# Change time zone to JST
timezone: Asia/Tokyo
runcmd:
#
# Mount NVMe local storage
- parted -s /dev/nvme0n1 mklabel gpt
- parted -s /dev/nvme0n1 -- mkpart primary xfs 1 -1
- mkfs.xfs -L localscratch /dev/nvme0n1p1
- mkdir -p /mnt/localdisk
- echo "LABEL=localscratch /mnt/localdisk/ xfs defaults,noatime 0 0" >> /etc/fstab
- mount /mnt/localdisk
#
# Stop firewalld
- systemctl disable --now firewalld
1-2. インスタンス構成作成
本章は、 インスタンス構成 を作成します。
-
OCIコンソールにログインし、HPCクラスタをデプロイする リージョン を選択後、 コンピュート → インスタンス構成 とメニューを辿ります。
-
表示される以下画面で、インスタンス構成の作成 ボタンをクリックします。
-
表示される インスタンス構成の作成 画面で、以下の情報を入力し 作成 ボタンをクリックします。
なお、ここに記載のないフィールドは、デフォルトのままとします。3.1 インスタンス構成情報 フィールド
- 名前 :インスタンス構成 に付与する名前
- コンパートメントに作成 :インスタンス構成 を作成する コンパートメント
3.2 インスタンスの作成先のコンパートメント フィールド:計算ノードをデプロイする コンパートメント
3.3 配置 フィールド
- 可用性ドメイン :計算ノードをデプロイする 可用性ドメイン
3.4 イメージとシェイプ フィールド
- イメージ :Oracle Linux - HPC Cluster Networking Image
( イメージの変更 ボタンをクリックして表示される以下 イメージの選択 サイドバーで、 Marketplace を選択し検索フィールドに hpc と入力して表示される Oracle Linux - HPC Cluster Networking Image を選択して表示される イメージ・ビルド フィールドで OracleLinux-8-OCA で始まる最新を選択し、 Oracle Standard Terms and Restrictionsを確認した上でこれに同意します チェックボックスをチェックし イメージの選択 ボタンをクリック。)
- Shape :BM.Optimized3.36
(Change Shape ボタンをクリックして表示される以下 すべてのシェイプの参照 サイドバーで ベア・メタル・マシン をクリックして表示される BM.Optimized3.36 を選択し シェイプの選択 ボタンをクリック。)
3.5 プライマリVNIC情報 フィールド
- プライマリ・ネットワーク : 先に作成した 仮想クラウド・ネットワーク とプライベートサブネットを選択
3.6 SSHキーの追加 フィールド
- SSHキー :先にBastionノードで作成したSSH鍵ペアの公開鍵
( 公開キーの貼付け を選択することで入力フィールドを表示)
3.7 管理 フィールド(以下 拡張オプションの表示 ボタンを選択して表示)
- cloud-initスクリプト :先に作成した cloud-init 設定ファイル(cloud-config)を選択
( 参照 ボタンでファイルを選択)
3.8 Oracle Cloudエージェント フィールド(以下 Oracle Cloudエージェント タブを選択して表示)
- Compute HPC RDMA Auto-Configuration :チェック
- Compute HPC RDMA Authentication :チェック
1-3. クラスタ・ネットワーク作成
本章は、 クラスタ・ネットワーク を作成します。
-
OCIコンソールにログインし、HPCクラスタをデプロイする リージョン を選択後、 コンピュート → クラスタ・ネットワーク とメニューを辿ります。
-
表示される以下画面で、クラスタ・ネットワークの作成 ボタンをクリックします。
-
表示される クラスタ・ネットワークの作成 画面で、以下の情報を入力し クラスタ・ネットワークの作成 ボタンをクリックします。
なお、ここに記載のないフィールドは、デフォルトのままとします。3.1 名前 フィールド:クラスタ・ネットワーク に付与する名前
3.2 コンパートメントに作成 フィールド:クラスタ・ネットワーク を作成する コンパートメント
3.3 可用性ドメイン フィールド:クラスタ・ネットワーク をデプロイする 可用性ドメイン
3.4 ネットワーキングの構成 フィールド
- 仮想クラウド・ネットワーク :先に作成した 仮想クラウドネットワーク を選択
- サブネット :先に作成したプライベートサブネットを選択
3.5 インスタンス・プールの構成 フィールド
- インスタンス・プール名 :作成される インスタンス・プール に付与する名前
- インスタンス数 :デプロイする計算ノードのノード数
- インスタンス構成 :先に作成した インスタンス構成
-
表示される以下 クラスタ・ネットワークの詳細 画面で、ステータスが プロビジョニング中 と表示されれば、 クラスタ・ネットワーク と計算ノードの作成が実施されています。
ステータスが 実行中 となれば、 クラスタ・ネットワーク と計算ノードの作成が完了しています。
作成が完了するまでの所要時間は、計算ノードのノード数が2ノードの場合で10分程度です。
2. 計算ノード確認
本章は、デプロイされた計算ノードの環境を確認します。
2-1. 計算ノードログイン
計算ノードは、プライベートサブネットに接続されており、インターネットからログインすることが出来ないため、Bastionノードを経由してSSHログインします。Bastionノードから計算ノードへのログインは、計算ノードのインスタンス名を使用します。
計算ノードのインスタンス名は、OCIコンソールで計算ノードをデプロイした リージョン を選択後、 コンピュート → インスタンス とメニューを辿り、以下のインスタンス一覧からそのインスタンス名を確認します。
またこの画面は、計算ノードのIPアドレスも表示しており、これを使用してBastionノードからSSHログインすることも可能です。
計算ノードへのログインは、以下のようにBastionノードからopcユーザでSSHログインします。
$ ssh inst-ijeeq-x9
2-2. cloud-init完了確認
cloud-init は、計算ノードが起動してSSHログインできる状態であっても、その処理が継続している可能性があるため、以下コマンドをBastionノードのopcユーザで実行し、そのステータスが done となっていることで cloud-init の処理完了を確認します。
ステータスが running の場合は、 cloud-init の処理が継続中のため、処理が完了するまで待ちます。
$ pdsh -g all 'sudo cloud-init status' | dshbak -c
----------------
inst-ijeeq-x9,inst-mpdri-x9
----------------
status: done
$
2-3. タイムゾーン確認
以下コマンドをBastionノードのopcユーザで実行し、タイムゾーンがJSTになっていることを確認します。
$ pdsh -g all 'date' | dshbak -c
----------------
inst-ijeeq-x9,inst-mpdri-x9
----------------
Mon Jan 29 12:08:00 JST 2024
$
2-4. NVMeローカルディスクファイルシステム確認
以下コマンドをBastionノードのopcユーザで実行し、NVMeローカルディスク領域が/mnt/localdiskにマウントされていることを確認します。
$ pdsh -g all 'sudo df -h /mnt/localdisk' | dshbak -c
----------------
inst-ijeeq-x9,inst-mpdri-x9
----------------
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 3.5T 25G 3.5T 1% /mnt/localdisk
$
2-5. ファイアーウォール停止確認
以下コマンドをBastionノードのopcユーザで実行し、ファイアーウォールが停止されていることを確認します。
$ pdsh -g all 'sudo systemctl status firewalld | grep -e Active -e disabled' | dshbak -c
----------------
inst-ijeeq-x9,inst-mpdri-x9
----------------
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
$
2-6. クラスタ・ネットワーク接続用ネットワークインターフェース確認
以下コマンドをBastionノードのopcユーザで実行し、 クラスタ・ネットワーク 接続用のネットワークインターフェース(ens800f0np0)に10.224.0.0/24のネットワークアドレスに属するIPアドレスが設定されていることを確認します。
$ pdsh -g all 'ifconfig rdma0' | dshbak -c
----------------
inst-mpdri-x9
----------------
rdma0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 4220
inet 192.168.0.36 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::966d:aeff:fe00:63a0 prefixlen 64 scopeid 0x20<link>
ether 94:6d:ae:00:63:a0 txqueuelen 20000 (Ethernet)
RX packets 24 bytes 5200 (5.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 57 bytes 9952 (9.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
----------------
inst-ijeeq-x9
----------------
rdma0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 4220
inet 192.168.0.87 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::966d:aeff:fe00:9fc0 prefixlen 64 scopeid 0x20<link>
ether 94:6d:ae:00:9f:c0 txqueuelen 20000 (Ethernet)
RX packets 29 bytes 5500 (5.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 62 bytes 10565 (10.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$
3. MPIプログラム実行(2ノード編)
3-0. MPIプログラム実行(2ノード編)概要
本章は、計算ノードのHPC クラスタネットワーキングイメージ に含まれる OpenMPI と Intel MPI Benchmark を使用し、 クラスタ・ネットワーク のノード間インターコネクト性能を確認します。
OpenMPI を計算ノード間で実行するためには、mpirunを実行する計算ノード(いわゆるヘッドノード)から OpenMPI 実行に参加する他の全ての計算ノードに対して、パスフレーズ無しでSSH接続できる必要があります。
また OpenMPI の実行は、これを実行する計算ノード間で必要なポートにアクセス出来る必要があるため、先に作成したプライベートサブネットのセキュリティリストを修正する必要があります。
以上より、本章で実施する Intel MPI Benchmark によるMPIプログラム実行は、以下の手順を経て行います。
- 計算ノード間SSH接続環境構築
- プライベートサブネット セキュリティリスト 修正
- Intel MPI Benchmark Ping-Pong実行
3-1. 計算ノード間SSH接続環境構築
本章は、先にBastionノードで作成したSSH秘密鍵を全ての計算ノードにコピーすることで、全ての計算ノード間でopcユーザのパスフレーズ無しSSH接続環境を構築します。
-
以下コマンドをBastionノードのopcユーザで実行し、BastionノードのSSH秘密鍵を全計算ノードにコピーします。
$ for hname in `cat ~/hostlist.txt`; do echo $hname; scp -oStrictHostKeyChecking=accept-new -p ~/.ssh/id_rsa $hname:~/.ssh/; done
-
以下コマンドをBastionノードのopcユーザで実行し、先のSSH秘密鍵のコピーでBastionノードに作成された全計算ノードのエントリを含むknown_hostsファイルを全計算ノードにコピーします。
$ for hname in `cat ~/hostlist.txt`; do echo $hname; scp -p ~/.ssh/known_hosts $hname:~/.ssh/; done
-
以下コマンドをBastionノードのopcユーザで実行し、後の Intel MPI Benchmark Ping-Pongを実行する際に使用する計算ノードのホスト名リストを全計算ノードにコピーします。
なお、ホスト名リストを作成していない場合は、 OCI HPCテクニカルTips集 の 計算/GPUノードのホスト名リスト作成方法 を参照してこれを作成し、Bastionノードのopcユーザのホームディレクトリにファイル名 hostlist.txt で配置します。$ for hname in `cat ~/hostlist.txt`; do echo $hname; scp -p ~/hostlist.txt $hname:~/; done
3-2. プライベートサブネットセキュリティリスト修正
本章は、プライベートサブネットの セキュリティリスト を以下の手順で修正します。
-
OCIコンソールにログインし、計算ノードをデプロイしたリージョンを選択後、 ネットワーキング → 仮想クラウド・ネットワーク とメニューを辿ります。
-
表示される画面で、先に作成した 仮想クラウド・ネットワーク をクリックします。
-
表示される以下 サブネット フィールドで、先に作成したプライベートサブネットをクリックします。
-
表示される以下 セキュリティ・リスト フィールドで、プライベートサブネットに適用されている セキュリティリスト をクリックします。
-
表示される以下 イングレス・ルール フィールドで、SSHアクセスを許可しているルールの 編集 メニューをクリックします。
-
表示される以下 イングレス・ルールの編集 サイドバーで、 IPプロトコル フィールドを すべてのプロトコル に変更し、 変更の保存 ボタンをクリックします。
-
表示される以下 イングレス・ルール フィールドで、変更したルールの IPプロトコル が すべてのプロトコル に変更されていることを確認します。
3-3. Intel MPI Benchmark Ping-Pong実行
本章は、 Intel MPI Benchmark のPing-Pongを実行します。
OCI HPCパフォーマンス関連情報 の Intel MPI Benchmark実行方法 の OpenMPIでIntel MPI Benchmarkを実行する場合 の手順に従い、2ノードを使用するPing-Pongを実行します。
4. 計算ノード追加
本章は、作成した クラスタ・ネットワーク に接続する計算ノードを2ノード追加して4ノードに拡張します。
この手順は、 OCI HPCテクニカルTips集 の 計算/GPUノードの追加・削除・入れ替え方法 の 2. ノード数を増やす の手順に従い、計算ノードを2ノードから4ノードに拡張します。
5. MPIプログラム実行(4ノード編)
5-0. MPIプログラム実行(4ノード編)概要
本章は、追加した2ノードを含めた計4ノードで Intel MPI Benchmark のAll-Reduceを実行します。
5-1. 計算ノード間SSH接続環境構築
本章は、追加した2ノードを含めた4ノードの計算ノード間で、パスフレーズ無しのSSH接続ができる環境を構築します。
具体的な手順は、 3-1. 計算ノード間SSH接続環境構築 を参照ください。
5-2. Intel MPI Benchmark All-Reduce実行
本章は、 Intel MPI Benchmark のAll-Reduceを実行します。
OCI HPCパフォーマンス関連情報 の Intel MPI Benchmark実行方法 の OpenMPIでIntel MPI Benchmarkを実行する場合 の手順に従い、4ノードを使用するAll-Reduceを実行します。
6. 計算ノード入れ替え
本章は、構築した4ノードクラスタのうち1ノードにハードウェア障害等が発生した場合を想定し、この計算ノードを新たな計算ノードに入れ替えます。
この手順は、 OCI HPCテクニカルTips集 の 計算/GPUノードの追加・削除・入れ替え方法 の 3. ノードを置き換える の手順を実施します。
再度 5. MPIプログラム実行(4ノード編) に従い Intel MPI Benchmark を実行、インターコネクト性能が十分出ていることを確認します。
7. クラスタ・ネットワークの終了
本章は、 クラスタ・ネットワーク を終了することで、作成したクラスタ・ネットワークと計算ノードを削除します。
-
OCIコンソールメニューから コンピュート → クラスタ・ネットワーク を選択し、表示される以下画面で作成した クラスタ・ネットワーク の 終了 メニューをクリックします。
クラスタ・ネットワーク の 状態 が 終了済 となれば、削除が完了しています。
これで、このチュートリアルは終了です。