Rを用いたブートストラップ法の 大規模並列計算 東京工業大学・情報理工 下平英寿 2008/09/09 @ 統計連合大会
概要 東工大のスパコン TSUBAME の紹介 Rの並列化ライブラリ snow の紹介 大規模並列計算の体験談: pvclust, scaleboot
東工大のスパコン TSUBAME
TSUBAME @ Tokyo Tech TSUBAME: 10000 cpu くらい らしいですが 混雑しています TSUBASA: さいきん,GCOE(計算世界観)が700cpu くらい調達しました
Sun Fire X4600 Enterprise-Class Data Center Compute Engine 大規模分散並列型演算サーバ 高性能密結合分散並列型演算サーバ (合計: 639台) CPU : 8ソケット800 シリーズAMD Opteron 2.4GHz メモリ : 32GB (32x DIMM スロット) OS : SuSE Enterprise Linux 9 SP3 IB card : Voltaire HCA 400Ex-D single port 4X x 2 (latency/ 3.5μs) メモリ共有型演算サーバ群 (合計: 16台) CPU : 8ソケット800 シリーズAMD Opteron 2.6GHz メモリ : 64GB (32x DIMM スロット) OS : SuSE Enterprise Linux 9 SP3 合算ピーク性能 : 50.4 Tera Flops 合算メモリ容量 : 21.4 Tera Bytes Full performance Opteron processor modules (8 -total) Dual-Core Available CPU Module 6 PCI-Express slots - 4 – x8-lane slots - 2 – x4-lane slots Redundant, hot- plug fans 2 PCI-X slots (133MHz/64-bit) 24” deep
東京工業大学 学術国際情報センター TSUBAME Grid Cluster 大規模分散並列型演算サーバ 高性能密結合分散並列型演算サーバ メモリ共有型演算サーバ群 Sun Fire X4600 655nodes 16CPU/node 10480CPU Memory: 21.4TB type nodes CPU clock MEM/node A 639 2.4GHz 32GB B 16 2.6GHz 64GB ClearSpeed 360枚 ・・・655nodes InfiniBand Network Voltaire ISR 9288 ×8 100ギガビット級ネットワーク装置 200bps (片方向) 24Gbps (片方向) SuperTitanet ・・・ 42台 500GB 48disks 500GB 48disks 500GB 48disks ストレッジサーバA Sun Thumper (Code Name) 物理容量 1PB ストレッジサーバB NEC iStorage S1800AT 物理容量 96TB RAID6 ペタバイト級ストレッジサーバ
TSUBASA GCOE(計算世界観) Sun Blade X6250 ×90ノード 以下ノードあたり * Quad core Xeon E5440 2.83GHz × 2 (8コア) * メモリ DDR2 8GB (ただし,うち25ノードは16GB) * HDD 80GB SATA * InfiniBand (10GBps) * SUSE Enterprise Linux 9
ふつうにログインして使います
Rの並列化ライブラリ snow
Rとは? データ解析を主目的に開発された,オープンソー スのプラットフォーム C-likeなプログラミングのインタープリターで,いち おうオブジェクト指向 2000年ころからメジャー化したが,前身はAT&Tの ベル研で1984年ころ開発されたS CRANに登録された「公式ライブラリ」だけで1008 個(2007/03/05) すごい勢いで増殖! 特に,バイオインフォマティクスとか機械学習など の最新手法は,Rで実装されることが多い.(バイ オスタットの定型業務は昔からSAS)
Rにおける並列化 CRANのsnowライブラリを使うのが簡単. snowは内部でRmpiライブラリを利用します. OSでlambootをあらかじめ実行しておきます.
Using snow library: parLapply y[[1]] <- myfunc(x[[1]]) y[[2]] <- myfunc(x[[2]]) … y[[1000]] <- myfunc(x[[1000]]) ### multiple CPUs ### ## cluster initialization library(snow) cl <- makeCluster(100) ## computation y <- parLapply(cl, x, myfunc) ### single CPU ### ## computation y <- lapply(x, myfunc) 1000 iterations @ 1 cpu 10 iterations @ 100 cpus
Simple Example @ Shimodaira-lab
pvclust @ Shimodaira-lab
ブートストラップ リサンプリング法 複製データ n’=5 2 5 1 2 4 データ n=5 重複をゆるして 要素を選ぶ 1 2 3 4 5 ブートストラップ リサンプリング法 複製データ n’=5 2 5 1 2 4 データ n=5 重複をゆるして 要素を選ぶ 1 2 3 4 5 4 3 3 5 1 10,000回繰り返す 1 5 2 5 4 30年くらい前に提案され,広く利用されている.
pvclust (鈴木了太 くんの修論) 並列版のparPvclust関数 シングルCPU版 pvclust関数 ブートストラップ法では乱数で数値をかえて10000回くらいの繰り返し計算を行う.そこでR標準の繰り返し関数「lapply」をsnowで実装されてる「parLapply」におきかえている
snowにおける並列化と問題点 データx[1],...,x[10000]に関数fをクラスタclで計算する とき,parLapply(cl,x,f)とやる.R標準ではlapply(x,f)と やることを単純に並列化する. length(cl)=10なら,ベクトルxを10分割してノードに割 り振るだけ.そしてparLapplyは仕事をclusterApplyに 投げる. 粒度がそろわないときや,スレーブ能力にバラツキが あるとき,効率が悪い. 計算をある程度まとまった固まりにする(粒度を調 整)すると,効率がよくなる. 分枝限定法のような高度な並列化はできない.デ バッグも困難.snowにかわるライブラリの必要性.
snowにおけるロードバランシングの努力(あまり効果ない?) 標準のclusterApplyを改良?したのがclusterApplyLB.ためし に使ってみたら,スレーブのジョブ終了確認をポーリングで やっていて,すごく遅い.使わないほうがマシ.(ブートストラッ プは粒度がだいたいそろっているという事情もあります)
大規模並列計算の体験談
snowの起動 @ TSUBAME 704 cpu でも 20秒足らず OSレベルでジョブの投入に時間がかかります
利用例:ピクセルごとに数値計算してアルゴリズムのパフォーマンスを視覚化 263 sec * 54481 pixels / (60*60) = 3980 hours @ 1 cpu 10 hours @ 640 cpus クラスタがなければ,やろうとは思わないような計算 bootstrap probability one-sided p-value two-sided p-value
CPU数を変化させて計算時間を測定 マルチスケール・ブートストラップ法 (スケールは13コにした) B=10,000回の反復 pvclust: 階層型クラスタリング (マイクロアレイデータの分析につかった) scaleboot: 新たらしいマルチスケール法の実装 (系統樹推定につかった) RELL法: 対数尤度を直接リサンプリングするため,ブートストラップ法は行列計算だけ
CPU数 vs 計算速度 7分 @ 704 cpus 80時間 @ 1 cpu 並列化による改善
まとめ: snowによる並列計算 単純な反復計算ならば,既存のコードを簡単に並列 化できる. ブートストラップ法のように相互通信のない計算なら ば,CPU数(コア数)にほぼ比例して速くなる.CPUが 200個くらいまでなら,ほとんどリニアに増える. いろいろ問題もあります.