FC2ブログ

HPC Do It Yourself Club 別館

クラスターインストールUSBを使い、クラスターを作る

 クラスターインストールUSBを使って、クラスターを構築する。クラスターインストールUSBはこちらの方法で作ったものだ。この記事で構築に使うクラスターは、2台のコンピュータで構成されているが、3〜512台構成のクラスターに対応可能だ(512台の上限は、ジョブスケジューラのLavaの上限による)。厳密に言えば、256台以上の場合は細部の修正が必要だ。しかし、それほど大規模なクラスターを、この記事だけを頼りに構築することはないだろうと思うので、そこには触れない。もし必要なら、コメントまたはメールで問い合わせて欲しい。メールはhpcdyic_support@hpc.co.jpまで。
 クラスターインストールUSBのテストと改良は日々行なっているが、想定範囲の狭さやハードウェアの違いによって、うまく動作しない場合があるかもしれない。その場合は、是非コメントやメールなどでフィードバックして欲しい。直ちに問題点を特定し、対策を取るつもりだ。
 ハードウェアはこちらのものだ。Infinibandスイッチ無し構成を使っている。InfinibandとEthernetはpeer to peerで接続しているので、それぞれケーブルは1本しか使っていない。こちらはフロントから見た写真だ。
test-machines-front.jpg  
リアから見ると下の写真のようになっている。オレンジのケーブルがEthernetで、右側に見える黒いケーブルがInfinibandだ。Ethernetはeth0とeth1、IPMI専用の3つ付いているが、ケーブルはeth0に接続している。
test-machines-rear.jpg 
eth0の右隣がeth1だ。USBコネクタはeth0の左に4つ付いている。フロントにはない。USBコネクタの上にあるEthernetコネクタはIPMI専用だ。このコネクタを使う代わりに、eth0用のコネクタをIPMI兼用として使うことができる。IPMI専用のコネクタを使うより、eth0用コネクタと兼用させたほうが、ケーブルやスイッチも兼用できるので便利だ。このblogでは兼用している。
rear-panel.jpg 
CPUは8コアのE5-2690 @ 2.9GHzが各ノード2個、メモリは最小構成の1ノード当たり32GBだ。このコンピュータ
6027r-label.jpg 
の詳細はこちらだ。
 クラスターインストールUSBを使って構築されるクラスターは、下図の様になる。図は2ノード構成の場合だ。3ノード以上の場合、計算専用ノードが増え、EthernetとInfinibandの接続がスイッチ経由になる。以下の説明では、サーバー兼計算ノードをMaster、計算専用ノードをSlaveと呼ぶことにする。クラスターと外部との通信は、Masterのeth1を通じてのみ行う。その他のネットワークは、クラスター内部通信専用だ。内部通信用IPアドレスは、外部と無関係に決めることができる。クラスター内部で重複していなければいい。
2nodes_cluster.jpg       
 上下に2台のコンピュータのうち、下をMaster、上をSlaveにする。Masterには追加のハードディスク等があり(今回はないが)重い(今回は同じ)ので、下にして重心を下げるためだ。
クラスターインストールUSBはこれを使った。
ciusb.jpg 
Masterから構築していく。Masterにキーボード、ビデオ、マウス(KVM)を接続し、クラスターインストールUSBを差し込む。システムディスクにするハードディスクまたはSSDを予め取り付けておく。取り付けるソケット、またはケーブルは、USBメモリーが挿入されていない場合、システムディスクが/dev/sdaになるように選択する。クラスターインストールUSBでの構築が終わってリブートした時、システムディスクが/dev/sdaでないと、立ち上がらないからだ。
insert-ciusb.jpg
電源を入れて、クラスターインストールUSBからブートする。そうなっていないなら、BIOSのブートプライオリティを設定して、USBメモリーからブートするようにする。
after-ciusb-boot.png   
シングルユーザーモードで立ち上がる。カレントディレクトリは/である。cd /root/ciを入力して、/root/ciに移る。このディレクトリに、クラスター構築に必要なファイルがある。右側が隠れて見えないが、クリックすると見える。
root-ci.png
この中で、クラスターを構成する各ノードのIPアドレス、ホスト名、コア数(MPIで使われる)を定義するファイルが、cluster.mapである。このファイルを、構築するクラスターに合わせて変更する。
cluster-map.png 
#で始まる行はコメントである。その他の行が、ノードを定義する行になる。ノードを定義する行の1行目が、Masterの定義である。その後ろに、Slaveの定義行が続く。上記の例では、MasterとSlaveが1台の2台構成のcluster.mapだ。これに、Slaveノード定義行を付け加えていくことにより、ノード数を自由に変更できる。IPアドレスとホスト名も(重複していなければ)自由に変更可能だ。重複やフォーマットのチェック機能はないので、編集する人の責任で行なって欲しい。
 この記事では、変更しないでこのまま使うことにする。./showdisk.shを入力し、インストール先のディスクを特定する。
showdisk.png 
/dev/sdaと/dev/sddが接続されているのがわかる。/dev/sddは、表示された容量を見ると、クラスターインストールUSBだ。インストール先は500GBの/dev/sdaになる。instmaster.shコマンドを使って、Masterをインストールする。instmaster.shコマンドのパラメータは、インストール先のディバイス名の最後の1文字だ。この例では、aになる。./instmaster.sh aを入力すると、インストールの最終確認をされるので、yesを入力する。
instmaster.png 
するとインストールが始まり、色々メッセージが出るが、なにもしないで6分程度待てば、インストールが終了する。
master-install-done.png
上記の図にスペルミスを発見してしまった。気になるが、機能には問題ないので、あとでまとめて修正することにしよう。
 これでMasterの構築は完了だ。shutdown後、USBを抜きインストール先のディスクから立ち上げる。
after-reboot-hpc01.png
 続いて、Slaveの構築に移る。KVMをSlaveコンピュータに接続し、クラスターインストールUSBを挿入する。電源をオンにし、USBからブートする。立ち上がったら/root/ciに移る。./showdisk.shコマンドで、インストール先を特定する。ここまではMasterでの手順と全く同じだ。Slaveをインストールするコマンドは、instslave.shが別に用意されている。パラメータは2つあり、1つめがインストール先のデバイス名の最後の1文字(/dev/sdaならa)、2つめがクラスターマップに記述されているホスト名だ。この例では、Slaveのホスト名はhpc02しかないが、3台構成以上のクラスターでは、現在インストールしようとしているノードのホスト名を選択して、2番目のパラメータに指定する。./instslave a hpc02を入力すると、インストールの最終確認をされるので、yesを入力する。
instslave.png
するとインストールが始まり、色々メッセージが出るが、なにもしないで6分程度待てば、インストールが終了する。
slave-install-done.png 
これでSlaveも構築完了だ。shutdown後、USBを抜きインストールしたディスクから立ち上げる。
after-reboot-hpc02.png
説明が長くなってしまったが、操作は簡単だ。時間も2台で15分程度だ。誰でもクラスターが構築できるはずだ。
rootの仮のパスワードはroot1234、一般ユーザーのhpcの仮のパスワードはhpc1234で登録してある。使い始めたらすぐに変更したほうがいいだろう。
 最後にクラスターの動作確認を簡単に行う。hpcでログインし、lavaが動作していることを確認し、クラスターの動作確認とする。
bhosts.png 本格的な使い方は、別の記事で書いていくつもりだ。


スポンサーサイト

テーマ:HPCクラスター - ジャンル:コンピュータ

ファイルをダウンロードして、クラスターインストールUSBを作る

 ファイルはこちらからダウンロードする。クリックすると次の画面が開く。うまく行かなかったら、閉じて再度クリックすると、うまくいくと思う。これを試している環境は、MacにVMWare Fusionを入れ、その上でCentOS6.2を動作させて確認している。環境の違いなどによって、うまくいかない場合は、コメントまたはメールで連絡して欲しい。問題点を解消するつもりだ。
iDisk.png
mkciusb.v0.01.tbzをクリックする。v0.01は改良が加えられて変化しているかもしれない。次の画面になる。大きくて右側が見えないかもしれないが、画像をクリックして全体を見て欲しい。右下にDownloadボタンがあるので、それをクリックする。
download.png
するとダウンロード確認画面が出る。Save Fileをクリック後OKをクリックする。
open_mkciusb.png
ダウンロードが始まる。
Downloading.png
ファイルサイズが約1.5GBあるので、ダウンロード完了まで、しばらく時間が掛かるかもしれない。ダウンロードが完了したら、Terminalを開きコマンドラインで作業する。ダウンロードした場所に行き、tarで解凍する。
untar-mkciusb.png 
画像だけでなく文字列も掲載しておく。
[hpc@hpcdiyc ~]$ cd Downloads/
[hpc@hpcdiyc Downloads]$ ls
mkciusb.v0.01.tbz
[hpc@hpcdiyc Downloads]$ tar xjf mkciusb.v0.01.tbz
[hpc@hpcdiyc Downloads]$ ls
mkciusb mkciusb.v0.01.tbz
[hpc@hpcdiyc Downloads]$ cd mkciusb
[hpc@hpcdiyc mkciusb]$ ls
ci LicenseClusterInstallUSB.txt showdisk.sh
cpusb.sh Readme.Lava usb.tbz
EULA.CentOS Readme_make_ClusterInstallUSB.txt
GPL ReleaseNote.txt
[hpc@hpcdiyc mkciusb]$
ディレクトリmkciusb下で作業する。ライセンス関係のファイルも入っているので、使う前によく読んで欲しい。これはフリーソフトである。CentOSとLavaをソースコードに変更を加えないで使っている。
 USBメモリーをマシンに差しこむ。容量は4GB以上あれば大丈夫だ。この例では8GBを使っている。Mac上で使っている関係で、下記のメッセージが出るので、Linuxに接続をクリック。
mac_or_linux.png 
自動的にマウントされてしまうが、後の作業に支障があるので、Desktop上でUSBメモリーのアイコンを右クリック後、Unmountを選択してクリックする。この後の作業はスーパーユーザーになる必要がある。showdisk.shを使って、接続されているディスク(USBメモリーも含めて)を確認する。
su-in-mkciusb.png 
文字列は以下のとおり。
[hpc@hpcdiyc mkciusb]$ su
Password:
[root@hpcdiyc mkciusb]# ls
ci LicenseClusterInstallUSB.txt showdisk.sh
cpusb.sh Readme.Lava usb.tbz
EULA.CentOS Readme_make_ClusterInstallUSB.txt
GPL ReleaseNote.txt
[root@hpcdiyc mkciusb]# ./showdisk.sh
Disk /dev/sda: 107.4 GB, 107374182400 bytes
Disk /dev/sdb: 7822 MB, 7822376960 bytes
[root@hpcdiyc mkciusb]#

USBメモリーは/dev/sdbであることがわかる。これの最後の文字を使って、./cpusb.sh bと入力する。bは上記で調べたUSBメモリーのディバイス名/dev/sdbの、最後の1文字だ。システムによって異なるので、表示されたディバイス名に応じて入力を変えて欲しい。すると、yesかnoかを聞いてくるので、yesを入力する。クラスターインストールUSBの作成が始まる。色々メッセージが出るが、気にしない。後は暫く待つだけだ。
cpusb.png
文字列は
[root@hpcdiyc mkciusb]# ./cpusb.sh b
Device=/dev/sdb DevNum=1
Will destroy /dev/sdb, OK? [yes/no]:yes
赤い文字が入力である。

終了まで13分40秒かかった。ちょっと長いような気がするが、Linux Nativeな環境ならもっと短いかもしれない。時間があるとき試して報告する。USBメモリーを抜いて、作業は終了だ。Linux環境さえあれば、極めて簡単だ。次の記事では、このUSBメモリーを使って、クラスターを構築する様子を書く。

テーマ:HPCクラスター - ジャンル:コンピュータ

第4回クラスターDIYセミナーのご案内

HPCDIYC会員の皆様

HPCシステムズの英です。
第4回クラスターDIYセミナーのご案内をお送りいたします。
内容を大幅に変更いたしました。
既にお使いのクラスター(外注業者が構築したかもしれない)に、
新規ノードを追加する方法の解説を加えました。
IPMIの解説も独立した時間を設けました。
ハードウェアの組立はあえて解説するまでもないことがわかりましたので、
なくしました。
クラスターインストールUSBは、ダウンロードして、どなたでもお作りになれますが、
おみやげでもお持ち帰り頂きます。
クラスターインストールUSBのダウンロードは、こちらを御覧ください。

クラスタDIYセミナー案内
 開催日時
第4回 5月17日(木)10時~17時
 場所
東京都港区海岸3-9-15LOOP-X 8階 HPCシステムズ会議室
    電話番号 03-5446-5530
田町駅からシャトルバスが出ています。5分程度で到着します。
乗り場と時刻表は、下記のPDFをご参照ください。
http://www.hpc.co.jp/assets/files/access_bus_hpcs.pdf
 参加費
無料
 募集人数
4名様
 セミナー内容(変更になる場合があります)
  10時〜11時30分
   クラスターインストールUSBでクラスター構築
   クラスターの動作確認
   GB EthernetとInfinibandでBandwidthとLatencyを比較する
   クラスターに新ノードを追加するには
   クラスターの各ノードのIPアドレスやhostnameなどの設定情報を変更するには
   クラスターの/homeと/optを別HDDにするには
   任意のディレクトリをNFSで共有するには(automountの仕方)
   新規ユーザーを登録して、パスワード情報を全ノードで有効にするには
   ユーザーの設定情報を、新規ユーザーでも有効にするには(/etc/skelの使い方)
  11時30分〜12時30分
   昼休み
  13時〜14時15分
   他人が作った(含外注業者)クラスターに新規ノードを追加するには
  14時25分〜15時25分
   Lava(ジョブスケジューラ)の使い方
   LavaでMPIジョブの投入の仕方
  15時35〜16時30
   IPMIの使い方
    リモートで電源オン・オフ・リセット、状態監視、BIOS設定変更
    リモートでOSインストール
    消費電力測定、最大消費電力を制限する
  16時30〜17時
   質疑応答
   その他

 以降の開催予定日時
第4回 5月17日(木)10時~17時
第5回 6月14日(木)10時~17時
第6回 7月19日(木)10時~17時
第7回 8月23日(木)10時~17時
第8回 9月20日(木)10時~17時
第9回 10月18日(木)10時~17時
第10回 11月15日(木)10時~17時
第11回 12月13日(木)10時~17時

以上よろしくお願いいたします。

-------------------------------------------
英 憲悦(はなぶさ けんえつ)
HPCDIYC担当
HPCシステムズ株式会社
Phone: 03-5446-5530
Fax: 03-5446-5550
mailto: hanabusa@hpc.co.jp
http://hpcdiyc.hpc.co.jp
-------------------------------------------

テーマ:HPCクラスター - ジャンル:コンピュータ

クラスターインストールUSB作成ソフト、ダウンロード可能

 このblogでは、HPCクラスターを動作させながら、いろいろ記事を書いている。自分でも便利だと思っているのが、クラスターインストールUSBだ。これを使えば、クラスターが簡単に構成できる。OSインストール、NFS設定、NIS設定、MPIインストールと設定、そしてジョブスケジューラ(Lava)のインストールと設定が、1ノード5分程度で完了する。2台あわせても10分強でクラスターが構築できるので、作っては壊しを何10回と繰り返してきた。3台以上のクラスターも、問題なく構築可能だ。
 この便利な、クラスターインストールUSB作成ソフトを、ダウンロード可能にした。限られたハードウェアでしか試していないが、USBからブート可能なほとんどのハードウェアで、動作可能だと思う。サポートも可能な限り行うので、興味がある方は是非試してみて、問題点や要望をフィードバックしてもらえると嬉しい。
 クラスターインストールUSBを作るには、Linux環境が必要だ。ダウンロードしたファイルを解凍したら、ライセンス関係のファイルを読んでから使って欲しい。USBの作り方も、ファイルに書いてある。USBができたら、クラスターへのインストールも、ファイルに書いてある。
 ダウンロードはこちら。中で、サポートはHPCDIYC会員に対してのみ行うと書いてあるが、完成度が高まるまでは、素性が明らかな、すべての人に対してサポートするつもりだ。
 フィードバックは、コメント欄、または、hpcdiyc_support@hpc.co.jpへメールで。 続きを読む

テーマ:HPCクラスター - ジャンル:コンピュータ

クラスターに新しいノードを追加する(ディスクコピー後の設定変更)

 クラスターを構成するコンピュータをノードと呼んでいるわけだが、ノードには2種類ある。1つはユーザーからのアクセスを受け、ユーザーの指示に従ってクラスターをコントロールするノードだ。通常1ノードだが、複数台の場合もある。この記事では当面1ノードの場合のみ扱う。呼び方は、フロントエンド、ヘッド、マスターなどがあるが、この記事ではマスターと呼ぶ。マスターノードでないノードを、計算ノード、スレーブなどと呼ぶが、この記事ではスレーブを使う。
 前記事ではスレーブノードのディスクをコピーするところまで書いた。この記事では、設定を変更して、ホスト名やIPアドレスなどを設定する。クラスターの全ノードの、IPアドレス、ホスト名、コア数が記述されたファイルを、cluster.mapと呼ぶことにする。このファイルを使って、クラスターを設定していく。2台構成(マスター1台、スレーブ1台)のクラスターに、スレーブが1台加わった。赤色が新たなノードだ。どこを変えなければいけないのか、概観する。
# cluster.map
#
# ip-address hostname #cores
#
192.168.1.1 hpc01 16
192.168.1.2 hpc02 16
192.168.1.3 hpc03 16
ホスト名は、/etc/sysconfig/networkに書かれている。hpc02をhpc03に変更する。
[root@hpc02 blog]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hpc02
NISDOMAIN=hpcs-nis
IPアドレスは、/etc/sysconfig/network-scripts/ifcfg-eth0に書かれている。192.168.1.2を192.168.1.3に変更する。
[root@hpc02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.2
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"

以上2つのファイルは、このノードのみでの修正だ。
続いて他のファイルも調べてみよう。クラスター内ノードのリストは、/etc/hostsに書かれている。ここに新ノードを加える。
[root@hpc02 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.1 hpc01
192.168.1.2 hpc02
192.168.1.3 hpc03

このファイルは全ノードで修正しなければならない。全ノードで修正しなければならないファイルは、他にもいくつかある。ということで、新ノードの修正よりも、既存ノードの修正のほうが手間がかかることがわかる。
以上の作業を全ノードでマニュアルでやっていたのでは、とても時間が掛かるし、間違いが発生する可能性も高い。そこで修正を自動で行うscriptを作った。cluster.mapを読み込み、コピー済みのディスクの第3パーティション(/ ディレクトリ以下)を修正する。コピー済みのディスクが、/dev/sddで、ノード名がhpc03だとすると、
./modify.sh d hpc03
のようにして使う。このscriptをちょっと変更して使えば、全ノードの修正が簡単にできると思う。時間がなかったので完成度は高くないが、急いで使いたい人は以下のscriptを試して欲しい。読んで意味が理解できない場合は、使わないで欲しい。問題が発生しても、筆者と関係者は責任を負えない。自己責任で使って欲しい。サポートは、HPCDIYC会員に対してのみ行う。HPCDIYC会員になるには、こちら。費用は発生しない。
[root@hpc02 ~]# cat modify.sh
#!/bin/bash
if [ $# != 2 ]; then
echo usage: $0 device-char[a-g] node-name
exit
fi
DEVICE=/dev/sd$1
PARTITION=${DEVICE}3
PART_TYPE=`fdisk -l ${DEVICE}|grep ${PARTITION}|awk '{print $6}'`
if [ "$PART_TYPE" != "Linux" ]; then
echo ${PARTITION} does not exist or is not Linux
exit
fi

MAP=./cluster.map
SOURCE_ROOT="/mnt"
mount ${PARTITION} ${SOURCE_ROOT}
TARGET_ROOT="root"
if [ -d $TARGET_ROOT ]; then
# echo $TARGET_ROOT exist, remove it.
rm -rf $TARGET_ROOT
fi

awk < $MAP \
-v NODE_NAME=$2 \
-v SOURCE_ROOT=$SOURCE_ROOT \
-v TARGET_ROOT=$TARGET_ROOT \
'
BEGIN {
master = 0
nodename = 0
nodeaddress = 0
netaddress = 0
numnode = 0
}
/^[^#]/ {
if (master == 0) {
master = $2
}
numnode ++
ipaddress[numnode] = $1
hostname[numnode] = $2
slots[numnode] = $3
if (netaddress == 0) {
netaddress = gensub(/([0-9]*\.)([0-9]*\.)([0-9]*\.).*/,
"\\1\\2\\30", $1)
}
if ($2 == NODE_NAME) {
nodename = $2
nodeaddress = $1
}

}

function setfile(dir, file) {
sourcefile = SOURCE_ROOT dir file
# print sourcefile
targetdir = TARGET_ROOT dir
# print targetdir
system("mkdir -p " targetdir)
targetfile = targetdir file
# print targetfile
}

END {
if (nodename == 0) {
printf("No such node: %s\n", NODE_NAME)
exit
}
printf("master=%s nodename=%s nodeaddress=%s netaddress=%s\n", master, nodename, nodeaddress, netaddress)
i = 1
for (i = 1; i <= numnode; i++) {
printf("%03d: hostname=%s ipaddress=%s slots=%s\n", i, hostname[i], ipaddress[i], slots[i])
}

### /etc/sysconfig/network
setfile("/etc/sysconfig/", "network")
while (getline 0) {
if ($1~/^HOSTNAME/) {
print "HOSTNAME=" nodename >targetfile
} else {
print $0 >targetfile
}
}
### /etc/sysconfig/network-scripts/ifcfg-eth0
setfile("/etc/sysconfig/network-scripts/", "ifcfg-eth0")
while (getline 0) {
if ($1~/IPADDR/) {
print "IPADDR=" nodeaddress >targetfile
} else {
print $0 >targetfile
}
}
### /etc/hosts
setfile("/etc/", "hosts")
file_exist = 0
while (getline 0) {
file_exist = 1
if (NF == 2) break
print $0 >targetfile
}
if (file_exist == 1) {
for (i = 1; i <= numnode; i++) {
printf("%s\t %s\n", ipaddress[i], hostname[i]) >targetfile
}
}
### /etc/hosts.equiv
setfile("/etc/", "hosts.equiv")
file_exist = 0
while (getline 0) {
file_exist = 1
if ($1~/^#/) {
print $0 >targetfile
}
}
if (file_exist == 1) {
for (i = 1; i <= numnode; i++) {
print hostname[i] >targetfile
}
}
### /etc/skel/.rhosts
setfile("/etc/skel/", ".rhosts")
file_exist = 0
while (getline 0) {
file_exist = 1
if ($1~/^#/) {
print $0 >targetfile
}
}
if (file_exist == 1) {
for (i = 1; i <= numnode; i++) {
print hostname[i] >targetfile
}
}
### /etc/lava/conf/lsf.cluster.lava
setfile("/etc/lava/conf/", "lsf.cluster.lava")
begin_host = 0
while (getline 0) {
if ($1 ~ /#.*/) print $0 >targetfile
else if ($1 == "HOSTNAME" && $2 == "model") print $0 >targetfile
else if (begin_host == 0) print $0 >targetfile
if ($1 == "Begin" && $2 == "Host") begin_host = 1
else if ($1 == "End" && $2 == "Host") {
for (i = 1; i <= numnode; i++) {
printf("%s\t!\t!\t1\t3.5\t()\t()\t()\n", hostname[i]) >targetfile
}
begin_host = 0
print $0 >targetfile
}
}
}
'
cp -r ${TARGET_ROOT}/* ${SOURCE_ROOT}
find ${SOURCE_ROOT} -name .rhosts -exec \
cp ${TARGET_ROOT}/etc/skel/.rhosts {} \;
umount ${PARTITION}

テーマ:HPCクラスター - ジャンル:コンピュータ

クラスターに新しいノードを追加する(システムディスクのライブコピー)

この記事に興味がある方は、HPCDIYC本館ホームページも見て欲しい。
 
 順調に使い続けてきたクラスターに、新たなノードを追加することは、よくあるだろう。その種のクラスターには、様々なソフトウェアが追加されたり、各種の設定がなされて、秘伝のタレ状態になっている場合が多い。新たなノードにOSからインストールし、古いノードと同様に設定やソフトウェアをインストールするには、時間と手間がかかる。もしかすると、古いノードで行った手順を忘れてしまったり、担当者がいなくなったりして、同じ事をやろうと思ってもできない、などという事態に陥るかもしれない。
 そのような場合に効果的な方法は、古いノードのシステムディスクをコピーして、必要な設定だけを書き換える、というものだ。外注して構築したクラスターに、自分で新ノードを追加する場合にも、役立つかもしれない。手順を、コピーと設定変更の2つに分けて、考えていく。OSはCentOS6.2を使って解説していく。他のディストリビューションやバージョンでは、異なる部分があるかもしれないが、ご容赦いただきたい。
*************************************************************************************************************************
 本解説は、実際の作業結果に基づいて書かれている。再現性が高い方法を選び、
できるだけ正確な記述を心がけているが、筆者の勘違いや想定範囲の狭さによって、同様の結果が得られない可能性がある。本解説に従って作業を行った結果、何らかの損害が発生したとしても、筆者及びHPCシステムズ株式会社は、なんの責任も負わない。作業者、あるいは作業指示者の自己責任で行なって欲しい。
*************************************************************************************************************************

 システムディスクのコピーで、最も簡単で確実な方法は、ddコマンドを使う方法だ。欠点は、ディスクの容量を同じにしなければならない点と、時間がかかる点だ。新しいノードを追加する場合、ほとんどの場合、計算専用ノードの追加だろう。だとすると、システムディスクの大部分は、使われていない状態だ。しかし、ddコマンドでは、使われていない部分も含めて、ディスクを丸ごとコピーする。試しに1GBだけコピーしてみて、コピー速度を測ってみた。
[root@hpc02 ~]# dd if=/dev/sda of=/dev/sdd bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 10.711 s, 100 MB/s
偶然100MB/sになった。システムディスクが500GBの容量だとすると、単純に考えても、コピーに要する時間は500GB/0.1GB/s=5000秒ということになり、かなりの時間待たなければならない。ノード1台の追加なら待てないことはないかもしれない。操作も1回だけで済む。しかし、2台以上の追加なら、コピーが終わるのを待って、次のコピーの操作をしなければならないことなどを考えると、待つのは勘弁して欲しいというところだ。
 もっと効率的な方法は、ファイルだけをコピーするものだ。これにも幾つかの方法が考えられるが、ここでは動作中ノードのシステムディスクをコピーする方法(ライブコピー)を採用する。コピー元のノードを一旦シャットダウンして、DVDやUSBからブートしなおし、コピーしたいシステムディスクが動作していない状態にすれば、手順はもっと簡単だ。
しかし、計算を止めたくない、あるいはブート可能なDVDやUSBを作るのが面倒などの場合、コピー元の動作中にシステムディスクをコピー出来れば好都合だ。この手順の解説は、システムを止めてのコピーにも応用可能だと思うので、そちらの解説は行わない。もし必要なら、コメントやメールなどでリクエストして欲しい。
 それでは具体的な解説に入る。新しいノードのシステムディスクにするハードディスクを、コピー元のノードに接続する。ホットプラグ可能なシステムならハードディスクを差し込むだけだが、そうでなければUSBアダプタなどを使い接続する。
hotplug.jpg 
次にシステムディスクがどのようにマウントされているか確認する。
[root@hpc02 ~]# df
Filesystem       1K-blocks          Used      Available    Use%    Mounted on
/dev/sda3        944702688    4887168   891827360         1%    /
tmpfs                  33040588             100     33040488         1%    /dev/shm
/dev/sda1               202219         33207          158572      18%    /boot
hpc01:/home  463989760    8464384   431955968        2%    /home
システムディスクが/dev/sdaであることがわかったので、パーティションがどうなっているか確認する。
[root@hpc02 ~]# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xde93fd4a

     Device Boot      Start           End          Blocks     Id    System
/dev/sda1       *               1             26         208813+   83   Linux
/dev/sda2                      27        2116    16787925      82  Linux swap / Solaris
/dev/sda3                  2117   121601  959763262+   83  Linux
以上から、システムディスクは3つのパーティションに分かれていて、最初のパーティションが200MBで/bootにマウント、2番目のパーティションが16GBでswap、残り全部が3番目のパーティションで/にマウントされていることがわかる。続いて、/etc/fstabを調べる。
[root@hpc01 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Feb 13 14:42:29 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID="954729a3-af4b-4260-b1c4-ad4757e157d6" /            ext4    defaults       1 1
UUID="14aaea5f-d9eb-40bc-af53-782932474caf"   /boot    ext4    defaults       1 2
UUID="a1f5fc87-dc60-497f-81d0-2d66e0b19704"   swap   swap   defaults       0 0
以下省略
UUIDを使ってマウントされていることがわかる。UUIDを使う方針だと、コピーされたディスクパーティションのUUIDは異なるので、コピー後blockidコマンドを使って新たなUUIDを調べ、fstabを書き換える必要がある。それだと手間がかかるので、コピー元をUUIDを使わないマウント方法に変更する。このやりかたには異論があるかもしれないが、拡張性や完全性を捨て、簡便性を得るためだ。念のため、オリジナルの/etc/fstabを別の名前にコピーして残しておき、/etc/fstabを次のように変更する。動作中に変更を加えても、問題ない。
[root@hpc01 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Feb 13 14:42:29 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/sda3       /            ext4    defaults       1 1
/dev/sda1       /boot    ext4    defaults       1 2
/dev/sda2       swap   swap   defaults       0 0
以下変更なし
UUIDを使ったマウントの/etc/fstabはシステムインストール時に自動的に作られる。UUIDを使うメリットを否定するわけではない。システムディスクをコピーして他のノードで使うなどという、イレギュラーな目的にはありがた迷惑になる。同様に注意すべきファイルがある。EthernetのMACアドレスがブート時に書き込まれてしまうファイルがある。このファイルを残したままシステムディスクのコピーを行うと、新しいノードでeth0やeth1が使えなくなってしまう(eth0とeth1がある場合、代わりにeth2とeth3になる)。/etc/udev/rules.d/70-persistent-net.rulesがそのファイルだ。
[root@hpc02 ~]# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x1521 (igb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:6a:e3:b2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x1521 (igb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:6a:e3:b3", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
このファイルを消去する。消去しても、次のブートで、新しいeth0とeth1のMACアドレスが書き込まれたものが、自動的に作られるので、心配は無用だ。
[root@hpc02 ~]# rm /etc/udev/rules.d/70-persistent-net.rules
コピー元に加える修正はこれで終わりだ。
続いて、コピー先のディスクディバイス名を調べる。
[root@hpc02 ~]# fdisk -l | grep "/Disk /"
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
Disk /dev/sdd: 500.1 GB, 500107862016 bytes
/dev/sdaはコピー元であることはわかっているので、/dev/sddがコピー先であることがわかる。コピー元と同様な構成のパーティションを作る。コピー元と全く同じにする必要はないが、/bootは(/の内部ではなく)別パーティションにする必要がある(元の構成がそうだから、変更するとgrub.confを変更する必要があるが、ここでは触れない)。fdisk /dev/sddコマンドを使うわけだが、使い方がわからなければコマンドを実行して、mを入力すれば表示されるので、それを見て欲しい。このへんについても解説が必要なら、メールまたはコメントでそう書いて欲しい。この解説では、/dev/sdaと同じ構成にした。/dev/sdaは1TB、/dev/sddは500GBなので、3番目のパーティションの容量だけが違う。パーティションを作ったら、各パーティションをフォーマットする。
[root@hpc02 ~]# mkfs.ext4 /dev/sdd1
[root@hpc02 ~]# mkswap /dev/sdd2
[root@hpc02 ~]# mkfs.ext4 /dev/sdd3
コマンドレスポンス表示は省略、/dev/sdd3では終了まで数分かかる
次に、コピー先がマウントされていないとコピー出来ないので、コピー元と同様な構造にマウントする。マウントするディレクトリはここでは/mntを使う。
[root@hpc02 ~]# mount /dev/sdd3 /mnt
[root@hpc02 ~]# mkdir /mnt/boot
[root@hpc02 ~]# mount /dev/sdd1 /mnt/boot
[root@hpc02 ~]# df
Filesystem  1K-blocks         Used      Available  Use%   Mounted on
/dev/sda3   944702688   4887404  891827124       1%   /
tmpfs             33040588            260    33040328        1%   /dev/shm
/dev/sda1           202219       33207         158572     18%   /boot
/dev/sdd3    463989668     202740  440217568       1%   /mnt
/dev/sdd1           202219         5902          185877      4%    /mnt/boot
いよいよファイルのコピーだ。コピー元である、/ 以下のディレクトリを確認する。
[root@hpc02 ~]# cd /
[root@hpc02 /]# ls
bin    cgroup etc    lib  lost+found misc net proc sbin srv  tmp var
boot  dev  home lib64  media     mnt   opt root  selinux  sys usr

/以下のファイルを/mntにコピーすればいいだけだが、全部をコピーしようとするとうまくいかない。cgroupとprocとsysはシステムがマウントするので除く。homeはnfsマウントされているので除く。mntはコピー先なので除く。ついでにコピーの時間もtimeコマンドで計測する。cpコマンドのオプションには-aを使って、属性(owner、時間等)が変化しないようにする。
[root@hpc02 /]# time cp -a [bdelnort-z]* media misc sbin selinux srv /mnt

real 4m39.852s
user 0m1.712s
sys 0m20.204s

時間は5分弱と、ddコマンドを使ってディスクを丸ごとコピーするのと比較して、遥かに短時間だ。
コピーしなかったディレクトリは、マウントポイントとして必要なので、mkdirコマンドで作成する。
[root@hpc02 /]# mkdir /mnt/cgroup /mnt/home /mnt/mnt /mnt/sys /mnt/proc
次に、grubを使って、MBRを書き込む。ちょっとわかりにくいので、入力部分は色を変えてある。
[root@hpc02 /]# grub
Probing devices to guess BIOS drives. This may take a long time.

GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> device (hd3) /dev/sdd
device (hd3) /dev/sdd
grub> root (hd3,0)
root (hd3,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd3)
setup (hd3)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd3)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd3) (hd3)1+27 p (hd3,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub> quit
quit

これでコピー作業は全て終了だ。コピー先のディスクは、ブート可能で使えるが、コピー元と全く同じ設定である。バックアップとしては役立つが、新たなノードには使えない。この後、新しいノードにするため、hostnameやIPアドレス等、幾つかのファイルを修正しなければならない。それについては次の記事で。



続きを読む

テーマ:HPCクラスター - ジャンル:コンピュータ

128GBメモリを使い切る

 前記事前々記事とでは、メモリは16GBほどしか使っていなかった。実装量のすべて128GBを使い切ると、16GB使用時に比べて消費電力は増えるのだろうか。興味があったので調べてみた。姫野ベンチのXLサイズ1024x512x512を各方向2倍にした、2048x1024x1024のXXLをプログラム内に追加して、実行してみた。実行時のメモリの様子だ。
top128g.png

ほとんど使い切っている。しかし消費電力はほとんど増えない。530Wから536Wに僅かに増えただけだ。
536W.png 

テーマ:HPCクラスター - ジャンル:コンピュータ

メモリ実装量と消費電力の関係

前回の記事で使用したマシンは、8GBのメモリモジュールを全スロット16枚に合計128GB実装している。最大消費電力は530Wであることがわかった。かなりの消費電力である。アイドル状態での消費電力は130Wになる。折角のチャンスなので、メモリを半分の8枚にしたら消費電力はどうなるか、調べてみた。計測に使ったプログラムは全く同じ姫野ベンチだ。配列のサイズを最大のXLにしても、16GB程度しか使用しない。
top.png  

470W.png 

最大消費電力は470Wと60W減った。
当然だが、1CPU当たり4枚以上のメモリが実装されているので、性能は全く変わらない。

メモリ実装量と消費電力の関係のまとめ

メモリ数(枚)816
メモリ量(GB)64128
アイドル時消費電力(W)110130
最大消費電力(W)470530

テーマ:HPCクラスター - ジャンル:コンピュータ

Power Cappingで電力不足の夏を乗り切ろう

 IPMIにPower Cappingというものがあることは以前書いた。最大消費電力を指定すると、それを超えないように、自動調整する機能だ。これを使えば、今年の夏も乗り越えられるだろうか?Power Capping機能を有効にしながら、ベンチマークプログラムを走らせて、その有用性を探ってみた。最大消費電力設定機能の精度を調べるのが目的ではない。そこはそれなりの精度を出せていると想定して、最大電力を制限するとどれだけ性能が落ちるかに焦点を当てたい。
テストに用いたマシンは、HPC Do It Yourself ClubのHPCDIY-2U2CPU128GB9だ。詳しい仕様はこちら。価格表はこちら。CPUは8コアE5-2690@2.9GHzが2個、メモリは8GBメモリモジュールが16枚で128GB実装のものを使った。
ベンチマークプログラムはこちらの記事に書いた姫野ベンチを使った。いくつかあるバージョンの中から、性能が出て、消費電力も大きい、FortranMPI版を選択した。OSはCentOS6.2を使った。OS標準付属のgfortranでは性能が出ないので、インテル® Parallel Studio XE Linux 版をインストールして使った。MPIが必要だが、Open MPI: Version 1.4.5をダウンロードし、Intel Compiler用にconfigureとmakeを行い、インストールした。
姫野ベンチの実行は、サイズの最も大きいXL(1024x512x512)で16コア並列実行した。配列の分割は、2 8 1が最も高性能だったので、全ててこれを使った。標準の実行時間は1分だが、最大消費電力になるまで時間がかかる(温度が上がりきるまでの時間)ことと、性能計測のばらつきを抑えるため、10分になるようプログラムを書き換えた。
プログラムとは関係ないが、BIOS設定で、Hyper Threadingは、HPCでは性能向上の役に立たないので、Disableにしてある。
コンパイルは、
mpif90 -O3 -ip -xhost himenoBMTxpr.f90
実行は、
mpirun -np 16 --byslot ./a.out <<_EOT_
xl
2 8 1
_EOT_

で行った。
最初は、当然だが、Power Capping無しで、性能(MFLOPS)と最大消費電力を測定した。その結果、実行速度は35568MFLOPSで、最大消費電力は、530Wであることがわかった。実行速度が理論値に比べて極端に低いのは、演算に比較してメモリの読み込みが非常に多いことによる。ここでは、Power Cappingで消費電力を制限すると、どれだけ性能が低下するかという相対値を調べるのが目的なので、絶対性能は気にしない。
530W.png 
次に、530Wの90%である477W、80%の424W、70%の371W、60%の318W、50%の265WにPower Cappingを設定しながら、上記と同様に、実行時間を10分にした姫野ベンチを実行していく。例えば、80%の424WにPower Cappingしたときは、以下のように表示される。例では設定値とぴったり同じだが、Current Power ConsumptionはRefreshボタンを押すたびに変化する。ざっと観察してみた感じでは、平均値が設定値を超えないような制御が行われているように見える。
424W.png 
測定結果は以下のようになった。
消費電力(W)消費電力(%)速度(MFLOPS)速度(%)
53010035568100
477903469197.5
424803484798.0
371703386595.2
318603010384.6
265502008656.5
消費電力を制限しても、性能はそれほど落ちていないことがわかる。消費電力を70%に制限しても、十分使える気がする。このベンチマークの場合、メモリアクセスが多いので、性能が落ちなかったのかもしれない。キャッシュが効いて、メモリアクセスが比較的少ないプログラムでは、傾向が変わる可能性がある。しかし、流体計算とか、構造解析とかの実用的プログラムは、メモリアクセスが多いので、その種のプログラムを多用する場合は、Power Cappingは大変有効ではなかろうか。HPC Do It Yourself Clubで販売しているコンピュータには、標準でIPMIが付属しているので、これを御購入頂き、この夏はPower Cappingで乗り切ってはいかがだろうか。


テーマ:HPCクラスター - ジャンル:コンピュータ

新しい製品価格表ができました

製品構成を多様にした、新しい価格表ができました。
2CPU製品に1CPU8コアだけでなく、1CPU6コア、1CPU4コアを加えました。
2012年3月7日に発表されたSandybridge2CPU製品は、主なところで、
CPU名コア数CPUクロック(GHz)
Intel Xeon Processor E5-2687W83.1
Intel Xeon Processor E5-269082.9
Intel Xeon Processor E5-266762.9
Intel Xeon Processor E5-264343.3
があります。
上記の価格表から、タワー型の静音タイプの価格(メモリは32GB構成で)を拾いだしてみると、
E5-2687W  8コア3.1GHzでは、¥651,000
E5-2960     8コア2.9GHzでは、¥693,000
E5-2667     6コア2.9GHzでは、¥567,000
E5-2643     4コア3.3GHzでは、¥409,500
となり、E5-2643構成製品の安さが際立ちます。
1CPU8コア製品では、クロックが上のE5-2687Wの方が、E5-2690より安いのは何故かと疑問に思うかもしれません。IntelのCPU卸価格がそうなっているからです。性能から価格が決まっているのではありません。従って、ワークステーションではE5-2690を買うなら、E5-2687Wを買ったほうが得、ということになります。残念ながら、E5-2687Wはワークステーション専用なので、ラックマウント製品には実装できません。
E5-2643 の選択は、キャッシュの効かないアプリケーション(流体計算とか構造計算とか)の場合、大いにありだと思います。

テーマ:HPCクラスター - ジャンル:コンピュータ

MPI版がOpenMP版より高速(姫野ベンチの場合)、これは他でもそうか?

姫野ベンチFortran90+OpenMP版Fortran90+MPI版を、コア数を変えて実行し、速度と消費電力を測定した。実行に使ったコンピュータは、Supermicro SYS−6017R−N3Fを2台、CPUはIntel Xeon CPU E5-2680 2.7GHzが各2個、ネットワークは標準搭載のGB Ethernet各1本、OSはCentOS6.2を使った。表中のOMPはOpenMP版、MPIはMPI版での実行結果だ。(gf)はCentOS6.2標準付属のgfortran、(if)はインテル® Parallel Studio XE Linux* 版でコンパイルしたバイナリを示す。インテル® Parallel Studio XE Linux* 版はNon-Commercial Software Development用を無償でダウンロードして使った。OMP版の実行には、8コア以下では
numactl --cpunodebind=0 --membind=0
を使い、16コアでは
numactl --interleave=all
を使って、実行速度を高めた。
MPI版はOpenMPI Version 1.4.5のソースコードをダウンロードし、インテルコンパイラー用にconfigureとmakeしインストールした。実行結果を以下に示す。OpenMP版よりMPI版がかなり高速な結果になった。これは私にとっては意外な結果だった。OpenMPの方が、メモリのコピーをしないで済むので、高速と思っていた。今回の結果、「MPI版がOpenMP版より高速」、というのは一般的なことなのだろうか。私の中で疑問は膨らむ。
コア数OMP(gf) MFLOPSWOMP(if) MFLOPSWMPI(if) MFLOPSW
1201814053651505521150
240071601031318010377200
471821801552021020704250
8125742502096727028441280
16212363602503639034389410
32NANANANA58500820
詳しくは、次回以降で。

テーマ:HPCクラスター - ジャンル:コンピュータ

メモリを使わないと、消費電力は少ない

前記事では、stressに--cpuオプションを使って、消費電力を計測した。しかしこれでは、メモリは全くといっていいほど使われない。HPCアプリケーションは、メモリも大量に使うものが多い。CPUもメモリも実用的に使うベンチマークを試したい。メモリをガンガン使うベンチマークはなんだろう。京コンピュータを世に知らしめた、Top500で有名なhplは、メモリを大量に使うこともできる。しかし、キャッシュが効果的なベンチマークなので、メモリアクセスは抑えられている。キャッシュが効かないベンチマークのほうが、メモリアクセスが多く、消費電力も多くなるのではなかろうか(単なる思い込みかもしれない、機会があれば検証してみたい)。キャッシュが効かないベンチマークといえば、姫野ベンチだろう。最新のバージョン(と言っても改変されたのは2001年12月らしい)では、スーパーコンピュータ(今では稀になったベクトル型コンピュータ、現存するのはSXのみか)の優位性(PCクラスターに比べて)を際だたせるため、メモリアクセスをより多くしてあるらしい。ということで、早速ダウンロードしてコンパイル後実行して、消費電力を測定した。詳しい顛末は、このあとゆっくりと書いていくが、ここでは結論のみを書く。16コアCPUフル稼働のみ(stress --cpu 16)の場合340W、姫野ベンチで16コアフル稼働の場合410Wと、結構な違いがあることがわかった。姫野ベンチでは、使用するメモリサイズを、S、M、L、XLと選択できるようになっている。410Wの最大消費電力は、LからXLにメモリ使用量を8倍に増やしても変わらなかった。よって、これ以上メモリサイズが大きくなったとしても、増えないと思われる。厳密に考えれば、メモリの実装量である64GBを使い切るテストをするべきなのだろうが、まだやっていない。現在メモリは8GBを8枚使っているが、最大実装の16枚に増やしたら、410Wを超える可能性は残っている。そのへんは、現メモリを使い切るテストも含めて、今後機会があれば検証してみたい。
フル稼働コア数CPUのみ(W)CPU+MEM(W)
0100100
1130150
2160200
4200250
8230280
16340410


テーマ:HPCクラスター - ジャンル:コンピュータ

フル稼働のコア数を変えて、IPMIで消費電力を計測する

テストに使っているコンピュータは、(Supermicro SYS−6017R−N3F)だ。このコンピュータ では、IPMIを使い消費電力の表示ができる。CPUが2個で合計16コアある。計算などでフル稼働しているコア数が変化すると、消費電力はどのように変化するのだろうか。あまり計測された例をみたことがない。せっかく道具が揃っているので、私が計測してみよう。CPUはIntel Xeon CPU E5-2680 2.7GHzが2個、メモリは64GB実装してある。OSはCentOS6.2をインストールした。この世代のCPUから実装されたAVX命令を活用したいからだ。
消費電力を計測するには、WEBブラウザを使ってIPMIにアクセスし、Power Managementメニューで消費電力の計測をする。何も計算していないアイドル状態で、Power Managementメニューのリフレッシュボタンを何回かクリックしてみると、90〜100W消費していることがわかる。消費電力の積算は表示されないので、平均値はわからない。平均値を書けないので、今後は「アイドル状態の消費電力は100W」のように、おおよその最大値を記していく。
任意の数のコアをフル稼働させるにはどうしたらいいだろうか。様々な方法が考えられるが、ここではWEBからダウンロードできて、簡単に実行できる(必要ならコンパイルなどをして)プログラムを探して、それを実行することにした。最初に目についたのが、stressだ。とりあえずダウンロードして試してみる。カレントディレクトリ下のDownloadディレクトリにダウンロードの後は、
[hpc@hpcdiyc ~]$ cd Downloads/
[hpc@hpcdiyc Downloads]$ ls
stress-1.0.4.tar.gz
[hpc@hpcdiyc Downloads]$ tar xzf stress-1.0.4.tar.gz
[hpc@hpcdiyc Downloads]$ ls
stress-1.0.4 stress-1.0.4.tar.gz
[hpc@hpcdiyc Downloads]$ cd stress-1.0.4
[hpc@hpcdiyc stress-1.0.4]$ ./configure
[hpc@hpcdiyc stress-1.0.4]$ make all
[hpc@hpcdiyc stress-1.0.4]$ su
Password:
[root@hpcdiyc stress-1.0.4]# make install
[root@hpcdiyc stress-1.0.4]# exit
exit
[hpc@hpcdiyc stress-1.0.4]$ which stress
/usr/local/bin/stress
[hpc@hpcdiyc stress-1.0.4]$ man stress
などとして、使えるようにする。
実行は、例えば16コア全部をフル稼働状態にするには、
[hpc@hpcdiyc ~]$ stress --cpu 16
とする。CPUはすぐフル稼働状態になるが、ファンの回転数はすぐには上がらない。CPUの温度上昇に従って、次第に高回転になっていく。最大消費電力の測定は、ファンの回転数が上がり切ってから行う。ファンの回転音を聞いていれば自然にわかる。値はばらつくので、何回か測定し、最大値を消費電力とした。
測定結果は以下のような感じになった。
フル稼働コア数消費電力(W)
0100
1130
2160
4200
8230
16340
しかしこの結果は、当てにならない値だと、このあとでわかった。それについては次の記事で。

テーマ:HPCクラスター - ジャンル:コンピュータ

テスト環境

テストに使ったハードウェアの様子だ。日東工業の24UのラックFS100-612ENに、Supermicro SYS−6017R−N3Fを2台取り付けたシステムを使った。
testroom.jpg
ラックの前後のドアと
RackDoor.jpg
左右のパネル
RackSidePanel.jpg
は外してある。
1台目にキーボード、マウス、ビデオを接続し、2台目には1台目から出たEthernetだけを接続した。電源は2台とも接続してある。
machineBack.jpg
この状態にする前に、2台目にキーボード、マウス、ビデオを接続し、BIOS設定でIPMIのIPアドレスを192.168.2.102に設定した。こうしておけば、2台目は1台目から遠隔操作できるので、2度とキーボード、マウス、ビデオを接続する必要はなかった。


テーマ:HPCクラスター - ジャンル:コンピュータ

Active Processor Cores

BIOS設定項目にActive Processor Coresというのがある。
ActiveProcessorCores.jpg
このCPUは8コアだが、
CpuInfo.jpg
動作するコアの数を、1、2、4、6、8から選択できる。ほとんど使うことはないと思われるが、なにかの時に役に立つかもしれない。
AllTo1.jpg
2CPUで共通の設定なので、片方だけを変更することはできない。念のため。

テーマ:HPCクラスター - ジャンル:コンピュータ

IPMIで消費電力計測と最大消費電力の規制

IPMIのPower Managementメニューで消費電力の計測ができます。
このマシンは、Supermicro SYS−6017R−N3Fという製品で、Intel Xeon CPU E5-2680 2.7GHzを2個搭載し、メモリは64GBです。アイドル時の消費電力は96Wです。
power-idle.jpg
16コアすべてを使って計算すると、340Wの消費電力であることがわかります。
power-16.jpg
Power Capping機能を使えば、最大消費電力を低めに設定することができます。16コアすべてを使った時でも、例えば300Wに抑えるというようなことが可能になります。
powercap300.jpg

テーマ:HPCクラスター - ジャンル:コンピュータ

KVM over LANを使い、 遠隔操作で、BIOS設定、OSインストール

前記事で触れたConsole RedirectionとはKVM over LANの事だ。KVMとはキーボード、ビデオ、マウスの事だ。これらがないとできないことといえば、BIOS設定、OSインストール等だろう。OSが立ち上がってしまえば、KVMがなくても、ネットワーク経由でなんでもできる。KVMのケーブルを延ばすには限界があるので、BIOS設定、OSインストールは、マシンの近くまで行かないと出来ないというのが、これまでの常識だった。付け加えると、ハングアップしたマシンの電源を切ったり、リセットしたりすることも、同様だった。だが、IPMIのConsole Redirectionを使えば、ネットワークさえつながっていれば、どこからなんでもできるようになる。部品の交換などは、さすがに無理だが。IPMIとはInteligent Platform Management Interfaceの略だ。サーバー型のコンピュータの中にBMC(Baseboard Management Computer)と呼ばれる小さなコンピュータが内蔵されており、電源ケーブルが接続されている限り、常に動作している。BMCが、サーバー内部の温度、ファンの回転数、各部の電圧、などを監視と記録していて、問題が生じれば、管理者に知らせることができる。遠隔地からの、電源オン・オフ、リセット、Console Redirectionなどを行うのも、BMCだ。BMCがConsole Redirectionを行なっても、遠隔地のコンピュータのキーボードをBMC経由でサーバーに接続し、サーバーのビデオを遠隔地のコンピュータの画面に表示するためには、遠隔地のコンピュータ上でConsole Redirectionに対応する仕組みが必要だ。WEBブラウザにはそのような仕組みは内蔵されていない。WEBブラウザでBMC(IPMI)にloginしていて、Console Redirectionが必要になると、BMCはjviewer.jnlpというファイルを遠隔コンピュータ(WEBブラウザが動作している)に送り、その実行を指示する。jviewer.jnlpが遠隔コンピュータ上で、BMCと協調しConsole Redirectionを行う。下図は、jviewerでサーバーのBIOS設定を行う画面だ。
bios-main.jpg
KVMの他に記憶装置も遠隔接続できれば、OSのインストールが普通にできる。jviewerにはその仕組みもある。下図は、遠隔コンピュータ上のCentOS6.2インストールDVD、isoイメージをサーバーの仮想メディアにしたところだ。
iso-image-connection.jpg
これが終われば、普通にOSのインストールが出来る。
welcome2centos.jpg



テーマ:HPCクラスター - ジャンル:コンピュータ

WEBブラウザでIPMIにアクセスする

Linux標準装備のWEBブラウザ、firefoxでIPMIにアクセスしてみます。url入力欄に、先程IPMIのアドレスとして設定した、192.168.2.102を入力します。
firefox.jpg
するとlogin画面が表示されますので、UsernameとPasswordにどちらもADMINと入力します。マニュアルには、your Usernameとyour Passwordを入れろと書いてあるのですが、loginできないと設定できないじゃない、どうするのよと、途方にくれました。結局ネットで探したら、初期値がADMINとわかって、めでたくlogin出来ましたが、これがわかるまで、結構苦労しました。
IPMI-login.jpg
loginするとこの画面が現れます。
IPMI-after-login.jpg
いくつかメニューがありますが、遠隔操作はRemote Control、電力関係はMiscellaneousのメニューにあります。
remote-control.jpg
遠隔操作で便利だと思うのは、上記メニューの中の、Remote Consoleです。BIOS設定や、OSインストールも遠隔地から可能になります。詳しくは次の記事で。
miscellaneous.jpg
こちらのメニューのPower Managementで消費電力の計測と、上限の設定が可能です。詳しくは次の記事で。
このblogに興味を持っていただけるなら、こちらも是非ご覧ください。


テーマ:HPCクラスター - ジャンル:コンピュータ

BIOSでIPMI用IPアドレスを設定する

ネットワークでIPMIにアクセスできるよう、BIOS設定でIPMI専用のIPアドレスを設定する。IP addressの2行上にあるUpdateをYESにして、F4で設定内容をsaveしBIOSから抜ければ、設定したアドレスが有効になる。
ipmi-network-config.jpg
このマシンには、Ethernetのコネクタが3つ付いている。1つはIPMI専用、残りがLinux上のeth0とeth1だ。
コネクタ回り
IPMI専用コネクタは、USBコネクタの上にあるやつだ。他の2つと離れているので、感覚的にこれだなとわかる。しかし、デフォールトでは使われず、他の2つのうちの近い方のコネクタにデータが流れる。近い方のコネクタが、Linuxではデフォールトでeth0だ。従って、IPMIとeth0のネットワークアドレス(IPアドレスとサブネットマスクの論理積)は、同じでなければならない。このマシンは、eth0を192.168.2.2にしたので、IPMIは分かりやすいように100を加えて192.168.2.102にした。IPMI専用のネットワークを作ると、ケーブルやスイッチが余分に必要になるので、eth0と兼用するのは賢明な選択だと思う。
当然のことながら、IPMIとeth0のIPアドレスを同じにすることはできない。確認でやってみたが、Linuxが立ち上がるときに、eth0に設定すべきアドレスは既に他で使われている、というメッセージが出て、eth0が使用不能になった。


テーマ:HPCクラスター - ジャンル:コンピュータ

IPMIを使うには

IPMIを使うのは、思ったより簡単だった。2つをやるだけでいい。1.サーバーのBIOSでIPMI用のIPアドレスを設定する。2.既に動作しているコンピュータから、WEBブラウザでそのアドレスにアクセスする。たったこれだけだ。わかってしまえば簡単だが、これがわかるまで、もっといい方法があるんじゃないかと思い、結構試行錯誤を重ねた。それでは、具体的に書いていこう。

テーマ:HPCクラスター - ジャンル:コンピュータ

IPMIを試す

自分自身で、IPMIを使ったことがなかったので、いろいろ試している。やりたかったのは、サーバーの、消費電力情報取得と、遠隔操作だ。いろいろ試行錯誤を重ねて、まだ全部理解したとは言いがたいが、当初の目的は達成できた。このblogでは、試行錯誤も含めて、なるべくリアルタイムで、やってみたことを記録していきたいと思っている。テーマに区切りがついたら、文章を整理して、HPC Do It Yourself Club本館へアップしていくつもりだ。ここを見ている方は、是非本館も見て欲しい。本館は、http://hpcdiyc.hpc.co.jp/へ。

テーマ:HPCクラスター - ジャンル:コンピュータ