このチュートリアルは、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. インスタンス構成作成

本章は、 インスタンス構成 を作成します。

  1. OCIコンソールにログインし、HPCクラスタをデプロイする リージョン を選択後、 コンピュートインスタンス構成 とメニューを辿ります。

  2. 表示される以下画面で、インスタンス構成の作成 ボタンをクリックします。

    画面ショット

  3. 表示される インスタンス構成の作成 画面で、以下の情報を入力し 作成 ボタンをクリックします。
    なお、ここに記載のないフィールドは、デフォルトのままとします。

    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を確認した上でこれに同意します チェックボックスをチェックし イメージの選択 ボタンをクリック。)

    画面ショット

    • ShapeBM.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. クラスタ・ネットワーク作成

本章は、 クラスタ・ネットワーク を作成します。

  1. OCIコンソールにログインし、HPCクラスタをデプロイする リージョン を選択後、 コンピュートクラスタ・ネットワーク とメニューを辿ります。

  2. 表示される以下画面で、クラスタ・ネットワークの作成 ボタンをクリックします。

    画面ショット

  3. 表示される クラスタ・ネットワークの作成 画面で、以下の情報を入力し クラスタ・ネットワークの作成 ボタンをクリックします。
    なお、ここに記載のないフィールドは、デフォルトのままとします。

    3.1 名前 フィールド:クラスタ・ネットワーク に付与する名前

    画面ショット

    3.2 コンパートメントに作成 フィールド:クラスタ・ネットワーク を作成する コンパートメント

    画面ショット

    3.3 可用性ドメイン フィールド:クラスタ・ネットワーク をデプロイする 可用性ドメイン

    画面ショット

    3.4 ネットワーキングの構成 フィールド

    • 仮想クラウド・ネットワーク :先に作成した 仮想クラウドネットワーク を選択
    • サブネット :先に作成したプライベートサブネットを選択

    画面ショット

    3.5 インスタンス・プールの構成 フィールド

    画面ショット

  4. 表示される以下 クラスタ・ネットワークの詳細 画面で、ステータスが プロビジョニング中 と表示されれば、 クラスタ・ネットワーク と計算ノードの作成が実施されています。

    画面ショット

    ステータスが 実行中 となれば、 クラスタ・ネットワーク と計算ノードの作成が完了しています。
    作成が完了するまでの所要時間は、計算ノードのノード数が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 クラスタネットワーキングイメージ に含まれる OpenMPIIntel MPI Benchmark を使用し、 クラスタ・ネットワーク のノード間インターコネクト性能を確認します。

OpenMPI を計算ノード間で実行するためには、mpirunを実行する計算ノード(いわゆるヘッドノード)から OpenMPI 実行に参加する他の全ての計算ノードに対して、パスフレーズ無しでSSH接続できる必要があります。

また OpenMPI の実行は、これを実行する計算ノード間で必要なポートにアクセス出来る必要があるため、先に作成したプライベートサブネットのセキュリティリストを修正する必要があります。

以上より、本章で実施する Intel MPI Benchmark によるMPIプログラム実行は、以下の手順を経て行います。

  • 計算ノード間SSH接続環境構築
  • プライベートサブネット セキュリティリスト 修正
  • Intel MPI Benchmark Ping-Pong実行

3-1. 計算ノード間SSH接続環境構築

本章は、先にBastionノードで作成したSSH秘密鍵を全ての計算ノードにコピーすることで、全ての計算ノード間でopcユーザのパスフレーズ無しSSH接続環境を構築します。

  1. 以下コマンドをBastionノードのopcユーザで実行し、BastionノードのSSH秘密鍵を全計算ノードにコピーします。

    $ for hname in `cat ~/hostlist.txt`; do echo $hname; scp -oStrictHostKeyChecking=accept-new -p ~/.ssh/id_rsa $hname:~/.ssh/; done
    
  2. 以下コマンドをBastionノードのopcユーザで実行し、先のSSH秘密鍵のコピーでBastionノードに作成された全計算ノードのエントリを含むknown_hostsファイルを全計算ノードにコピーします。

    $ for hname in `cat ~/hostlist.txt`; do echo $hname; scp -p ~/.ssh/known_hosts $hname:~/.ssh/; done
    
  3. 以下コマンドを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. プライベートサブネットセキュリティリスト修正

本章は、プライベートサブネットの セキュリティリスト を以下の手順で修正します。

  1. OCIコンソールにログインし、計算ノードをデプロイしたリージョンを選択後、 ネットワーキング仮想クラウド・ネットワーク とメニューを辿ります。

  2. 表示される画面で、先に作成した 仮想クラウド・ネットワーク をクリックします。

  3. 表示される以下 サブネット フィールドで、先に作成したプライベートサブネットをクリックします。

    画面ショット

  4. 表示される以下 セキュリティ・リスト フィールドで、プライベートサブネットに適用されている セキュリティリスト をクリックします。

    画面ショット

  5. 表示される以下 イングレス・ルール フィールドで、SSHアクセスを許可しているルールの 編集 メニューをクリックします。

    画面ショット

  6. 表示される以下 イングレス・ルールの編集 サイドバーで、 IPプロトコル フィールドを すべてのプロトコル に変更し、 変更の保存 ボタンをクリックします。

    画面ショット

  7. 表示される以下 イングレス・ルール フィールドで、変更したルールの 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. クラスタ・ネットワークの終了

本章は、 クラスタ・ネットワーク を終了することで、作成したクラスタ・ネットワークと計算ノードを削除します。

  1. OCIコンソールメニューから コンピュートクラスタ・ネットワーク を選択し、表示される以下画面で作成した クラスタ・ネットワーク終了 メニューをクリックします。

    画面ショット

クラスタ・ネットワーク状態終了済 となれば、削除が完了しています。

これで、このチュートリアルは終了です。

更新日時: