研究室に余ってた複数のPCでPython専用並列計算機を作った(ipcluster, ipyparallel)

※私が構築した時点ではPython2.7を使用して構築しましたが、一部のパッケージが3.x前提になり、現在はこの記事の通りにやってもエラーが出ます。参考になる部分があれば参考にしてください。

作った理由と概要

 研究室にPCが余ってたから並列計算機作った。分からないことだらけだったので、なるべく楽な方法を選んだ。IPythonで簡単に並列計算機が作れるようなので、ipcluster、ipyparallelとSSHで並列計算を行う。

 下記リストのごみのようなCPUなんか使わなくてもいいGPU使えば簡単に高性能な計算機が作れちゃうけど、せっかく余っててもったいないのでこれらを使う。

なお鍵交換とかルーターとかの知識はかなり怪しいので、この記事をあまり信用しないでください。

全体の流れ

  1. 計算ノードとするPCのIPを設定する.
  2. インターネットへの接続が可能になったので,計算ノードに必要なパッケージをインストールした.
  3. 次に鍵交換を行って,コントローラーから各計算ノードへパスワード無しでSSH接続できるようにする。
  4. 最後に ipythonのipclusterを設定し、コントローラーから各計算ノードを使って並列計算できるように設定する。
  5. 動作確認

使用するPCのリスト

コントローラー兼ルーター兼共用サーバー

Linux Mint17(Mate)/Core i7 2600K/メモリ16GB

以下コントローラーもルーターもこのPCを指す

計算ノード (OS書いてないものはBasix 3.1)

  • Core i3 650/4GB×3台
  • Core i7 3770K/16GB×1
  • Core i5 2400/8GB

(以下計画)

  • Xeon 2.8Ghz(0 or 2000番台のCore i7相当、詳細不明)×2(なんか教授がもらってきた

1. 各ノードの設定

必要なパッケージのインストール

sshでipclusterを使うので、以下のパッケージが必要となる。

IPython python-zmq python-pip openssh-server

また、pipでipyparallelのインストールも必要。うまくいかない場合は、バージョンが古い可能性があるのでpip自体も含めて関連するパッケージをアップグレードしていくといいかも。

正確にメモしたりしてないので、他にもいるかもしれない。

私は研究室でよく使うsklearn、gensim(関連のnumpy, scipy)、chainer, tensorflow, glove, などもインストールした。

 なお一台一台セットアップするのはめんどくさいので、以上のセットアップ後にBasix3.1に初期から入っているbodhibuilder(bodhibuilder-gdk)でカスタムISOを作成して、カスタムOSのディスクを作り、インストールするだけで環境が整うようにした。(ただし上のinterfaceの設定と、下の鍵交換は必要)。インストールしてからパッケージが足りないと一台一台インストールする羽目になるので、1台を設定し終わって計算ノードとして動くのを確認してからISOを作成したほうがいいと思う。

※2020年追記

ansibleとか使うのが正しいです。

2. 鍵交換

  1. コントローラーで鍵生成
  2. 計算ノードに公開鍵をコピー

コントローラーでssh-keygen -t rsaを実行してで~/.ssh以下に秘密鍵、公開鍵(.pub)を作る。公開鍵はUSBメモリに入れて計算ノードに挿し、、USBメモリの公開鍵のあるところで端末を開き、

mkdir ~/.ssh (.sshディレクトリがない場合)

touch ~/.ssh/authorized_keys (ファイルがない場合)

で、公開鍵情報を登録するファイルをホームフォルダ以下に作成し(Linuxの種類によっては最初からあるかも)

cat id_rsa.pub >>  ~/.ssh/authorized_keys

で公開鍵をコピーすれば完了。

3. IPclusterの設定

  1. IPtyhonの新しいプロファイルを自動生成
  2. コンフィグを書き換え
  3. ipcluster start –config=プロファイル名 で動けば成功

http://fitnessprograming.blogspot.jp/2015/12/ipython.html

https://qiita.com/ma2saka/items/d4f5d7342a0e8c383418

 IPClusterの設定は上の2つを参考にした。configファイルはかなり行数があり、ほかにもいろいろな設定項目があるが、3行ほど書けば動いた。

https://qiita.com/chokkan/items/750cc12fb19314636eb7

この記事の大雑把な流れは↑を参考にした。日本語情報が最初に出たのは多分↑の記事で、この記事のおかげでこの方法を知りました。

 なお、私の環境でうまく動かないときはパッケージが古い、パッケージが足りない、設定ファイルのスペルミスが原因だった。Local Enginなどと表示される場合はコントローラーのCPUが使われているだけ。設定が間違えてるかも。

4. 並列実行エンジン始動と動作確認

 なお、ここではコントローラーノードにSSHでログインして、コントローラーから並列計算用プログラムを動かす前提で書いている。

まず上の動作確認と同じくipcluster start –config=(コンフィグ名)でエンジンを始動し、プログラムは別のターミナルから

ipython –profile=プロファイル名 実行プログラム名

で実行すれば動くはず。

私の書いたサンプルプログラム

これで計算ノードのホスト名が表示されればしっかり動いている。

余談

コントローラー自体のパワーも使うなら、計算ノードと同じくlocalhostにsshでログインできるようにし、コンフィグに書けば使えるはず。

コメント

タイトルとURLをコピーしました