Google Cloud Platformの無料トライアルを使って、新型コロナ解析に貢献する話


(自ブログからの転載です)

はじめに

前回の記事で、AWSのインスタンス上にFolding@Homeを乗せて新型コロナの解析を試みたのですが、インスタンスの制約上あまりうまくいきませんでした。
本記事は、同様のことをGoogle Cloud Platformの無料トライアル枠でやってみたものです。
今回は、 トライアルに申し込むともらえる 12か月使える$300分のクレジット を活用していきます。

やったこと①: アカウント作成

今回はアカウントを作るところから。

  • [https://cloud.google.com/] にアクセスし、「無料トライアル」をクリック
  • Googleアカウントでログイン
  • 利用規約への同意、個人情報の入力
    • ここでクレジットカードの情報を求められるが、あくまで個人確認のためのもの。無料枠クレジットを超過しても、インスタンスを止められるだけで追加料金は発生しない。

やったこと②: プロジェクトの作成

今回の用途のために、プロジェクトを新しく作成。

  • 画面右上の"My First Project"と書かれた部分をクリック。ポップアップした画面内の「新しいプロジェクト」をクリック

  • 適当にプロジェクト名を入力して作成。

  • 自動では切り替わらないので、もう一度"My First Project"をクリックし、ポップアップ画面から作ったプロジェクトを選択し、「開く」。

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

AWSで試したとき同様、VPC環境をまず構築し、その中にインスタンスを立てる。

③-1. VPC+サブネット作成

  • 画面左のメニューから、「VPCネットワーク」->「VPCネットワーク」を選択
    • 初回だと、画面が表示されるまで時間がかかるので注意。
  • 画面上部の「VPCネットワークを作成」をクリック

  • VPCの名前を適当に決める。
  • サブネットの作成もここで行える。今回は以下の画像のような設定にした。
    • ここで、リージョンはこの後建てるインスタンスにそろえるために、us-west1を選択。

  • 「作成」を押して完了。

③-2. ファイアウォール設定

  • 画面下部に、作成したVPCが表示されるので、VPC名をクリック
  • 「ファイアウォール ルール」 -> 「ファイアウォールルールを追加」の順にクリック
  • 以下のように入力し、「作成」。
    • 自分だけアクセスできればよいので、「ソースIPの範囲」には、自分自身のIPアドレスを入力(例:100.101.102.103/32)

  • 上記の要領で、以下2つのポートについても設定。

    • tcp: 7396 (Folding@HomeのWebコントローラ用)
    • tcp: 49152~65535の範囲の好きな数字 (SSH接続用)
  • 最終的に以下のようになる。(tcp:22はこの後の手順で削除する)

  • 補足; AWSではユーザが作成していたルートテーブルやインターネットゲートウェイは、GCPでは勝手に設定してくれる。

やったこと④: VPC上にVMインスタンス構築

③で作ったVPC環境上に、VMインスタンス(AWSで言うEC2)を作成。

④-1. インスタンス作成

  • 画面左のメニューから、「Compute Engine」->「VMインスタンス」を選択し、「作成」をクリック
  • 以下のように設定する。(スクショ省略。まだ作成はしない。)
    • 記載のないものはデフォルトのまま。
    • 今回はマシンとして、完全無料のf1-microではなく、CPUをまるまる1コア使えるn1-standard-1を選んだ。記事執筆時点では、下記設定で月額$24.67なので、1年間回しても無料クレジットが枯渇しない計算になる。
項目 設定値
リージョン us-west1
ゾーン us-west1-b
マシン n1-standard-1
CPUプラットフォーム 自由
ブートディスク Debian GNU/Linux9(stertch) 10GBの標準永続ディスク
ファイアウォール どちらもチェックを外す
  • 画面下部の「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」をクリック
  • 「ネットワーキング」タブの「ネットワークインターフェース」で、③で作成したVPC環境を選択し「完了」。

  • 「作成」をクリックすると、VMが作成され、起動する。

④-2. root権限を持ったユーザの新規作成

  • VMインスタンスの一覧画面で、作成したVMインスタンスの名前部分をクリック
  • 詳細画面が出るので、画面上部の「編集」をクリック
  • 画面下部に、「SSH 認証鍵が0 個あります」と書かれた箇所があるので、その下の「表示して編集する」をクリック
  • 以下のようなボックスが出るので、公開鍵ファイルの中身をコピペする。
    • うまくいくと、ボックスの左側にユーザ名が表示される。 この名前がLinuxに新規登録されるユーザ名になる。

  • 「保存」を押して完了

やったこと⑤: Linuxの設定

SSHのポート番号変更

  • ④-2で登録した公開鍵に対応する秘密鍵と、登録時に表示されたユーザ名で、VMにSSHログイン

    • アクセス先のIPアドレスは、VMインスタンス一覧の「外部IP」に表示されているもの。
    • まだ設定を変えていないので、ポート番号22でアクセスする。
  • /etc/ssh/sshd_configを編集し、以下の1行を追加する

    • *****には、③でファイアウォールに指定したSSH用ポート番号を入れる
Port *****
  • ファイル更新後、以下のコマンドを実行
$ sudo service sshd reload
  • ここで、「上記で指定したポート番号でSSHログインできること」「ポート番号22でSShログインができなくなっていること」を確認する。
    • 確認できたら念のため、③-2で作成した、tcp:22に対するファイアウォールルールを削除する。

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

最低限必要なFAHClientのみ導入。

インストール

$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-stable-64bit/v7.6/fahclient_7.6.9_amd64.deb
$ sudo dpkg -i --force-depends fahclient_7.6.9_amd64.deb
  • 以下のような画面がでてくるので、ユーザ名等を対話式で入力。
    • ユーザー情報系は設定しなくとも動作はするので、わからなければ空白でOK。
    • Power(どれくらいCPU資源を割くか)の設定でfullを選択すると、マシンのCPUを最大限に用いて計算をする。lightを選ぶとCPU利用率50%前後で動作する。

設定

  • /etc/fahclient/config.xmlを編集。更新にはroot権限必須。
<config>
  <!-- Client Control -->
  <fold-anon v='true'/>

  <!-- Folding Slot Configuration -->
  <!-- v7.6.9-1以降、causeにCOVID-19を指定すれば、コロナ関連タスクを優先的にアサインしてくれるようになる -->
  <cause v='COVID_19'/>
  <gpu v='false'/>

  <!-- 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>

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

  <!-- User Information -->
  <!-- ユーザ情報。ユーザ名を入れておけば個人でどれだけ貢献したか集計される -->
  <user v='deflat'/>
  <!-- 所属したいチームのID。省略可。ちなみに222は"Japan"チーム。 -->
  <team v='222'/>
  <!-- 省略可。公式サイトでメールアドレスを登録して受け取ったキーを設定するともらえるポイントが多くなる -->
  <passkey v='***ここにキーを張り付け***'/>

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

</config>

設定反映&サービス再起動

  • 以下のコマンドでサービスを再起動。
    • 補足: タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。
$ sudo /etc/init.d/FAHClient stop
$ sudo /etc/init.d/FAHClient start

動作確認

  • Webブラウザでhttp://<VMインスタンスの外部IPアドレス>:7396にアクセスする。
    • 以下のような画面が出たらOK。すでにタスクを取得している場合、進捗状況等表示される。

結果

  • 今のところ不具合もなく、1タスク10時間程度でこなせている。

まとめ

  • 「新型コロナウイルスの解析に貢献しつつ、Google Cloud Platformの環境構築を実践してみよう」とした話でした。
  • 結果、無料クレジットの範囲内でも、そこそこのスペックのVMを組むことができました。
  • 今回作った環境はしばらく起動させっぱなしにしてみます。1か月後あたりにもろもろどうなったかを報告できれば、とも考えてます。

更新履歴

  • 2020/4/20 FAHClient最新版(Ver7.6.9-1)に対応