[Volunteer][DC] Rosetta@homeに参加する

SARS-CoV-2 が猛威を振るっております

昨年末から中国を起点に広がったSARS-CoV-2が全世界に広がり、大混乱をきたしています。
コロナウイルス自体、元々単なる「いわゆる風邪菌」という奴で、SARS/MARSと言うのもあるわけですが、今回のSARS-CoV-2は誰の想像も及ばないレベルで猛烈に広がり、そして各界著名人やら政治家まで感染する事態に至ってる状況です。

これに対してなんか自身が寄与できるものがないかな?と思ったら、ちょうどRosetta@homeというプロジェクトを発見したので、これに参加してみることにしました。

Rosetta@home

Rosetta@homeはワシントン大学の教授である デイビット・ベイカー 教授の研究室が運営している分散コンピューティング(Distributed Computing/略してDC)プロジェクトの一つで、昔やっていたSETI@homeに似ています。

やっている内容としては、タンパク質の構造解析で、これにより様々な病気を研究する研究者を助けることがこのプロジェクトの目的になっています。

で、現在特に多く割り当てられるデータが、SARS-CoV-2のデータなのです。タンパク質構造を解析し、恐らくは当該ウイルスの構造を明らかにすること、その上で製薬等に生かすことが主になっていると考えられます。

Windowsパソコンで動かす

手順(Windows)としてはこんな感じです。

  • Downloadボタンを押して、BOINCをダウンロード
  • BOINCをインストール
  • BOINCのプロジェクト追加画面から「Rosetta@home」を選択
  • アカウントをサインアップして作成
  • ワークデータがダウンロードされて解析開始
BOINCを動かしてる状態

うまく動かせれば余ってるCPUリソースを全て駆使してタンパク質データの解析を行い始めます。
基本的にこれらプロセスの優先度は低く設定されていて、また、他のアプリケーションが一定以上CPUを使用し出したりすると、解析処理それ自体を一旦停止したりもします。極力他のアプリケーションに影響しないように構成しているように見えます。

ただ、何れにしてもハードウェアとしてCPUにかなりの負荷をかけることになるため、熱量が上昇したり、消費電力が上昇したりします。必要に応じてBIOS上の電力設定なんかはした方が良いかもしれません。また、私の場合VM環境で各ホスト1台ずつVMを選抜して動かしてる状況であり、他のVMにこの負荷の影響が及んではまずいため、CPUリソースに制約をかけていたりもします。

Linuxの場合

Linuxの場合はYumを利用すると便利なようです。epelリポジトリで当該ツールが登録されています。

まずはRosetta@homeへサインアップし、アカウントを作成しておきます。
そのあとで、epel-release及びBOINC-Clientのダウンロードを行います。

# yum -y install epel-release
# yum -y install boinc-client

BOINCを動かすユーザを作ります。

# adduser boinc_user -m
# passwd boinc_user
# su - boinc_user

BOINC実行ユーザに切り替わったら、ワークディレクトリを作ります。

$ mkdir boinc_work
$ cd boinc_work

デーモンとして動作するよう設定を行った上で、BOINC-Clientに対して必要となるデータの生成を行います。そして gui_rpc_auth.cfg を参照することで、BOINC-Clientを実行するために必要なパスワードが確認できます(以後、これをboinc_Passwordと呼称します)。

$ boinc --daemon --dir /home/boinc_user/boinc_work --allow_remote_gui_rpc
$ cat gui_rpc_auth.cfg 

今度は、Rosetta@home上の自身のアカウント情報をベースに、BOINC-Clientへ適用する形式のアカウントキーを入手します。

$ boinccmd --passwd <boinc_Password> --lookup_account http://boinc.bakerlab.org/rosetta XXX@domain.local <PassWord>

うまくいくと、以下のような表示になります。

status: Success
poll status: operation in progress
poll status: operation in progress
poll status: operation in progress
      :
      :
      :
poll status: operation in progress
account key: 6a*****************238

最下行にあるのがアカウントキーです。(以後、Account keyと呼称)

そして、このアカウントキーをプロジェクトへ適用することで、プロジェクトに参加し、データをダウンロード及び実行を開始します。

$ boinccmd --passwd <boinc_Password> --project_attach http://boinc.bakerlab.org/rosetta <Account key>

ログ情報はワークディレクトリにあるstdoutade.txtに保存されます。

$ tail -f stdoutdae.txt

30-Mar-2020 11:24:43 [---]    don't use GPU while active
30-Mar-2020 11:24:43 [---]    suspend work if non-BOINC CPU load exceeds 25%
30-Mar-2020 11:24:43 [---]    (to change preferences, visit a project web site or select Preferences in the Manager)
30-Mar-2020 11:24:43 [---] Setting up project and slot directories
30-Mar-2020 11:24:43 [---] Checking active tasks
30-Mar-2020 11:24:43 [---] Setting up GUI RPC socket
30-Mar-2020 11:24:43 [---] Checking presence of 0 project files
30-Mar-2020 11:24:43 [---] This computer is not attached to any projects
30-Mar-2020 11:26:42 [---] Running CPU benchmarks
30-Mar-2020 11:26:42 [---] Suspending computation - CPU benchmarks in progress
30-Mar-2020 11:27:13 [---] Benchmark results:
30-Mar-2020 11:27:13 [---]    Number of CPUs: 4
30-Mar-2020 11:27:13 [---]    2310 floating point MIPS (Whetstone) per CPU
30-Mar-2020 11:27:13 [---]    10187 integer MIPS (Dhrystone) per CPU
30-Mar-2020 11:27:14 [---] Resuming computation
30-Mar-2020 11:27:36 [http://boinc.bakerlab.org/rosetta/] Master file download succeeded
30-Mar-2020 11:27:41 [http://boinc.bakerlab.org/rosetta/] Sending scheduler request: Project initialization.
30-Mar-2020 11:27:41 [http://boinc.bakerlab.org/rosetta/] Requesting new tasks for CPU
30-Mar-2020 11:27:58 [Rosetta@home] Scheduler request completed: got 1 new tasks
30-Mar-2020 11:27:58 [Rosetta@home] General prefs: from Rosetta@home (last modified 29-Mar-2020 20:50:21)
30-Mar-2020 11:27:58 [Rosetta@home] Host location: none
30-Mar-2020 11:27:58 [Rosetta@home] General prefs: using your defaults
                             :
                             :
                             :

プロセスはこんな風になっています。

プロセス情報

PID=30146のプロセスがそうです。NIの列を見ると分かるのですが、NICE値が19に設定されており、つまりは優先度は最低となっています。アイドル状態に近ければ極力CPUを使用して解析し、他のプロセスがCPUリソースをリクエストすると活動を弱めるような、そうした動きをします。

BOINCは基本的に複数のタスクジョブを受け取り、それを自身で定めたスレッド分ジョブを並行実行し、できあがったものから順次Rosettaのプロジェクトへアップロードするように動きます。中には長時間かかるもの、短時間で済むもの、色々あるようです。

チームというものがある

SETI@HOMEのように、Rosetta@homeにもチームと言う概念があり、参加者がチームのもとに集まり、成果を集約することが可能になっています。私は以下のチームに入ってます。

ここは、自宅にエンタープライズリソースを構えてる人を中心として何人かが集っている感じです。私はここの主催者さんからこのプロジェクトの存在を知ったので参加をしている感じです。

私は今となってはもう古いSandy Bridge-EP/ENを搭載したサーバで参画してるんですが、中にはXeon Plutinumを動かしてる猛者もいたりして、なかなか強烈です。ただ、こういう所はその処理ユニットの数で誇るというよりは、参画するその姿勢そのものに意義があるのかなと思っています。

ここでやっていることが何とか役に立って、そして成果として現れてくれると嬉しいなぁ・・そんなことを考えながら、今日もなかなかうるさいファンがブンまわっています。