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 の言説パクってます。