2009,10,21, Wednesday
Rで並列処理 snow Rmpi MPICH PBS
プロセス生成機能がなく、mpirun を使わないといけないMPICHと、
RとsnowとRmpiとPBSとの連携
snowは普通にインストールする。
Rmpi インストール時、RmpiがMPIシステムを探しているのですが、その順番が
OpenMPI → LAM → MPICH or MPICH2
なので、戯れに違うMPIが入ってたりすると何だかわけのわからないことに。
(補足:MPICHを探す場所は、 /usr/lib/mpi or /usr/lib/mpich 他は知らん)
RとsnowとRmpiとPBSとの連携
snowは普通にインストールする。
Rmpi インストール時、RmpiがMPIシステムを探しているのですが、その順番が
OpenMPI → LAM → MPICH or MPICH2
なので、戯れに違うMPIが入ってたりすると何だかわけのわからないことに。
(補足:MPICHを探す場所は、 /usr/lib/mpi or /usr/lib/mpich 他は知らん)
まぁとにかく「このMPIを見てくれ!!」と言いたい場合は
% R CMD INSTALL Rmpi_version.tar.gz --configure-args=--with-mpi=/mpipath
またはRプロンプトで
> install.packages("Rmpi", configure.args="--with-mpi=/mpipath")
ちなみに、古いこんな記述もありました(使ってないけど)
% R CMD INSTALL --configure-vars="CC=mpicc CPPFLAGS=-I/mpipath/include LDFLAGS=-L/mpipath/lib" --configure-args="--with-mpi=/mpipath" Rmpi_version.tar.gz
ここ
で /mpipath は、MPIがインストールされたトップディレクトリ.
上記のように mpicc を指定しても、インストールの途中で「gccでいいよね」みたいなことを自分で言ってgccでコンパイルしてました。
gccのバージョンによると思われる。
次! snowの機能を使う準備
Rpath/library/snow/RMPISNOW を実行パスが通っているところにコピー
いよいよ実行、Rのスクリプトを用意し、PBSのシェルスクリプトは次の如く書く
#!/bin/sh
export R_PROFILE="/Rpath/library/Rmpi/Rprofile"
mpirun -machinefile $PBS_NODEFILE RMPISNOW --no-save -q -f your_R_script
ここでRprofileのexportが重要。
PBSを使わない場合もmpirunする前にこの環境変数を設定しなくてはならなりません。
RmpiのREADMEに書いてありますが、MPI_Comm_spawnが使えないMPIはこれをしろ と
で、これをqsubに突っ込めば並列処理はできるようになるのですが、なんかエラーが・・・
WARNING: unknown option '-p4pg'
ARGUMENT '/home/foo/work/PI1234' __ignored__
WARNING: unknown option '-p4wd'
ARGUMENT '/home/foo/work/' __ignored__
これは何かっつーと、mpirun がプロセスを生成するときは、並列計算させたいプログラム(この場合RMPISNOW つまり R に)
-p4pg /home/foo/work/PI1234 -p4wd /home/foo/work
とオプションを付けて実行します。詳しくはここで↓
[mpichでのプロセス起動] http://www.alde.co.jp/information/mpiinit/mpiinit.html
それをRが見ていて「そんなオプション知らん」と返しているもよう。
・・・今のとこ無視
なんか散々でしたが、一番参考になったのはRmpiのREADMEでした。
あと、クラスタ群で使うなら、当然全てのマシンを同じ環境にしておく必要あり。
MPIがいろいろ入っている場合は(いろいろ入ってるのにちゃんと連動して動くのはMPICHだけ っていう・・・・)とにかく全てフルパスで書く!!
補足熱烈歓迎
% R CMD INSTALL Rmpi_version.tar.gz --configure-args=--with-mpi=/mpipath
またはRプロンプトで
> install.packages("Rmpi", configure.args="--with-mpi=/mpipath")
ちなみに、古いこんな記述もありました(使ってないけど)
% R CMD INSTALL --configure-vars="CC=mpicc CPPFLAGS=-I/mpipath/include LDFLAGS=-L/mpipath/lib" --configure-args="--with-mpi=/mpipath" Rmpi_version.tar.gz
ここ
上記のように mpicc を指定しても、インストールの途中で「gccでいいよね」みたいなことを自分で言ってgccでコンパイルしてました。
gccのバージョンによると思われる。
次! snowの機能を使う準備
Rpath/library/snow/RMPISNOW を実行パスが通っているところにコピー
いよいよ実行、Rのスクリプトを用意し、PBSのシェルスクリプトは次の如く書く
#!/bin/sh
export R_PROFILE="/Rpath/library/Rmpi/Rprofile"
mpirun -machinefile $PBS_NODEFILE RMPISNOW --no-save -q -f your_R_script
ここでRprofileのexportが重要。
PBSを使わない場合もmpirunする前にこの環境変数を設定しなくてはならなりません。
RmpiのREADMEに書いてありますが、MPI_Comm_spawnが使えないMPIはこれをしろ と
で、これをqsubに突っ込めば並列処理はできるようになるのですが、なんかエラーが・・・
WARNING: unknown option '-p4pg'
ARGUMENT '/home/foo/work/PI1234' __ignored__
WARNING: unknown option '-p4wd'
ARGUMENT '/home/foo/work/' __ignored__
これは何かっつーと、mpirun がプロセスを生成するときは、並列計算させたいプログラム(この場合RMPISNOW つまり R に)
-p4pg /home/foo/work/PI1234 -p4wd /home/foo/work
とオプションを付けて実行します。詳しくはここで↓
[mpichでのプロセス起動] http://www.alde.co.jp/information/mpiinit/mpiinit.html
それをRが見ていて「そんなオプション知らん」と返しているもよう。
・・・今のとこ無視
なんか散々でしたが、一番参考になったのはRmpiのREADMEでした。
あと、クラスタ群で使うなら、当然全てのマシンを同じ環境にしておく必要あり。
MPIがいろいろ入っている場合は(いろいろ入ってるのにちゃんと連動して動くのはMPICHだけ っていう・・・・)とにかく全てフルパスで書く!!
補足熱烈歓迎
| BioInformatics::Utilities | 05:08 PM | comments (0) | trackback (x) |