Folding@homeをubuntu+GPUで動かす

#始めに
新型コロナが蔓延するこのご時世、ささやかでも何か世の中に貢献できないかと心の隅で思っていると、[こんな記事](https://twitter.com/NVIDIAGeForceJP/status/1242678690351374342?s=20)を見つけました。Folding@homeにGPUを貸してCOVID-19の解析支援ができる。昔は天体のものであったのですが、新型コロナ撲滅に微力ながら関われるということで、やってみました。

#参考リンク

[Folding@home Support](https://foldingathome.org/support/)

[Ubuntu Linux 18.04にGPUドライバをインストールする](https://note.com/setoyama60jp/n/n600df9f34230)


#前提システム

- NVIDIA GPU　筆者のシステムは GForce GTX1060 3GBメモリ 

　　(多分AMD製でも方法はあるはず)

- Ubuntu 18.04 Desktop搭載PC（この記事はGUI前提）

最初入れてすぐのFedora31でやったら、うまくいかずUbuntu 18.04インストールしなおしました。
FAHControlがpython2前提で、python3前提のシステムではうまくいかないようです。

#インストール準備
素のUbuntu 18.04から動かしてみます。
まずpython2.7をインストールします。

```
$ sudo apt update
$ sudo apt install python
```

次に、[このページ](https://note.com/setoyama60jp/n/n600df9f34230)の通りにNVIDIAのドライバをインストールします。一時期よりだいぶ楽になりました。

```
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
```

```
$ ubuntu-drivers devices
````

以下のようにリストが出ます。

```
== /sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C02sv00001462sd00008C95bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP106 [GeForce GTX 1060 3GB]
driver   : nvidia-driver-440 - third-party free recommended
driver   : nvidia-driver-435 - distro non-free
driver   : nvidia-driver-415 - third-party free
driver   : nvidia-driver-390 - third-party free
driver   : nvidia-driver-410 - third-party free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

440のバージョンがレコメンドされているので、440をインストールします。

```
$ sudo apt install nvidia-driver-440
```

再起動します。
nvidia-smiが使えるようになっているので、確認してみます。

```
$ nvidia-smi
Sat Mar 28 17:57:35 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64       Driver Version: 440.64       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 106...  Off  | 00000000:01:00.0  On |                  N/A |
| 57%   77C    P2   100W / 120W |    392MiB /  3012MiB |     92%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1055      G   /usr/lib/xorg/Xorg                            16MiB |
|    0      1115      G   /usr/bin/gnome-shell                          49MiB |
|    0      1430      G   /usr/lib/xorg/Xorg                           106MiB |
|    0      1573      G   /usr/bin/gnome-shell                          98MiB |
|    0      5936      C   ...org/v7/lin/64bit/Core_22.fah/FahCore_22   115MiB |
+-----------------------------------------------------------------------------+
```

出ればインストール完了です。

次に、nvidia-cuda-toolkitをインストールします。
Folding@homeでは、OpenCLを使ってGPUへのジョブの受け渡しや実行制御等を行っています。NVIDIAはcudaがメインのため、ツールキットをインストールしないとOpenCLが実行できません。実はここではまりました。確認のためのclinfoもインストールします。

```
$ sudo apt install nvidia-cuda-toolkit
$ sudo apt install clinfo
```

clinfoを実行すると、最後にOpenCLの表示が出れば完了です。

```
$ clinfo

 :
 :

ICD loader properties
  ICD loader Name                                 OpenCL ICD Loader
  ICD loader Vendor                               OCL Icd free software
  ICD loader Version                              2.2.11
  ICD loader Profile                              OpenCL 2.1
```

#Folding@homeのインストール
さて、Folding@homeのソフトをインストールします。基本的には[このページ](https://foldingathome.org/support/faq/installation-guides/linux/)通りに行います。[ダウンロードのページ](https://foldingathome.org/alternative-downloads/)にUbuntuの項目があります。3項目あるので、3項目のdebファイルをインストールします。リンクをクリックして、プログラムを開くを選択すると、インストール画面になるのでインストールしてください。ダウンロードして、dpkgコマンドでインストールしても良いです。
3つのソフトはFAHCliant、FAHControl、FAHViewerです。FAHCliantはメインのソフトで、バックグラウンドで動きます。FAHControlはFAHCliantの操作GUIで、Cliant制御のために使用します。FAHViewerは、実行状態や世界中の接続状態、分子モデルを表示して楽しめます。

GUIメニューからFAHControlを起動します。
初回起動のみ「Configuring fehclient」の画面が表示されます。
（すみません、スクリーンショットがありません）
この画面で情報を入力しますが、全てデフォルト設定で動作するので、Forwardボタンを押します。
しばらくすると、以下のメイン画面が開きます。

![Screenshot from 2020-03-28 15-55-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/6be9d3cd-7172-6de6-e230-fffa8fc81c58.png)

これは、すでにGPUの設定をして動作しているスクリーンショットですが、最初はCPUのslotのみ表示されています。そこで、GPUのslotを追加いたします。
左上のConfigureのボタンを押して、出てきたウインドウのexpertのタブをクリックします。
そして、 `Extra client options` の `gpu` を `true` に変更します。
次にslotsのタブをクリックします。

![Screenshot from 2020-03-28 16-06-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/3ce607f4-31e3-962b-faec-56d8c679b9f4.png)

これも追加した後のイメージですが、ここにcpuしかありません。
右下の追加を押します。

![Screenshot from 2020-03-28 16-07-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/abdcb746-f821-7526-ac9a-6940ef07f085.png)

中がスクロールできるので、GPUを選択してください。
入力する値は
gpu-index : -1
opencl-index : 0
cuda-index : -1
で動作しました。
これでgpuのslotが作成できましたので、メイン画面に戻ってログを見ていると、数回のアクセス失敗ののちに無事ジョブを取り、runningになります。
これで実際にジョブが走り出し、nvidia-smiでGPUが動作していることがわかります。ここでFAHViewerを起動すると、以下のようにアニメーションが表示されます。

![Screenshot from 2020-03-28 16-50-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/4ed9eb13-ca8b-2c50-4d34-0aef23deb001.png)





あとは放っておいて、気長に終わるのを待ちましょう。筆者の実施時は、１つ目のジョブが約6時間、2つ目のジョブが4時間半かかりました。家でPCを使っていないときにぼちぼち回してみたいと思います。

# 参考文献
* [Ubuntu 18.04 LTS DesktopのFolding@HomeでGPUを使用する！ – LAB4ICT](https://lab4ict.com/system/archives/3010)