« 2007年06月 | メイン | 2008年01月 »

2007年09月

2007年09月09日

Linux HPCクラスターの構築(その2)

* え,ワタシが作るんですか?

で,件の助教授の先生のところに行き,やりたいことを説明してきました.ワタシのやりたいことを一般化すると,

非並列コードで書かれたコマンドに多数(数百から数百万,あるいはそれ以上)の異なるパラメーターを与えて実行したい.計算結果は互いに独立である.

ということになります.ワタシの説明がおわると,それならば,ということで,コンピュータールームにつれていってくれまして,PCの山を見せてくれました.ほほう,これ用のアカウントを発行してくれるのかと思っていると,

「ここに23台のPCがあるから,好きなクラスターをくみ上げていいよ.スイッチングハブとケーブルはちゃんとあるから」

といって,やおらパソコンを運び出しはじめるではないですか.いや話が早いのはいいのですが,当初の目論見ははずれ,自分でクラスターを組むことになってしまいました.

* openMosixでは力不足か?

今回のプロジェクトにあたり,図書館でオライリーの High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI という本を借りてきまして,参考にいろいろ考えたのですが,使いたいプログラムは非並列コードなんで,SSI環境がやりやすいのかな?ということと,日本語ドキュメントの豊富さから,openMosixをまずためしてみることにしました.また,openMosixには,ライブCD-Linuxである ClusterKnoppixをつかうことにより簡単に試すことができるという大きな魅力もあります.

ClusterKnoppixのインストール,運用ですが,これはGoogle先生に聞けば,多くの日本語ページを見つけることができるので,そちらにゆずるとして(というかCDを台数分焼いて,立ち上げるだけ),とにかく8台ほどを試しにスイッチングハブにつなげて立ち上げてみました.

手動で,20やそこらのプロセスを立ち上げてみると,どうやらうまいことうごいてくれてそうです.しかし,これが100以上となると,どうもうまくいきません.単純に100プロセスがたちあがって,それを8つのマシンでのそのそ動かすことになってしまいます.

メーリングリストなどを検索すると,とりあえずシステムデフォルトのbatchコマンドでバッチキューに入れてみろ,とのことなので,やってみました.結果は,どうも,順調に割り振られているようにはみえません.atdデーモンのオプションもいじってみたのですが,次々とジョブが投入されるようにはなってくれません.また,致命的なのは,数百,数千のジョブの投入はbatchコマンドには荷が重すぎるということです.途中でハングアップしてしまうようです.

どうやら,ワタシのやりたい用途には,ちょっとopenMosixは最適とは言えないようです.また,openMosixの開発の終了がアナウンスされましたし,ClusterKnoppixの開発も事実上終了しているということで,どうやらopenMosiixは時代遅れになりつつあるのかもしれません.

そこで,より適したシステムはないかと探していると,ワタシと同じような境遇のヒトの質問をweb上でみつけました.その回答の要点は(1)必要なのは優れたジョブスケジューラー.たとえばGridEngine(後述),(2)GridEngineならRocks Clusterにはじめから入ってるよ,ということでした.

* Rocks Clustersの導入

Rocks Clustersは オープンソースのLinuxディトリビューションで(ここ重要,逆に言うと他のディストロと共存はできない),ベースはCentOS(RedHat Linux Enterprise Editionをフリーにしたもの,もちろんRedHatのサポートはない)になっています.現在も活発に開発が続いています,先日NSFのグラントが当たったとのニュースが流れましたので,さらに開発が加速するんではないかと思います.

Rocks ClustersにはGridEngineが含まれています.GridEngine(旧称Sun Grid Engine [SGE])と呼ばれる,Sun主導で開発されているフリーのジョブスケジューラーシステムです.Sunはこれと全く同機能のものに,いくつか独自の品質管理工程とサポートサービスを加え,あるいは各国語にローカライズして,N1 GridEngineとして商業化しています,N1 GridEndineとしては,すばらしいことに日本語ドキュメントも公開しています

Rocks Clustersについては,日本語のドキュメントが少ないような気がします.これは国産の SCoreの存在も大きいんではないかと思います. おそらくSCoreはワタシの要求にすべて答えてくれるんではないかと思います.またSCoreには巫女ぐにょLinuxというライブCDもありますんで,なおさら選択肢としては有力なのですが,ここはアメリカですんで,素直にRocks Clustersを採用することにしました.しかし,実際に巫女ぐにょをつかったら,説明がむずかしいだろうなあ(「コミックマーケットっていうコンベンションでリリースされるディストロでして」とか,うーんクール).

* Rocks Clustersインストールの注意点

インストールそのものは簡単・・・なのかもしれませんが,ハマりどころ満載です.詳しいところはドキュメントを参考にしていただくとして,以下に箇条書きに落とし穴について書いておきます.というか,今回長々と書き始めたのは,以下のにがーい経験を広く知らしめるためなのでした.

  • Frontend nodeには必ずNICが2枚さされていなくてはならない.eth0がクラスター内部,eth1が外部ネットワークとの接続に使われる.
  • Frontend nodeには必ずFQDN・静的IPアドレスが割り振られてなくてはならない.インストール時にDHCPに問い合わせに行くので,うまくいくかと思ったが,これだと再起動後に破綻する.たぶんDNSを入力する手間を省くためじゃないかと思われる.
  • (追記) 少なくともFrontend nodeには1GB以上のメモリを搭載している必要がある。また,Compute nodesは最低512MBのメモリが必要。さもなければ,インストール中にカーネルパニックを起こす。
  • Roll(追加パッケージ)は,何も言わずに全部入れる.一部インストール後の追加が不可能なものがある.Gangliaとか.なんでもいいけどRocksとRollって,Rock'n Rollって言いたいのか?
  • デュアルブートとか余計なことを考えない.デフォルトのパーティション設定に任せる.ディスクレスノードはサポートされてない.
  • ネットワーク関係のインストール後の手動再設定は困難を極める.そういうときは迷わず再インストールする.
  • ドキュメントは,やっぱりあまり親切じゃない印象をうける.が,メーリングリストがものすごく活発なので,メーリングリストの検索でかなりの部分の疑問が解決する.

次回は,Rolls Clusters導入後のいろいろについて書きたいと思います.

投稿者 hmishima : 22:50

2007年09月08日

Linux HPCクラスターの構築(その1)

最近,このブログに対する,全世界のファンからのトラックバックが急増しています. なにやら文面が似たようなものばかりなのが気になりますが,ありがたく・・・ねぇよ!Movable Type のSPAM排除機構もいまいちのようで,Captcha(ねじれた文字を認識させることで,botによる自動送信を排除する) とか導入したほうがいいんでしょうけども...あとでしらべとこ.

さてさて,ひさびさのblog更新ですが,しばらく,ほとんど自分のためのメモですが, 分からない人(ほとんど)を置いてゆく,マニアックなお話をしたいと存じ奉り候.

* ぼくたちには計算力が足りない

ワタクシ,こちらにきてから,仕事上,遺伝統計学パッケージを日常的につかっているのですが, モノに依っては計算力不足を如実に感じるようになってきました.最近一番よく使うのはAssociation Study用の プログラムUNPHASEDです.

UNPHASEDは,確定しないハプロタイプの情報も捨てずに使うため,ハプロタイプ相関分析に力を発揮します. allwindow(10マーカーなら,連続した[スライディング]マーカーを含むウインドゥサイズを1から10までに変化させる)や, allcombination(全体から,1~10マーカーを選ぶすべての組み合わせ)をためすことで, 効果的に原因遺伝子の候補領域をせばめることができる...とワタシは理解しています.

ただですね.「組み合わせ」という言葉で想像されるように,マーカーの数が増えると, 指数関数的に計算量が増えるのが問題です.「ハプロタイプ」がそもそも組み合わせですし, ウインドウも組み合わせ.20マーカーのallwindow/allcombinationのウインドゥの数なんて 2^20-1=100万以上ですよ奥さん!こんなものをWindows上では動かせないし(3日で落ちた). Pentium4 3.6GHzのLinux (Debian) boxだって,1か月じゃすみません.

* コンピュータークラスター

こういった計算をやらせるのは,コンピュータークラスターに限る!と目をつけて勉強をはじめましたが, ここでまず「クラスター」ということばに複数の概念が混ざっていることで,当初混乱してしまったのです. 「Linuxクラスター」 ってのはLinuxベースの複数のマシンを組み合わせて,何らかの目的に使うということですね. で,その種類は「HAクラスター(高可用性クラスター,別名ノンストップクラスター)」 「負荷分散クラスター(webサーバーなどの負荷分散,Googleのサーバーとか)」などがあり, これは僕が今回必要なものとはちょっと違う. 最後が「HPC (High Performance Computing)クラスター(いわゆるスーパーコンピューターの類)」です. これが本稿で扱うクラスター.この辺の分類の理解ができるまで,Google様に翻弄されていたワタシなのでした.

* Linux HPCクラスター

いまスタンダードなのはLinuxをベースにしたHPCクラスターシステムです. これには大きく2つの方法がある(と理解してます).

まずSSI (Single Server Image)クラスター.具体的には openMosixOpenSSIKerrighed なんかが代表的なソフトウェアパッケージです. SSIはユーザーからみると大きなな一つのSMPマシン(複数のプロセッサをもつマシン)に見えるのが 特徴です.openMosixしか知らないので,これがSSI一般なのかわからないのですが, とにかく,プログラムを走らせて,一定時間経過すると,OSが勝手に負荷の軽いシンにプロセスをmigrate(移住?)させて くれます.結果は何事もなかったように最初のマシンに戻ってきます.クラスターの各ノードは平等で, どのノードから実行しても,うまくやってくれる・・・ようです.

次がいわゆるBeowulf型クラスター.「普通の」クラスターはこっちを差します. 基本的にはFrontend(マスターノード)からジョブを投入して,専用のノード間通信ライブラリ(MPIなど)を 使って書かれたプログラム(並列プログラム)を使い,各ノードで分散計算をさせます. 並列プログラムは必須というわけではないようです(後述).パッケージとしては OSCAR, 国産のSCore (すごい名前で有名なライブCD-Linux 巫女ぐにょLinux も採用). Rocks Clusters などがあります.

*さてクラスターはいずこ

と,ここまで勉強して,University of Iowa内で使えるクラスターはないかいな?と 検索していますと,ITS Reserach Serviceというところに「Linuxクラスターがあるよん」という 情報がありました.これ幸いと,問い合わせのメールを書くと,テクニカルディレクターの助教授の先生が 会ってお話しましょう,とのこと.早速,お話に行ってきました・・・・・が,そこには驚愕の事実が!待て次号!


追記・訂正です.

ドキュメントを読んでみたら,SCoreはSSI環境なんですね.同時にMPIもサポートしていると.そうすると,SSIかBeowulfか,などという分類は不適切ですね.

クラスター関連については,種々の用語・概念の階層というか,どれとどれが対応するレイヤーなのか,ということを,たぶんワタシは誤解しまくっているような気がします.ある用語が,概念(設計)なのか,パッケージなのか,単独のソフトウェアのことなのか,などなども混乱しています.

まあ,教科書を書いているわけではないので,まちがっていてもメモということでご容赦ください.できればコメント欄にツッコミをいれていただけるとありがたいです.

たぶん,一度,腰をすえて教科書を読んでみるべきなんでしょう.英語いやですけど.

投稿者 hmishima : 07:55