102
102

More than 5 years have passed since last update.

iPython notebookで研究開発生活

Last updated at Posted at 2014-08-25

PythonのWebインタフェースであるiPython notebookを使って,自宅やスターバックスにこもりつつ作業するためのメモです.気が向いたときに更新していきます.

リモートサーバ上のnotebookにアクセスできるようにする

職場のワークステーション上でnotebookを起動しておけば,いつでもスターバックスで研究開発ができるようになります.導入にあたっては,ここを参考にします.c.IPKernelApp.pylab = 'inline' がとりわけ重要で,これをしておくことで,matplotlibで描画したものがnotebook上で表示できるようになります.

  • スターバックスで無料Wi-fiを利用する場合はこちら
  • スターバックスの美味しいコーヒーが飲める店舗はこちら

プログラムを実行する

テストごとに新しいnotebookを作るようにすると混乱しなくなります.
デバッグの際には以下のCell magicが便利です.

%time 時間を測る

kobito.1408941894.251522.png

%prun プロファイリングする

kobito.1408941924.757006.png

%debug デバッガを起動する

プログラムがエラーでとまった後に,適当なCellで%debugを実行するとipdbが起動します

並列計算する

いくつか方法があります.この辺も参考になります.

1 multiprocessing.Pool

このあたりを参考に,

from multiprocessing import Pool

p = Pool(n_cores)
p.map(func, [arg list])
p.close()

こんな感じで並列計算できます.注意すべき点としては,並列計算を回している途中でkobito.1408940334.347506.png ここの中断ボタンやリスタートボタンを押してしまうと,大概ワーカがゾンビ化してしまいます.その場合は,pkill Pythonなどでいったん全部殺してからもう一度notebookを立ち上げるようにしています.

2 IPython.parallel

iPython自体に並列計算のためのフレームワークがありますので,それを使うのも一つの手です.まず,iPython notebookを起動して最初に現れるダッシュボードからClustersタブを選択し,
kobito.1408941346.713972.png
ここの# of enginesに所望のワーカ数を入力し,startします.
プログラム上では,以下のように書きます.

from IPython.parallel import Client

def test(x):
    u'''
    並列計算される関数
    '''
    return x **2

cli = Client()
dv = cli[:]
x = dv.map(test, range(100))
result = x.get()

3 プログラム自体を並列で走らせる

引数を変えつつ同じ関数を並列で複数走らせたい場合は1や2の方法が有効ですが,大きめのプログラムを並列で走らせたい場合,シェルスクリプトでバックグラウンド処理にして並列化させる方が簡単です.つまり,python program.py arg1 arg2... &を複数書いたシェルスクリプトを実行しましょう.
「ここまでiPython notebookの話をしていたのに結局はシェルか!」というあなた,%%bashコマンドを使うことで,notebookのCell上でbashスクリプトを走らせることもできます.たとえば,
kobito.1408943333.067115.png

これをちょっと変更すると,
kobito.1408943371.767258.png

こんな感じで簡単に(?)並列化できますね.Pythonでコマンドライン引数を使いたい場合,if(__name__ == '__main__'):ブロックを作り,sys.argvから読み出します.

ChromeからSSHを叩けるようにする

小規模なプログラムならiPython notebook上でも書けなくはないですが,プログラムがごつくなってくるとやはりちゃんと.pyファイルにした方が良いので,必然的にSSHでワークステーションに潜る必要が出てきます.僕はSecure Shell (link) を使っています.

  • 作業を中断できるように,端末多重化(たとえばtmux)も使えるようにしておくと便利
  • gedi-vimpython-modeを入れておくと便利
    • いずれもvim / emacs両方のバージョンがあるはず
    • gediを推す人が多い気がしますが,天邪鬼なのでpython-modeを使っています.変数のリネームや補完,PEP8に沿わない部分を勝手に直してくれる機能あたりが便利.

pythonのパッケージを管理する

僕はCanopyを使ってます.OpenCVもワンクリックで入れられて便利.enpkgコマンドを使うと,ターミナルからパッケージ管理ができます(link).Mac使いはキーチェインの問題でハマることがあるので,こちらもチェック.

102
102
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
102
102