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に限定
やったこと②: 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時間で終わるはず。
後から調べて分かったこと
- EC2のt2インスタンスには、「CPUクレジット残高」という概念があり、これが枯れている状態だと使えるCPU資源が限定される。