- automatic setting: ipcluster
- manual setting: ipcontroller and ipengine
因為我們使用多台機器計算,所以使用ipcontroller and ssh方式設定。
設定profile
- $ipython profile create --parallel --profile=ssh
- 會在/home/chenhh/.ipython/profile_ssh/中建立許多設定檔
執行ipcontroller
- $ipcontroller --profile=ssh --reuse
- 必須指定profile=ssh才會讀取profile_ssh中的設定,否則預設讀取profile_default中的設定。
- --reuse指定重複使用json檔,否則每次執行ipcontroller時會生成新的json檔。
- 會在/home/chenhh/.ipython/profile_default/security/資料夾下生成ipcontroller-client.json與ipcontroller-engine.json兩個設定檔。
- 將engine的設定檔以scp方式傳給engine
- scp /home/chenhh/.ipython/profile_ssh/security/ipcontroller-engine.json ./
- 而engine使用以下命令執行
- ipengine --file=./ipcontroller-engine.json
ipcontroller_config.py設定
HubFactory
- c.HubFactory.ip = u'*'
- #listen to all interface,此設定對應到ipcontroller-engine.json中的location內容。
IPControllerApp
- c.IPControllerApp.work_dir = u'/home/chenhh/.ipython/profile_ssh'
- c.IPControllerApp.profile = u'ssh'
- c.IPControllerApp.reuse_files = True
engine
- $ipython profile create --parallel --profile=ssh
- 使用scp chenhh@192.168.1.1:/home/chenhh/.ipython/profile_ssh/security/ipcontroller-engine.json /tmp 將檔案複制到/tmp資料夾下。
- $ipengine --file=/tmp/ipcontroller-engine.json --ssh=chenhh@192.168.1.1 --profile=ssh
- 注意一個ipengine只會對應到一顆cpu, 如果要使用多個cpu時,上述指令多執行幾次即可。
ipython
- from IPython.parallel import Client
- rc = Client(profile="ssh")
- 指定profile後,即可使用
debug
我的controller主機使用的zmq版本是4.0.4,而engine中,有一台的zmq版本是2.0.2,所以該台主機在連線時,一直出現heartbeat timeout。
解決方法:
- 首先將engine的zmq-dev版本更新為libzmq3-dev:amd64的版本。
- pip uninstall pyzmq
- 然後抓取pyzmq的source code, python setup.py install後,使用ipython。
- import zmq
- zmq.zmq_version_info(), 檢查版本是否正確,正確後即解決此問題。