PyPyとスパコンとバイオインフォマティクス (PyPy advent calender 12日目)

PyPy Advent Calendar 12日目です。
タイトル通りのことを徒然なるままに書きます。
スパコンアーキテクチャ無知のど素人です。
バイオインフォマティクスをやってるつもりです。
PyPyがどういうものかはこれまでのPyPy Advent Calendar筆者の方々の記事をお読みください。

PyPyとスパコン

この節で何が言いたいのというと

PyPy(みたいの)をスパコンで使えるといいですね。そういう意味でもPyPy面白そうですね。

ってことです。

京が有名になりましたが、実質京がサポートしている言語はCとFortranと言っていいのではないでしょうか。
アーキテクチャとかPython自体のサポートとかはとりあえずすっ飛ばして、なぜPyPy(Python)みたいのが使えるといいなと思うかというと

toolchainで楽したい

ということに尽きます。

Pythonで書いて楽できるようになること、コードの複雑さを軽減すること

は非常に意味のある(デスマの人を助ける?)ことのように思いますし、あのデータのメモリ上の配置の仕方も意外とスパコンに合ったりしないのかなーなどと妄想しています。
というわけでPyPyのような仕組みがスパコンでも活用されると面白いかもしれませんね。
もう誰か考えてるんですかね。
さらっとググった感じだとNCARってとこがそういうことしようとしているんですかねって感じでした。

PyPyとバイオインフォマティクス

さあではスパコン環境でツールチェーンを実演してみせましょう。

なんてことできるわけないので、結局しょぼいMacMiniで「既存ライブラリのスピード勝負じゃいオラ!」って意味あるのかな的なことしかできませんでした。

使ったのはBioPythonです。
Bitbucketのwikiの「PyPyのメジャーなPythonライブラリのcompatibility」のページでBioPythonはバツマークついてますが、これはnumpy使ってるとこが使えないからこうなってるだけでそれ以外の部分は自分が試した限りでは全部使えました。
ちなみに自分は普通にBioPython使ってた時でもnumpy使ってるの使ったことないです。

  • numpyがだめなんでinstall時にはpypy setup.py buildをすっとばしてpypy setup.py installってやれば使えます。
  • reportlabは使えるぽい(後述しますが力尽きて確認してません)
  • MySQLdbは重要性低いと判断し無視

で最初のスピード差が確認できたBioPython tutorial中の例(Uniprotのデータのパースかな)で許してください。

from Bio import SeqIO
uniprot = SeqIO.index("uniprot_sprot.dat", "swiss")
handle = open("selected.dat", "w")
for acc in ["P33487", "P19801", "P13689", "Q8JZQ5", "Q9TRC7"]:
  handle.write(uniprot.get_raw(acc))
handle.close()
macmini:bin kozo2$ time python uniprottime.py 

real	1m42.344s
user	1m21.054s
sys	0m5.537s
macmini:bin kozo2$ time ./pypy uniprottime-pypy.py 

real	0m53.986s
user	0m36.852s
sys	0m4.819s

とりあえずしょぼしょぼのこれだけかよ的最後ですけど今後もPyPy使ってみようと思います。(uniprottime-pypy.pyってのも処理内容は同じです)
reportlab使ってるGenomeDiagram部分もPyPyでできるかどうか試してまた書きます(多分いけると思う)。
あとnetworkxも試してみたんですがtutorial的な例は全部PyPyでいけました。
numpypyはまだまだこれからっぽいですね。
とりあえずはスピード速くなったわーいだけです。
fastqのパースとかはこのスピード差がうれしかったりするんですかね。
もっと最初の節みたいなとこもやってけるといいな的な感じです。

さようなら。

謝辞

id:moriyoshi にファミレスで教えてもらってPyPyに興味持ちました。PyPyおもろそげですね。あざす。
最初の節の内容 id:moriyoshi の言説パクってます。