2020年10月07日 [R応用] OCTOPUSのOpenMPIでRを動かそう
_ [R応用] OCTOPUSにRをインストールしよう
Rってメモリインテンシブですっごいパフォーマンスに問題があるんだけど,みんな使いたいよね?これからのデータサイエンス的な解析作業増えてくるけど,もちろんデータも増えてくるし,もうみんなご苦労さまですよね.で,AWSとかGoogle Cloudとかsakuraとかクラウドサービスに頼る手もあるんだけど,実は大学の大型計算機センターの計算機って実は安いんだぜ?ということで弊センターのクラスタ型汎用スパコン,OCTOPUSを使ったらいいと思うんだ.大容量メモリノード(6T)もあるしね.でも押しなべてセンターの計算機ってだいたい古典的な計算アプリが高速に動くように設計されているし,そもそも運用がライトウェイト言語向けじゃないのね.一応動くけどサブセット,みたいな. で,実はOCTOPUSにもRはインストールされているものの,MPI対応版じゃないので,自前でコンパイルしちゃいましょう. 現時点で最新版のR-4.0.2を以下の手順でインストールしてみよう.OCTOPUSアカウントは自前で取得してくれよな!ちなみにOCTOPUSは
- RHEL 7.6
- GCC 4.8.5
- OpenMPI 3.0.0rc6
ってな環境です. あ,ビルドの前に~/.R/Makevarsを以下のようにしておいてね!大事だよ!
$ vi ~/.R/Makevars CC=mpicc CXX=mpic++ FC=mpif90 CFLAGS=-O3 -fopenmp -std=c11 -L/usr/mpi/gcc/openmpi/lib64 CXXFLAGS=-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64 FFLAGS=-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64
じゃあ,Rをビルドしていこう.
$ wget https://cran.r-project.org/src/base/R-4/R-4.0.2.tar.gz $ tar zxvf R-4.0.2.tar.gz $ cd R-4.0.2 $ BASE=/octfs/apl/HPC-X/hpcx-v2.2.0-gcc-MLNX_OFED_LINUX-4.2-1.2.0.0-redhat7.3-x86_64 $ source $BASE/hpcx-init.sh $ hpcx_load $ export CC=mpicc $ export CXX=mpic++ $ export FC=mpif90 $ export CFLAGS="-O3 -fopenmp -std=c11 -L/usr/mpi/gcc/openmpi/lib64" $ export CXXFLAGS="-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64" $ export FFLAGS="-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64" $ export LD_LIBRARY_PATH=/usr/mpi/gcc/openmpi/lib64:$LD_LIBRARY_PATH $ configure ... $ make
ってすればOpenMPI対応版のRがビルドできるよ!
_ [R応用] Rmpiをインストールしよう
RmpiはRからMPIを使うためのパッケージなんだけど,最新の(0.6.9)をインストールして使おうとすると,core dumpしまくって大変なんだ.なのでバージョンを固定してインストールするよ.バージョンは0.6.6だ!
$ cd R-4.0.2 $ wget https://cran.r-project.org/src/contrib/Archive/Rmpi/Rmpi_0.6-6.tar.gz $ ./bin/R CMD INSTALL ../Rmpi_0.6-6.tar.gz --configure-args="--with-mpi=/usr/mpi/gcc/openmpi --with-Rmpi-type=OPENMPI"
これで完了. みんなもOCTOPUSのRmpiでレッツ並列R!
2020年10月13日 [OSX] macOSのDockerでUbuntuを動かしてX Windowの画面に出す
_ [Docker] macOSのDockerでubuntu 18.04を動かす
Dockerで便利だよね.軽いし.でもDockerって直感的じゃないんだよね.起動コマンドもdocker runとかdocker startとか違いとか,docker attachとdocker execの違いとか,イメージとかコンテナとかの関係性も初見殺しっぽいし.イメージを取得/作成するにしてDockerfileを用意する場合とレポジトリから取得する場合もあるし. んで,今回はレポジトリからdockerコマンドで取得する方法をざっくり書いていくね.あとDocker for macはインストールしたものとして,話をずんずん進めていくよ.
まずコンテナの素であるDockerイメージがどれだけあるか確認するコマンド,docker imagesからだ.
nigawa:~ kido$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE xeyes latest 13060792b6cd 19 hours ago 9.95MB alpine latest a24bb4013296 4 months ago 5.57MB nigawa:~ kido$
IMAGE IDはDockerイメージを特定するIDで,これを元にコンテナを作らなきゃいけないのね.コンテナが仮想OSのインスタンスね. で,ubuntu 18.04のイメージをレポジトリから持ってくるコマンドがこちら.
nigawa:~ kido$ docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu 171857c49d0f: Pull complete 419640447d26: Pull complete 61e52f862619: Pull complete Digest: sha256:646942475da61b4ce9cc5b3fadb42642ea90e5d0de46111458e100ff2c7031e6 Status: Downloaded newer image for ubuntu:18.04 nigawa:~ kido$ nigawa:~ kido$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE xeyes latest 13060792b6cd 19 hours ago 9.95MB ubuntu 18.04 56def654ec22 2 weeks ago 63.2MB alpine latest a24bb4013296 4 months ago 5.57MB nigawa:~ kido$
これでイメージは取得できた. で,普通に
docker run --name test_ubuntu1804 -itd ubuntu:18.04 /bin/bash
ってすると,test_ubuntu1804っていうCONTAINER NAMEのコンテナが作成,起動しちゃうんだけど,今回はX Windowアプリを画面に出したいのね.だからちょっと変える.
_ [Docker] DockerコンテナからのX Windowアプリの表示を許す
macOSはX WindowがXQuartz というX11の実装を用意している.これを起動しておく必要がある.んで,XQuartzの環境設定からセキュリティyを
- 接続を認証(Authenticate connections
- ネットワーク・クライアントからの接続を許可(Allow connections from network clients
のチェックを入れておくのだ.これで事前準備オッケー.
で,Dockerのイメージ作成からやりなおし.
docker run -it -d --name test_ubuntu1804 -e DISPLAY=$(hostname):0 -v ~/.Xauthority:/root/.Xauthority ubuntu:18.04
これでDISPLAYでXサーバのホスト名(localhostでも127.0.0.1でもオッケー)を指定し,macOSの.Xauthorityをubuntuの/root/.Xauthorityとしてマウントするの.そうするとX Windowアプリが表示されるようになるぜ.その前に,ubuntuのパッケージ郡を更新しておいてね.
nigawa:~ kido$ docker exec -it test_ubuntu1804 /bin/bash root@ecef00f1fad9:/# apt-get -y update ... root@ecef00f1fad9:/# apt-get -y upgrade ... root@ecef00f1fad9:/# apt install x11-apps ... root@ecef00f1fad9:/# xeyes
これでDocker ubuntuのX Windowアプリが動く環境をmacOSで作れたぜ! もしX Windowアプリが表示されないときはDockerを再起動すればいいよ!じゃあね!