AWSの無料枠でCOVID-19解析に貢献しようとしてうまくいってない話

はじめに

新型コロナウイルスの解析に貢献しつつ、AmazonWebServiceの環境構築を実践してみよう」とした話です。 結果、「正常に動作はしたが、無料枠ではスペック不足ゆえにあまり貢献できていない」という結論になってしまいましたが、 作業の記録として、残しておきます。

背景

コロナ流行辛い。なんとか解決早めらんないか。

今からでも3分ではじめられるコロナ解析貢献「Folding@home」の使い方」というPC Watchの記事を見つける

即自宅ノートPC(旧世代のGPU搭載)にインストール。1週間程度走らせ続けて25タスクほどこなすが、まだ物足りない感。

スペックは上げられないから、稼働台数増やしたい。でも物理マシンは1台しかもっていない...

そうだAWSアカウント持ってた。これ使ってみよう。無料枠でできるなら記事化すれば真似してくれる人いるかも?

行動。

やったこと①: VPC環境の作成

VPC環境をまず構築し、その中にEC2環境を立てることにした。 基本、こちらのブログ記事の通りに作業。

唯一セキュリティグループだけは、今回の利用目的に合わせて以下のように変更。

  • Webサービスを立てるわけではないので80番ポートはクローズ。
  • 代わりに、Folding@HomeのWebコントローラ用に7396番を開放
  • セキュリティ対策として22番以外のSSH用ポートを開放、初期ログイン用に22番はいったん残す。
  • 今回の環境は「自分だけアクセスできればいい」ので、ソースはすべてマイIPに限定 f:id:deflatSOCO:20200406210825p:plain

やったこと②: VPC上にEC2環境構築

①で作ったVPC環境上に、EC2環境を作成。この作業もこちらのブログ記事を参考にした。

今回は無料利用枠で作れる環境にしたかったので、構成は以下の通り

やったこと③: Linuxの設定

  • SSHのポート番号変更
$ sudo vi /etc/ssh/sshd_config

### 22行あたりに以下を追加(①で指定したポート番号)
Port 2****

### 保存後
$ sudo service sshd reload
  • EC2作成時とは別のRSA鍵でアカウントを作り、デフォルトの"ec2-user"削除
### ユーザ新規作成(root権限)
# useradd newuser
# passwd newuser

### SSH設定(root権限)
# cd /home/newuser/
# mkdir .ssh
# chmod 700 .ssh
# chown newuser:newuser .ssh
### ここで公開鍵をSCPで送信
# mv /home/ec2-user/id_rsa.pub .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys
# chown newuser:newuser .ssh/authorized_keys

### sudoできる権限を与える
# usermod -aG wheel newuser

### 別窓で"newuser"としてログイン。以降newuser側の画面で操作
$ sudo su -
### rootになれることを確認したら、ec2-user削除
# userdel ec2-user

やったこと④: Folding@Homeの導入

今回は、最低限必要なFAHClientのみ導入。

  • インストール
$ wget https://download.foldingathome.org/releases/public/release/fahclient/centos-5.3-64bit/v7.4/fahclient-7.4.4-1.x86_64.rpm
$ sudo rpm -i --nodeps fahclient-7.4.4-1.x86_64.rpm
  • 設定
    • /etc/fahclient/config.xmlを編集。更新にはroot権限必須。
<config>
  <!-- GPUを使うか -->
  <!-- Folding Slot Configuration -->
  <gpu v='false'/>

  <!-- どの程度CPU資源を利用するか。light,middle,fullの3択 -->
  <!-- Slot Control -->
  <power v='full'/>

  <!-- ユーザ情報。ユーザ名を入れておけば個人でどれだけ貢献したか集計される -->
  <!-- User Information -->
  <user v='deflat'/>

  <!-- スロット番号とタイプ。今回はCPU1個しかないのでいじらない -->
  <!-- Folding Slots -->
  <slot id='0' type='CPU'/>

  <!-- Webコントローラへのアクセス権限設定。xxx.xxx.xxx.xxxのところに自分のIPアドレスを記入 -->
  <allow>127.0.0.1 xxx.xxx.xxx.xxx</allow>
  <web-allow>127.0.0.1 xxx.xxx.xxx.xxx</web-allow>
</config>
  • 設定反映&サービス再起動
    • タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。
$ sudo /etc/init.d/FAHClient stop
$ sudo /etc/init.d/FAHClient start

結果

  • Webブラウザhttp://<EC2環境のIPアドレス>:7396にアクセスすると、下記のようにちゃんと動いているのが見える。 ...が、めちゃくちゃ処理が遅い
    • 画像は処理開始から24時間ほどたったときのもの。個人持ちのノートPCでも、このくらいなら3~4時間で終わるはず。 f:id:deflatSOCO:20200406220053p:plain

後から調べて分かったこと

  • EC2のt2インスタンスには、「CPUクレジット残高」という概念があり、これが枯れている状態だと使えるCPU資源が限定される。
    • 今回使用したt2-microだと、CPU使用率10%にしかならないのだとか。
    • インスタンス自体の停止→起動をすれば初期クレジットまで回復するそうなので、今後検討してみる。

まとめと感想

  • 新型コロナウイルスの解析に貢献しつつ、AmazonWebServiceの環境構築を実践してみよう」とした話。
    • 初めてやる自分でも、全行程完了まで2~3時間で行けた。先人の皆様ありがとうございます。
  • 今後、上記にもあった「インスタンスの停止→起動によるクレジット回復」を定期実行する方法も試してみたい
  • 加えて、ほかのIaaSサービスでも同様のことを試してみたい。