ここにまとめようとしてる
諸般の事情により, CentOS8Streamをインストールする. うわさではCentOS7をCentOS8にしただけで10%程度高速になるという話であるし。
- 何が起こったのか400%高速になった例も存在する。
ここでは,Amazonでポチったマザーボード・CPU・メモリー・SSDを 電源にプチプチっとつないだマシンに,CentOS8Streamをインストールし、数台〜百台くらいの計算機クラスターを構築する方法を述べる。具体的には
- IPAをインストール -- IPAとはユーザー・ディスク・コンピュータ管理システムです
- IPAが不要な人 = PCが100台あったとして,1台づつパスワード設定とかしたい人
- IPAが必要な人 = 上記の作業が嫌な人
- RMSをインストール -- RMSとは計算機リソース管理システムです
- RMSが不要な人 = PCが100台あったとして,「どれつかってる?」と同僚に聞いて回るのが好きな人
- RMSが必要な人 = 上記の作業がアホらしく,「空いてるので勝手にやってほしい」と思う人
- ライブラリーをインストール
- ライブラリーが不要な人 = 補間とか積分とか授業で習ったから,初等的なのを自分で作りたい人
- ライブラリーが必要な人 = 補間とか積分とか授業で習ったけれども,プロの高速品を使いたい人
IPAサーバーをインストール
まだサーバーがないとかいう向きは、サーバーを作らねばならぬ。パッケージで対応るつもりはあるんですけどね。あまりにも手数が多すぎ。ここをみて頑張るしかねえです。
- サーバーインストールするでしょ
- 必要やったら共有ディスクば設定するとよか。マップさえあれば良か。
- その共有ディスクば使うユーザーを、登録するとよ
- 悪いことは言わんけん、レプリカもつくっとくと良か
- レプリカ作る場合,サーバーたちの逆引きDNSが必要な気がする
ここまでできたら、稼働するIPAサーバー(偽りのDNSサーバーたち)と、そのWebサイトにアクセスできる、管理ユーザー admin とそのパスワードがわかるわけよ。
流体力学分野のIPAサーバーは、10.249.229.111であるよ.
IPAクライアントを登録
サーバーが1台でもあれば、クライアントをいくらでも追加できます。クライアントは、なにぶん大量であるので、自動化してある。パッケージはこればい!こいつは、IPAサーバー&クライアント(ディスク共有機能付き)システムを作成する。
OSをインストールの前に、まんず、お前さが追加しようという、そのクライアントをIPAサーバーに登録だよ。
IPAサーバーにアクセス、【Network Services】【DNS】【DNS Zones】で、Zone情報を編集。
クライアントで追加するのは、次の3点だよ
- Aレコード。クライアント名とIPアドレスのペアを【Add】で作る
- ここで作るDNSサーバーは単なるフォワードサーバーであるにより、10.249.229.174 のマシンは h174 と登録しなければならん。
- CNAMEレコード。h174ではわけがわからないので、別名をつけることができる。
- 上の例では、h174に, 2011 年製ボールクラス初号機 ib2011-1 と別名を作成している。
- うちでは、年賀状クラス計算機を「ボール」、ゲーマークラス計算機を「ジム」、HPCクラス計算機を「ガンダム」と呼称している(元々は金銀銅だったかも)
- ボールにもビームライフルは装備されているが,連射すると発熱により搭乗者が死亡する場合があるので注意(2011年同期入隊12名のうち, 2020年まだ息があるのは8名だ)
- PTRレコード
- これは逆引きDNSのレコードである,
MPIで計算する場合に, 代表計算ノードの作業フォルダ /local/disk0 が他のノードから見えた方が便利である. 共有ディスク設定済みなら, /net/ノード名 でそれらが見えるようにできる. 具体的には 【Network Services】【Automount】【default】【auto.home】で計算ノードを追加しておく:
Keyに ノード名, mountにマウントオプション -fstyle=nfs4,rw,hard,intr ノード名:/disk0 を追加する.
IPAクライアントをインストール
CentOS8Streamのインストール自身には,DNSサーバーとしてIPAサーバーを指定する点以外,何もいうことはない。もしお前がふざけた設定でインストールして日本語変換ができなかったら dnf install ibus-kkc して日本語(さかな漢字)せよ。にゃお,計算ノードの作業ディスクはデフォルトで /local/disk0/tmp になっているので,高速な作業ディスク(RAID0とかNVMeとか)が/local/disk0に来るように設定した方が良い.インストールできたら
# dnf update -y ←とりあえずインストール後に行って気を落ち着けるのだ # reboot ←さあ、はじめよう
で、rootでログインし、パッケージをダウンロードしてインストール:
# mkdir -p /local/packages # cd /local/packages # git clone https://bitbucket.org/rgdkyotou/thirdparty.git # cd thirdparty
さて、Makefileのてっぺんを、あなたの環境に合わせて数行編集する必要がある。
ETHER=bond0 ←あなたのイーサネットデバイス名
RMS_SERVER=10.249.229.225 ←あなたのSLURMサーバー(既存、あるいはのちに作成)
DNS_TRUE=( 10.224.253.1 10.22.254.1 ) ←真実のDNSサーバー(公式サーバー軍)
DNS_FAKE=( 10.249.229.225 10.249.229.226 ) ←偽りのDNSサーバー(IPAサーバー軍)
では設定開始:
# make ipa-client IPADDR[10.249.229.174] HOSTNAME[h174.229.249.10.1016485.vlan.kuins.net] ipa-client完了しました! ... Discovery was successful! Do you want to configure chrony with NTP server or pool address? [no]: yes Enter NTP source server addresses separated by comma, or press Enter to skip: ntp.kuins.net ←あんたの適切なNTPサーバーを入力 Enter a NTP source pool address, or press Enter to skip: (RETURN) Client hostname: h174.229.249.10.1016485.vlan.kuins.net NTP server: ntp.kuins.net Continue to configure the system with these values? [no]: yes Synchronizing time ... Time synchronization was successful. User authorized to enroll computers: admin ← IPAサーバーの管理人とパスワード Password for admin@229.249.10.1016485.VLAN.KUINS.NET: いつものいつもの Successfully retrieved CA cert ... モジュラーの依存に関する問題: 問題 1: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBD-SQLite:1.58:8010020191114033549:073fa5fe-0.x86_64 問題 2: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64 お前は本名[h174]に通名をつけよう(嫌なら本名):ib2011-1 ib2011-1.229.249.10.1016485.vlan.kuins.net を h174.229.249.10.1016485.vlan.kuins.net の別名とする /etc/hosts, /etc/bashrc, /etc/profile に追記しました: 10.249.229.174 h174.229.249.10.1016485.vlan.kuins.net ib2011-1.229.249.10.1016485.vlan.kuins.net ipa-clientOK 4.8.0-13.module_el8.1.0+265+e1e65be4
残りの作業を行ってから再起動する:
# make kvm selinux # reboot
なお,上の作業で次が行われる:
- 仮想マシンを使う場合だけ役に立つKVMデーモンを切る(重要GCCビルドの実行ファイルが極高速に! ←2GBメモリとかの,ゴミマシンの場合)←KVM利用する場合はダメよ
- 仮想マシンを使う場合だけ役に立つvirbr0を削除(トラブルの元なので)←KVM利用する場合はダメよ
- firewall切断(意味がないので)←firewallの中のみ.壁外うろついていると巨人に喰われるよ
SLURMサーバーを作成
まだ作成していなければ、ネットワークに1台、リソース・マネジメント・システム(ジョブ管理システム)サーバー(RMS_SERVER)が必要である。ので、ここで作成する。あなたのネットワークにすでにSLURMサーバーが稼働しているのならば、SLURMクライアントの作成に進む。
まだ貴方がジョブ管理サーバーを作成していない場合,次のように作成する:
server# cd /local/packages/thirdparty server# make munge.key.create server# make slurm-server
お前の計算機クラスターの詳細は /usr/local/etc/slurm.conf で定義される. まんず,その情報をかけ. 上の方は関係ない.下の方で, サーバーの正式名称, 通称, スペック類, Featureを定義する. スペック類がわからない場合, slurmd -C で,そのマシンの妥当なスペック案を表示してくれる:
server# slurmd -C
NodeName=h225 CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=3935
で, /usr/local/etc/slurm.confの下の方で定義する:
NodeName=ib2007-3 NodeHostname=h225 CPUs=2 RealMemory=3935 TmpDisk=200000 Sockets=1 CoresPerSocket=2 ThreadsPerCore=1 Feature=CL0 Gres=none NodeAddr=127.0.0.1
サーバーを定義したら, 一番下で定義してある,ジョブクラス(PartitionName)にも入れておく.下の例では, サーバーib2007-3の他に, 計算ノードib2007-1, ib2007-2, ib2007-4, ib2011-1を定義してある:
PartitionName=S Nodes=ib2007-3 State=Up MaxTime=0-03:05 DefaultTime=0-03:05 OverSubscribe=FORCE:2 PriorityTier=100 PreemptMode=OFF
PartitionName=F Nodes=ib2007-[1,2,4],ib2011-1 State=Up MaxTime=1-00:05 DefaultTime=0-03:05 OverSubscribe=FORCE:2 PriorityTier=100 PreemptMode=OFF
PartitionName=B Nodes=ib2007-[1,2,4],ib2011-1 State=Up MaxTime=7-00:05 DefaultTime=0-03:05 OverSubscribe=FORCE:2 PriorityTier=20 PreemptMode=GANG
PartitionName=E Nodes=ib2007-[1,2,4],ib2011-1 State=Up MaxTime=30-00:05 DefaultTime=0-03:05 OverSubscribe=FORCE:2 PriorityTier=10 PreemptMode=GANG
PartitionName=L Nodes=ib2007-[1,2,4],ib2011-1 State=Up MaxTime=99-00:05 DefaultTime=0-03:05 OverSubscribe=FORCE:2 PriorityTier=1 PreemptMode=REQUEUE GraceTime=300
書き終わったら,サーバーを起動してみる:
server# smgr s This is SERVER サーバーデーモンさん再起動 SUCCESS ● slurmdbd.service - Slurm DBD accounting daemon Loaded: loaded (/etc/systemd/system/slurmdbd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-02-13 13:01:23 JST; 692ms ago ... ● slurmctld.service - Slurm controller daemon Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-02-13 13:01:24 JST; 20ms ago Process: 12165 ExecStart=/usr/local/sbin/slurmctld $SLURMCTLD_OPTIONS (code=exited, status=0/SUCCESS) ....
無事に起動できたら, ジョブクラスの一覧とか, ノードの一覧とかやってみる:
server# smgr j This is SERVER PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST S up 3:05:00 0/1/0/1 ib2007-3 F up 1-00:05:00 0/4/0/4 ib2007-[1-2,4],ib2011-1 B up 7-00:05:00 0/4/0/4 ib2007-[1-2,4],ib2011-1 E up 30-00:05:0 0/4/0/4 ib2007-[1-2,4],ib2011-1 L up 99-00:05:0 0/4/0/4 ib2007-[1-2,4],ib2011-1
デフォルトでは,次のジョブクラスが定義される:
- サーバークラス: ジョブ管理サーバーで実行するクラス
- ファーストクラス: 王族が利用するクラス
- ビジネスクラス: 貴族が利用するクラス.王族ジョブが来たら一時停止・再開
- エコノミークラス: ふつうの人が利用するクラス.高貴なジョブが来たら一時停止・再開
- ランディングギアクラス: 客が来たら強制終了されるクラス
計算ノードの一覧
server# smgr n This is SERVER NODE PARTITION C:S:T MEM,MB DISK,GB FEATURE STAT REASON ib2007-1 B,E,F,L 1:2:1 3935 150 CL0 idle none ib2007-2 B,E,F,L 1:2:1 3935 200 CL0 idle none ib2007-3 S 1:2:1 3935 200 CL0 idle none ib2007-4 B,E,F,L 1:2:1 3935 200 CL0 idle none ib2011-1 B,E,F,L 1:4:2 15728 1400 CL1,CL2 idle none
次に,クライアント増設の手順を説明する.
SLURMクライアントを作成
SLURMサーバーが設定済みであるならば
client# cd /local/packages/thirdparty client# make munge.key.copy あんたのRMSサーバー[10.249.229.225]のキーをコピーします Password:RMSサーバーのrootパスワードを入力 client# make slurm-client openssl完了しました! munge完了しました! MariaDBの管理パスワードを設定します. 以下のように答えるとよいぞ: Enter current passwd: (return) Set root password: Y New password, Re-enter new password お好きなパスワード入力 ... Remove Anonymous Users: Y Disallow root login remotey :Yn Remove test database : Y Reload priviledge talbes now: Y パスワードは覚えときんしゃい. (HIT ENTER KEY) Enter current password for root (enter for none): ... Set root password? [Y/n] Y New password:パウワード Re-enter new password:パウワード ... Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] n Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y ... Thanks for using MariaDB! さっきのよ: Enter password:パウワード mariaslurm h200.229.249.10.1016485.vlan.kuins.netB9*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 httpd完了しました! mailx完了しました! readline完了しました! pam完了しました! libcurl完了しました! python-devel完了しました! boostSubmodule path 'tools/quickbook': checked out '944f760cc2decfe745540f019cad078a57a27337' boostMwitools/quickbook boost...updated 16674 targets... boostぶうすとOK libevent-devel完了しました! openpmixCloning into 'openpmix'... openpmixSetting version 3.1.4 openpmixSwitched to a new branch 'v3.1.4' openpmixmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/openpmix' から出ます openpmixぴみくすOK slurmCloning into 'slurm'... slurmSwitched to a new branch 'slurm-19-05-4-1' slurmpatching file src/plugins/mpi/pmix/pmixp_client.c slurmUsing python3 as default slurm./configure --prefix=/usr/local --with-munge --with-pmix=/usr/local/pmix slurmconfig.status: executing libtool commands slurmmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/slurm' から出ます slurmumask 022; if [ -x /usr/lib/rpm/debugedit ]; then hsrcdir=`cd ../.. && pwd`; /usr/lib/rpm/debugedit -b $srcdir -d /usr/local/lib/slurm /usr/local/slurmmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/slurm' から出ます slurmすらるむOK gfortran完了しました! cmake完了しました! ompiDisable firewall for MPI nodes.... ompiRemoved /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. ompi[DOWNLOAD] ompiCloning into 'ompi'... ompiSwitched to a new branch 'v4.0.2' ompi[AUTOGEN] ompi[CONFIGURE] ompi./configure --prefix=/usr/local --with-slurm --with-pmix=/usr/local/pmix --with-libevent --with-hwloc=internal --with-ompi-pmix-rte --disable-mca-dso ompimake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/BASE/ompi' から出ます ompiえむぴーあいOK boost-mpi...updated 82 targets... boost-mpiぶうすとえむぴあいOK Making user slurm [666] Created symlink /etc/systemd/system/multi-user.target.wants/slurmd.service → /etc/systemd/system/slurmd.service. slurm-clientじっこーのーどOK Please start slurmd by [ systemctl start slumd ] AFTER YOU CONFIRM slurmd.conf that must include this machine as NodeName=h200 CPUs=48 Boards=1 SocketsPerBoard=2 CoresPerSocket=12 ThreadsPerCore=2 RealMemory=257845 or you can use [ smgr ] to apply [c] command
以上で、ソフトウェアのインストールは完了. 共有ディスクを使う場合は次も実行しておく:
client# make nfs-export
サーバーマシンの slurm.conf に,上記紫色データをもとに,このクライアントを追加する必要がある. サーバーにおいて slurm.conf を書き換えた場合, 全ての計算ノードに設定を伝達する.それは,サーバーにおいて以下のコマンドを実行する:
server# smgr d This is SERVER クライアントに送るぞ scp -q {/usr/local/etc/slurm.conf,/usr/local/etc/prolog.sh,/usr/local/etc/prolog-task.sh,/usr/local/etc/epilog.sh} ib2007-1:/usr/local/etc scp -q {/usr/local/sbin/StartDisk,/usr/local/sbin/FinishDisk} ib2007-1:/usr/local/sbin scp -q {/usr/local/etc/slurm.conf,/usr/local/etc/prolog.sh,/usr/local/etc/prolog-task.sh,/usr/local/etc/epilog.sh} ib2007-2:/usr/local/etc ....
各クライアントに対し,そのパスワードを尋ねられる場合もある.面倒である場合, サーバーにおいて作成した公開鍵を計算クライアントノードに登録しておけば良い.
あるいは,新規・既存の,全てのクライアントにおいて, 設定ファイルをサーバーから取得しても良い:
client# smgr d
サーバーからパクるぞ
準備ができたら,クライアントプログラムを起動しる:
client# smgr c 計算デーモンちゃん再起動 SUCCESS ● slurmd.service - Slurm node daemon Loaded: loaded (/etc/systemd/system/slurmd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-02-13 16:58:17 JST; 10ms ago ... 2月 13 16:58:17 h223.229.249.10.1016485.vlan.kuins.net systemd[1]: Started Slurm node daemon.
ノード一覧で表示に出ることを確認しよう.
client# smgr n
NODE PARTITION C:S:T MEM,MB DISK,GB FEATURE STAT REASON
ib2007-1 B,E,F,L 1:2:1 3935 150 CL0 idle none
ib2007-2 B,E,F,L 1:2:1 3935 200 CL0 idle none
ib2007-3 S 1:2:1 3935 200 CL0 idle none
ib2007-4 B,E,F,L 1:2:1 3935 200 CL0 idle none
ib2011-1 B,E,F,L 1:4:2 15728 1400 CL1,CL2 idle none
STATがidleにならない場合, 自分のノード名を使って
client# smgr on ib2007-1
としてみる.明確な理由が表示されてidleにならない場合(メモリーが足りねえとか,ネットワークが繋がらないとか)は,対応する問題点を解決する.初回は,なんや意味もなくエラーしてみちゃったりする場合もあり,ま,とりあえずonにしてみるのもよかろうて.
各種ライブラリーを整備
いずれにせよ,数値解析に用いる各種ライブラリーも準備する:
# make all gsl 完了しました! cmake 3.11.4-3.el8 ←インストール済みマーク python-devel 3.6.8-2.module_el8.1.0+245+c39af44f boost boost-1.71.0 libXt完了しました! libopengl完了しました! vtkSubmodule path 'ThirdParty/vtkm/vtkvtkm/vtk-m': checked out 'f2aa6ad5be1a97e3fb41ef4680ee2c76c3434ac0' vtkSwitched to a new branch 'v8.2.0' vtk-- Build files have been written to: /local/packages/thirdparty/CLUSTER/LIB/vtk.build vtkmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/vtk.build' から出ます vtkゔってけOK blas完了しました! gmp完了しました! mpfr完了しました! eigenCloning into 'eigen'... eigenSwitched to a new branch '3.3.7' eigenえいげんOK ntlgenerating ../include/NTL/config_log.h ntlmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/ntl-10.3.0/src' から出ます ntlNTL:OK Checking out files: 58% cgalSwitched to a new branch 'releases/CGAL-4.13.2' cgal-- Build files have been written to: /local/packages/thirdparty/CLUSTER/LIB/cgal/build/release cgalmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/cgal/build/release' から出ます cgalしーがるOK calcCloning into 'calc'... calcSwitched to a new branch '2.12.7.2' calcmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/calc' から出ます calcかるくOK nkfCloning into 'nkf'... nkfSwitched to a new branch 'v2_1_3' nkfmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/nkf' から出ます nkfnkf OK gfortran 8.3.1-4.5.el8 openssl 1:1.1.1c-2.el8 munge 0.5.13-1.el8 selinux disabled maria 3:10.3.17-1.module_el8.1.0+257+48736ea6 httpd 2.4.37-16.module_el8.1.0+256+ae790463 mailx 12.5-29.el8 readline 7.0-10.el8 pam 1.3.1-4.el8 libcurl 7.61.1-11.el8 libevent-devel 2.1.8-5.el8 openpmix v3.1.4 slurm slurm-19-05-4-1 ompi v4.0.2 boost-mpi boost-1.71.0 cryptoppCloning into 'cryptopp'... cryptoppSwitched to a new branch 'CRYPTOPP_8_2_0' cryptoppgmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/cryptopp' から出ます cryptoppくりぷとぴぃぴぃOK lapack完了しました! log4cplusconfig.status: executing libtool commands log4cplusmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/log4cplus-2.0.4' から出ます log4cpluslog4cplus:OK maria-devel 3:10.3.17-1.module_el8.1.0+257+48736ea6 mysqlppconfig.status: executing libtool commands mysqlppmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/mysql++-3.2.5' から出ます mysqlppmysqlpp:OK php完了しました! libpng完了しました! libXaw完了しました! texinfo完了しました! plotutilsCloning into 'gnu-plotutils-fd-patch'... plotutilsSwitched to a new branch '2.6.fd7' plotutilsconfig.status: executing depfiles commands plotutilsmake[1]: Leaving directory '/local/packages/thirdparty/CLUSTER/LIB/gnu-plotutils-fd-patch/plotutils-2.6' plotutilsplotutils:OK lzipOK. Now you can run make. lzipmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/lzip-1.21' から出ます lziplzip:OK GraphicsMagickjaist.dl.sourceforge.net (jaist.dl.sourceforge.net) をDNSに問いあわせています... 150.65.7.130, 2001:df0:2ed:feed:GraphicsMagick GraphicsMagickmake[1]: ディレクトリ '/local/packages/thirdparty/CLUSTER/LIB/GraphicsMagick-1.3.34' から出ます GraphicsMagickGraphicsMagick:OK
以上である.インストール済みのバージョン番号は, statフォルダーに保存されている. それを一覧表示することもできる
# make all
stat/該当パッケージ ファイルを消去すると, make all で新バージョンをインストールすることができるようになる.
最後に,定期的にコマンド類を更新するように設定しておこう;
# make daily