Fedora 31にamdgpu-proを(一応)入れてRADEONでFolding@homeを動かす

# 概要
* amdgpu-pro(RADEON用の不自由なドライバー)はFedoraをサポートしていない
    * これをなんとかして突っ込んでOpenCLが動くようにする
    * 他の機能(OpenGLなど)が動くかは不明(未調査)
    * 今回はRADEON RX 550で動作を確認
* Folding@homeのインストールといくつかの設定をする

# amdgpu-proのインストール

## ダウンロード

普通にググると、ダウンロードして中の ```amdgpu-pro-install``` を実行するなどと出るが、Fedoraでは失敗する。

↓で手持ちのGPUを選択する(とはいえどれを選んでも同じ物が出てきそう)
https://www.amd.com/ja/support

そして **Ubuntu x86 64ビット** 版をダウンロードする。
(多分CentOS版でも少し手順が変わるだけでできそうだがひとまず忘れる)
そして展開する。

```
$ tar -xf (ファイル名)
```

```amdgpu-pro-19.50-967956-ubuntu-18.04``` のような名前のフォルダができる。バージョンが変わればもちろんこの名前は変わる。下記ではこの名前を例として使っている。

## なんとかしてFedoraにインストールする

各パッケージが ```.deb``` 形式になっているのでこれを解体する必要がある。
dpkgをインストールする。
もちろんrootユーザーでやる必要がある(# で示す)。

```
# dnf install dpkg
```

そして ```.deb``` ファイルが入っているフォルダに入って ```.deb``` を全て解体する。

```
$ cd amdgpu-pro-19.50-967956-ubuntu-18.04
$ ls *.deb | xargs -I {} dpkg -x {} amdgpu_root
$ cd amdgpu_root
```

そして解体したファイルをOSに突っ込む。
rootユーザーで作業する。

```
# cd (ダウンロードした場所)/amdgpu-pro-19.50-967956-ubuntu-18.04/amdgpu_root
# ls
etc  lib  opt  usr ←こんな風にフォルダがある
```

そしてこの各フォルダを / (ルートディレクトリ) にコピーする。

```
# cp -R * /
```

コピーしたモジュール(```.so```ファイル)をOSに認識させる。

```
# ldconfig
```

# Folding@home のインストール

ここではCUI版(つまりコマンドのみで操作する)をインストールする。
これはCentOS版をインストールすればよい。
https://download.foldingathome.org/releases/public/release/fahclient/

ここから CentOS-(数字がでかいやつ) → v(数字がでかいやつ) → fahclient-***.x86_64.rpm と進んでダウンロードする。
そしてインストールする。

```
# rpm -i (ダウンロードした.rpmファイル)
```

## 最初の設定

###チームとかpasskeyとか
動かすだけなら必要ないが、最初の設定のときにやっておいた方が何かと楽である。

https://apps.foldingathome.org/passkey/create
先にユーザー名を決めて、↑からpasskeyを取得しておく。
ユーザー名は任意だが、大小文字が区別される。
メールでpasskeyが届く。

https://stats.foldingathome.org/teams
チームも調べておくとよいだろう。
↑のチーム一覧の他、Twitter等にもチームの案内がある。

### 設定ファイルの生成

準備ができたら設定ファイルを生成する。

```
# FAHClient --configure
(いくつかの質問に答える passkeyなどもここで入力する)
```

設定ファイルは ```/etc/fahclient/config.xml``` に保存される。
このファイルを直接編集することでも設定の変更が行える。
変更を反映するにはFolding@homeの再起動が必要。

### ブラウザ用UI

Webブラウザから進行状況などを確認する機能の設定をする。

``` /etc/fahclient/config.xml
<allow v='127.0.0.0/8 192.168.1.0/24'/>
<web-allow v='127.0.0.0/8 192.168.1.0/24'/>
```

* インストールしたPCから直接アクセスするなら ```127.0.0.0/8``` だけでよい
* ```allow``` と ```web-allow``` の両方を書かないとアクセスできない

このPCからは localhost:7396 でアクセスできる。
他のPCからは (PCのIPアドレス):7396 でアクセスできる。

他のPCからアクセスする場合は、ファイヤーウォールの設定も行う。

```
# firewall-cmd --add-port=7396/tcp --permanent
# firewall-cmd --reload
```



### GPUの動作確認

```
# su - fahclient -s /bin/bash
$ FAHClient --info
```

↓のような文字列が出力される。

```
11:48:17:INFO(1):Read GPUs.txt
***************************** Folding@home Client ******************************
        Website: https://foldingathome.org/
      Copyright: (c) 2009-2018 foldingathome.org
         Author: Joseph Coffland <joseph@cauldrondevelopment.com>
           Args: --info
************************************ Build *************************************
        Version: 7.5.1
           Date: May 12 2018
           Time: 22:51:07
     Repository: Git
       Revision: 4705bf53c635f88b8fe85af7675557e15d491ff0
         Branch: master
       Compiler: GNU 4.4.7 20120313 (Red Hat 4.4.7-18)
        Options: -std=gnu++98 -O3 -funroll-loops
       Platform: linux2 4.14.0-3-amd64
           Bits: 64
           Mode: Release
************************************ System ************************************
            CPU: AMD Ryzen 7 2700X Eight-Core Processor
         CPU ID: AuthenticAMD Family 23 Model 8 Stepping 2
           CPUs: 16
         Memory: 31.35GiB
    Free Memory: 559.09MiB
        Threads: POSIX_THREADS
     OS Version: 5.5
    Has Battery: false
     On Battery: false
     UTC Offset: 9
            PID: 32025
            CWD: /var/lib/fahclient
             OS: Linux 5.5.11-200.fc31.x86_64 x86_64
        OS Arch: AMD64
           GPUs: 1
          GPU 0: Bus:11 Slot:0 Func:0 AMD:5 Baffin [Polaris11]
           CUDA: Not detected: Failed to open dynamic library 'libcuda.so':
                 libcuda.so: cannot open shared object file: No such file or
                 directory
OpenCL Device 0: Platform:0 Device:0 Bus:11 Slot:0 Compute:1.2 Driver:3004.6
********************************************************************************
```
```GPUs: 1``` と ```OpenCL Device 0:(省略)``` の両方が表示されていれば多分動作する。

#### ```GPUs: 0``` なのに ```OpenCL Device 0:``` だけ出ている場合
先頭に ```INFO(1):Read GPUs.txt```が出ていない場合は、GPUs.txtのダウンロードに失敗している。
Folding@homeを何度か再起動しているとダウンロードされて正常に表示される…かもしれない。

#### ```OpenCL: Not detected``` と出る場合

* Failed to open dynamic library 'libOpenCL.so' cannot open shared object file: No such file or directory 
```amdgpu-pro``` のインストールに失敗している。
```ldconfig``` の実行をやり直してみる。

* clGetDeviceIDs() returned -1
Fedora 31ではドライバーのインストール失敗時にしか出なかったが、他のディストリビューションでは別の原因で出ることもある模様。
参考: https://foldingforum.org/viewtopic.php?f=81&t=33353&p=319562#p319562

* clGetDeviceIDs() returned -1001
対応するGPUが見つからない場合に出る模様。

### Folding@home の実行

```
# systemctl start FAHClient
```

PC起動時に自動起動させるなら↓も実行する。

```
# systemctl enable FAHClient
```

### 進行状況の表示

ブラウザで localhost:7396 または (PCのIPアドレス):7396 にアクセスする。

または

```
進捗などを見る(JSON形式)
$ FAHClient --send-command "simulation-info 0"

GPUなどもある場合は番号を変えると確認できる
​$ FAHClient --send-command "simulation-info 1"
​
PPD(1日あたりの取得ポイント)の推定値を見る
FAHClient --send-command ppd​
```