Folding@homeを通じてCOVID-19治療薬の発見に貢献します

こんにちは。Neco@dulltzです。

サイボウズでは、オンプレミス機材の一部を活用してFolding@homeによるCOVID-19のタンパク質構造予測に貢献することにしました。

ご自身で動かしてみたいというかた向けに、我々が使っているKubernetesマニフェストも記載しているのでぜひご覧ください。

Folding@homeとは

みなさんはFolding@homeを知っていますか?

Folding@homeとは、タンパク質構造予測に必要な計算処理を、世界中の有志による分散コンピューティングで推進するプロジェクトです。 10年以上昔の話になりますが、PlayStation 3を活用したプロジェクトを覚えている方も多いかと思います。

最近Folding@homeのブログにて、COVID-19の治療薬開発に使われるタンパク質構造予測を行っているという旨の記事が公開されました。

これを受け複数の企業がFolding@homeへの貢献、あるいは貢献の呼びかけを表明しています。

サイボウズもFolding@homeに参加中です

サイボウズもオンプレミス機材の一部を利用し、Folding@homeに参加しています。

2020年3月16日現在、24CPUコアのサーバ105台でFolding@homeのクライアントを実行しています。

デプロイ方法

今回の用途に使える機材はKubernetesノードであったため、Folding@homeのクライアントはPodとして実行することにしました。

KubernetesマニフェストやDockerイメージは https://github.com/richstokes/k8s-fah を参考にし、 それを元にいくつかの変更を加えています。

  • クラスタサイズに合わせてPod数を変えたいため、DeploymentではなくDaemonSetを使用する。
    • ただし、他のPodがスケジュールされるとPreemptされるようにPriorityClassresources.requestsを調整する。
  • PodSecurityPolicyによってread-onlyなrootファイルシステムの使用を強制しているので、Folding@homeのクライアントが書き込むパスにemptyDirをマウントする。
  • PodSecurityoPolicyによってrootユーザによる実行を禁止しているので、実行ユーザを変更する。
  • 万が一クラスタ内で不要な通信が行われるリスクに備えて、CalicoのNetworkPolicyでFolding@homeのPodがアクセス可能な範囲を制限する。
  • resources.limitsに指定したコアはすべて使って構わないので、 --power=full オプションを指定する。
  • 2020/04/01追加: 1クライアントあたりのCPUコア数が多すぎると "No WUs available for this configuration" というログメッセージとともにアイドリング状態に入ってしまうので1クライアントあたりのCPUコア数を減らす。具体的にはDaemonSetの数を6個にして、それぞれのPodに割り当てるCPUコア数を搭載数の1/6にする。

具体的なマニフェストは以下に記載しています。

github.com

まとめ

サイボウズのFolding@homeへの貢献と、Folding@homeクライアント実行方法について説明しました。
Kubernetesノードがあればすぐに参加することができるので、もし余ったノードがある方はぜひ参加してみてください。

COVID-19にまつわる状況が一刻も早く改善することを願っています。