標準化週間覚え書き


 先々週と先週はラボのほぼ全員でプログラミングをしていた。

 うちのラボはその性質上、解析のかなりの部分を標準化することができる(はず)。にも関わらず、現状では各自がみな独自の実装をしていてあまりにも効率が悪いので(車輪の再発明、比較が困難)、一度全員で集まって標準化を図ろうという話になった。
 つまりパラメータ(関数を含む。)を変えるだけで任意のデータに対し任意の解析が可能で、新たな解析も最小限の部品を書くだけで追加できるような共有のフレームワークを作ろうと。そのために、ボスの一声で2週間はラボの全機能を停止(もちろん生き物関係は除く)。


 初めはそんなことが出来るのか、あるいはやって意味があるのか、と思っていたのだけど、結果として出来上がったものを見ると大成功だったと思う。より見通しがよく、使いやすく、かつ効率的に動くものが出来た(あるいは出来つつある)。以下覚え書きと雑感。

  • 最初のミーティングの議題はまず何をすべきかについて。標準化するにあたりプロトタイプとして使えそうなライブラリがあり、それをよく使っている一人がコンセプトを話す(結局彼が最後までまとめ役をつとめる)。他にも数人同じライブラリの経験者あり。ただその一人以外は既に自分で書いたものがあったのであまり本格的には使用していなかった。基本路線はこのライブラリの考え方を採用しようと決まる。ただし互換性は考えず、独自に動くものを作る。
  • そこから2日毎に、どういう解析が標準化できるか、どういうデータ構造を採用するか、どの辺までを前処理の対象とするか、APIをどうするか等についてミーティング。
  • 1週目の終わりごろまでにレイヤー分けのアイデアがまとまる。また、フレームワークを書く人、解析ルーチンを書く人、前処理と可視化部分を書く人、部品の高速化をする人、等の分担が決まる。メインでコーディングをするのは研究者としてのプログラミング暦5〜10年、MATLAB暦5年以上の人。5人ほど。
  • 10日目ぐらいで一応動くものが出来る。そこからのフィードバックでまた少しインターフェースをいじる。
  • 2週間でだいたい真面目な解析が出来るところまで完成。各自の部品を書けばそれぞれの解析にも対応可能。
  • 表記やドキュメントの統一、Wikiによる外部向けのまとめなどを進める(←今ここ)。
  • 気づいたこと。長年やっている人はだいたい同じような書き方に落ち着く部分がある。ただオブジェクト指向的な書き方を好むかどうかにはかなりのばらつきが見られた。初期の議論の紛糾は主にこの辺。オブジェクト指向はあまり自然な思考法ではないのかもしれない。個人の言語遍歴によるところが大きいか。まあ所詮 MATLAB なのであくまで雰囲気だけど。
  • MATLAB 7.3はバグだらけ。エラーで止まるとかならまだしも、値は返すけどそれが間違っているという凶悪なふるまいをする。使っている人は今すぐ7.4以降にバージョンアップするか、以前のバージョンに戻しましょう。single precision で 64 bit OS でというのが駄目らしい。
  • これを機会に Distributed Computing Toolbox で遊んで見たのだけど、ちょっといまいち。distributed job (単純にMATLABコマンドをストアしておいて、空マシンがあれば順次投入していく。)というのと parallel job (明示的に行列やループを複数のプロセッサに分散させて計算させることが出来る(↓参照)。)があって、前者はすでにラボ内でこれより高機能なものを実現している。後者みたいなことは普通には実現できないのでちょっと期待したけど、オーバーヘッドが大きいのか思ったほど高速化されない。というか MPI ライブラリの内部エラーで落ちるってどうよ。まだ発展途上? 相性の問題?
A = randn(20000,1000);
A = distribute(A,2);  % 2次元目を分散。4procsなら20000x250ずつ。
B = randn(20000,10);  % 分散を指示していない変数は全procでローカルに保持される。
C = B'*A;  % 普通に計算を書けば分散処理してくれる。"Think matrices, not messages."
  • 他人の目を直接気にする分、自分用に書くときよりもドキュメントや簡便性に気を使った。結果、より読みやすいものが出来た。というかこれは常にそうするべきものだけど。
  • この仕事は本来そのために雇われたプログラマーの人がやるはずだったのに、数年いた挙句まともに動くものを何も作らないまま去っていった。なぜ本職でフルタイムのプログラマー生理学者よりコードを書けないのか? 研究室内の単一プロジェクトに外部の人を雇うのは基本的に悪いアイデアのようだ。
  • MATLAB もいい加減そのf--kingな独自文法は捨てて、文法だけ python とかに移行しないかな? 個人的に何度か MATLAB からの脱出を試みてはいるのだけど、既存のしがらみが多すぎてまた元に戻ってしまう。今回ので更に脱出が困難になった。python + SciPy + matplotlib 辺りに期待。
  • とくに中心になって働いた院生には特別ボーナスが出るという。ポ、ポスドクは?


 おつかれさまでした。サイエンスに戻ろう。