2012年1月31日火曜日

shutil.move のバージョン依存性

Python で標準的に用いることが出来るモジュールの中に shutil というのがあります。これは shell utility のことで、move や copy のようにファイルのコピーやディレクトリに関する処理を行なうシェルコマンドに対応するメソッドが含まれています(なお、mkdir とかは os モジュールに入っている)。

先ほど気づいたのですが、shutil.move の挙動は python のバージョンによって異なるのでメモしておきます。チェックした環境は CentOS 5.6, bash です。以下のスクリプト movetest.py を試してみましょう。

# -*- coding: utf-8 -*-
from os import mkdir
from shutil import move

mkdir("src")
mkdir("dst")
f = open("spam", "w")
f.write("test")
f.close()
move("spam", "dst") # まず、テキストファイル "spam" を dst/ に移す
move("src", "dst") # 次に src/ を dst/ に移す

その結果、バージョン 2.6/2.7 と 3.x では直感的な振る舞いをするのですが、2.4 はちょっと違っています:
  • 2.4:
    Traceback (most recent call last):
      File "movetest.py", line 10, in ?
        move("src","dst")
      File "/usr/lib64/python2.4/shutil.py", line 190, in move
        copytree(src, dst, symlinks=True)
      File "/usr/lib64/python2.4/shutil.py", line 111, in copytree
        os.mkdir(dst)
    OSError: [Errno 17] File exists: 'dst' 
  • 2.6 / 2.7, 3.x:
    dst/ 以下に src/ と spam が存在する。
2.4 では、移動先のフォルダに中身が入っていると move 出来ないようです。そこで、spam ファイルを dst に移さないで空の状態の dst に対して src を move しようとすると次のようになります。
  • 2.4:
    src/ が dst/ にリネームされ、dst/ ディレクトリだけが残る。
  • 2.6 / 2.7, 3.x:
    dst/ 以下に src/ が存在する。
2.4 では普通のファイルをリネームするかのようなはたらきをします。

これで分かったように、普通のシェルコマンドと同じ挙動を期待するなら少なくとも 2.6 以降を利用するべきだということでしょう。 2.5 については確認してないので分かりませんが……。

ちょっと時代遅れな記事だったかもしれないですね。

*追記:
Python 2.5 は 2.4 と同じ振る舞いをするようです(MacOS 10.6 で確認)。2.5 --> 2.6 のタイミングで何かあったんでしたっけ。

コアの ID を指定して並列計算する方法(mvapich2 編)

並列計算をする際、通常は "mpirun -np 4" のように使用するコアの数のみを指定して実行しますが、何らかの理由があってコアの ID まで指定したい場合にはどうすればいいのでしょうか。mvapich2 を利用する場合の解決策を知ったのでここにメモしておきます。方法は以下の通り。
  1. 計算を行う際のホスト名を例えば "host" というファイルに書いておきます。書き込むホスト名の先頭にはスペースを、行末には改行記号をつけておく必要があるようですが理由は知りません(試したところどちらかが欠けている場合にはエラーが出て実行出来ませんでした)。
  2. mpirun_rsh -np 4 -hostfile ./host MV2_CPU_MAPPING=0:1:2:3 ./a.out と打ち込みます。MV2... が使用するコアを指定するオプションです。
あるジョブを特定のコアがすでに受け持ってくれているような場合で、それらの邪魔をせずに他のジョブを実行させたい時などは役に立つと思います。
■参考 URL(質問者が僕です):http://goo.gl/stEjh

それにしても、高い負荷がかかっているコアを自動的に避けて複数のジョブを実行するってのはバッチ処理とかしないと実現出来ない事なんだろうか?

2012年1月16日月曜日

おひさ

あけましておめでとうございます、と言う機会はとうに逃してしまいました。お久しぶりです。とりあえず元気でやってます。ブログを更新するのもいつ以来か忘れてしまいましたが、雑多な近況なんかを書いておきます。

■バーゲンに行ったよ
もう25にもなるというのに、相変わらずお年玉をもらっています。両親と、おばあちゃんとから。さすがに社会的にはどうかと思ってはいるんですけどねー、潤いが欲しいのは誰でも同じ。
そんなわけで、今月の初めころに脱非リア充を目論む友達に連れられてバーゲンに行ってきました。梅田の HEP とかそこら辺だったかな?春まで使えそうなジャケットと手提げのカバンを買ったら諭吉さんが数人出兵してしまって、潤いは一瞬で失われてしまいましたとさ。実用品が手に入ったのと、そもそも友達と買い物に長時間行ったこと自体が楽しかったので後悔は無し。■

■TOEFL はどうなったのか
そういえば昨年11月下旬に受けた TOEFL ITP の結果が来てるので公開してみます。

Listening Comprehension: 49
Structure & Written Expression: 57
Reading Comprehension: 63
Total Score: 563

Total Score は各項目の単純な和にはならないのですね。TOEFL ITP には二つの Level があるそうですが、今回のは Level 1 の方でした(Level 2 の方が簡単)。満点は660点で、ペーパー版と同等とのことです。この資料(PDFが表示されるのでご注意を)によれば ITP で563点というのは TOEIC でいうところの 750-800 点あたりに対応するので、まあ悪くはない出来だったと思います。昔から苦手なリスニングはやっぱり点が良くないですね。普段から論文を読んだりしてるので文章読解はそれなりになるし、日常的に英語を聞く必要性は無い環境にいるので当然といえば当然ですが、改善したいところではあります。

前の記事にも書いた通り、しばらくは TOEFL 対策みたいなことをせずにどれだけ点数を上げられるのか試していこうかなと考えてます。まあそんな悠長なこと言っているうちは点なんて上がらないか……。■

■NVIDIA Tesla 導入
僕が今やっている研究はタンパク質の構造変化に関与しています。分子動力学によりアプローチしているため、とにかく計算は速ければ速いほど良いという状況にあります。分子構造の可視化とか、二次構造含量の分析とか、何をするにしてもまず系のトラジェクトリデータを計算する必要があるからです。

12月末までの段階では Xeon X5690x12 で計算していたのですが、ボスの協力もあって今月から NVIDIA の Tesla M2090 を2機導入しました。これは、いま使っている Amber という MD パッケージが CUDA を使った高速計算にも対応したのを利用するためです。ベンチマークページによれば4,5倍は速くなるとのことでしたが、実際に今研究している系で試してみると7倍くらい高速化されてました(詳細は省きますが、NTP 条件下で 40,000 原子系を扱うと 23ns/day くらい。以前は良くて 3.5ns/day だった)。Ubuntu 10.04, OpenMPI を使っていたのを CentOS 5.6, MVAPICH2 にしたり、intel MKL を使うように設定し直したのでそもそも基本的なセットアップが違いますが、それにしても目覚ましい進歩だということには変わりありません。Amber のインストールに関してはちょっと苦労した点もあったので、別記事にまとめておきます。

僕は未熟な Python 使いなのですが、CUDA API である PyCUDA というのが存在するのでそのうち使ってみたいです。まずは普通の並列計算をきちんと修めてからですけどね……。Python 大好きです。最近は Bioinformatics Programming Using Python をちょこちょこ読んで色々勉強してます。XML とかの扱いを知りたくて。■

■処女論文が近い?
そろそろ論文書こうか、という話がボスとの間で持ち上がってきています。もうD1も終わりだしね、時期的には遅すぎるくらいなんですが、ようやく結果がまとまって来たので何とかしようということです。これが初論文。
どうなんだろう、データの解釈が圧倒的に足りていない気がする。先行研究との関連付けなんかも全く不十分だし、結果が割りと面白いだけに justification みたいなことをしっかりやらないと絶対 reject されると思う。これからが勝負です。とはいえ今月末が第一稿の締めきりということになっているorz■