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

はじめに

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

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

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

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

f:id:deflatSOCO:20200409212332p:plain

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

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

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

f:id:deflatSOCO:20200409213346p:plain

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

f:id:deflatSOCO:20200409213733p:plain

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

f:id:deflatSOCO:20200409213821p:plain

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

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

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

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

f:id:deflatSOCO:20200409214257p:plain

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

f:id:deflatSOCO:20200409214616p:plain

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

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

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

f:id:deflatSOCO:20200409225039p:plain

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

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

f:id:deflatSOCO:20200409220731p:plain

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

f:id:deflatSOCO:20200409221102p:plain

やったこと④: 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環境を選択し「完了」。

f:id:deflatSOCO:20200409222836p:plain

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

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

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

f:id:deflatSOCO:20200409223357p:plain

  • 「保存」を押して完了

やったこと⑤: Linuxの設定

SSHのポート番号変更

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

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

Port *****
  • ファイル更新後、以下のコマンドを実行
$ sudo service sshd reload
  • ここで、「上記で指定したポート番号でSSHログインできること」「ポート番号22でSShログインができなくなっていること」を確認する。

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

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

インストール

$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-testing-64bit/v7.4/fahclient_7.4.4_amd64.deb
$ sudo dpkg -i --force-depends fahclient_7.4.4_amd64.deb
  • 以下のような画面がでてくるので、ユーザ名等を対話式で入力。
    • 設定しなくとも動作はするので、わからなければ空白でOK。 f:id:deflatSOCO:20200409225353p:plain

設定

  • /etc/fahclient/config.xmlを開き、末尾の</config>の前に以下2行を追記する。
    • 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>

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

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

動作確認

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

f:id:deflatSOCO:20200409230718p:plain

結果

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

まとめ

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

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サービスでも同様のことを試してみたい。

【駄文】籠城生活の経過報告

えらい放置してた。のでなんか書いてみる。

水曜日に会社から帰宅してから、一度も家を出ることなく、 今ちょうど100時間。

「誰とも会わない」こと自体はべつに苦でもないし、 食料備蓄もあるので、今のところ問題はなし。

「この期に及んで、急用でないのに外歩いてる人たち、 本気で(--自主規制--)では...?」 ....みたいな、よろしくない妄想にとらわれたりとかはするけど。

会社の制度とかもろもろに助けられ、現在自宅で仕事ができる状態なので、 週明け後も、しばらくこの籠城生活は続けてみよう、と思う。

Anacondaでの仮想環境の使い方 Ver. 2019.03

はじめに

記事の趣旨

googleで「Anaconda 仮想環境」で検索したときにヒットする情報が古いものばかりなので、現在公式サイトで配布されている Anaconda 2019.03 における仮想環境の作り方をまとめておきます。

想定読者

  • Python環境としてAnaconda(Anaconda 2019.03)を利用している(OS不問)
  • Anacondaにおける「仮想環境」とは何かを知っている

注意点

しつこいようですが、この記事はAnaconda 2019.03における仮想環境の作り方についてのものです。 将来の更新でこの手順が使えなくなる可能性は大いにあるので、未来から来た方はご注意を。

事前準備

condaモジュールの最新化

  • 処理にあたってcondaモジュールを最新版にアップデートする。
    • Windows + Git bashでAnacondaを使っている場合、本手順必須。 配布されているバージョンのcondaモジュール(4.6.11)で、バグが発生することが報告されています(参考:github内Issueページ)。
$ conda update conda

初期設定

  • 各種シェルの起動時に、Anacondaの設定が走るようにする。
  • 以下のコマンドを、今後condaコマンドを実行する予定のあるシェル上で実行する。
$ conda init <シェル名>
  • <シェル名>には、コマンドを実行しているシェルの名前のうち、最も適しているものを以下から入力する。
  • シェルを再起動し、画面上に(base)と表示されたら成功

仮想環境の使い方

新規作成

# 実行のための最低限のモジュールだけ入っていればいい場合
$ conda create -n <仮想環境名(任意)> python=<pythonバージョン>
# インストール時にbase環境に入っていたもろもろのパッケージ含めた環境を作りたい場合
$ conda create -n <仮想環境名(任意)> python=<pythonバージョン> anaconda

仮想環境一覧の取得

$ conda info -e
# conda environments:
#
base                  *  D:\conda
py27                     D:\conda\envs\py27
py36                     D:\conda\envs\py36

仮想環境の有効化

$ conda activate <仮想環境名>
  • 画面上の表記が(<指定した仮想環境名>)に変われば成功
  • 過去バージョンではここが「OSによってコマンドが変わる」とか「同名コマンドがあるからシェル芸で対処しなくちゃいけない」とか言われていたが、全OS共通でこの独自コマンドを使うようになった模様

    仮想環境の無効化

$ conda deactivate
  • 画面上の表記が(base)に変われば成功

仮想環境の削除

$ conda remove -n <仮想環境名> --all

自己紹介

はじめまして

サイトだけ作って何も書いていませんした。自己紹介だけでも書いておきます。

個人のこと

プログラミングのこと

  • お仕事: 某メーカー系企業勤務
    • ソフトウェア開発職ではあるものの、最近はフロント寄りのお仕事多め
    • ありがたいことに、学生時代の研究からの流れで、今も機械学習系のお仕事にかかわらせてもらっています
      • 今は自然言語処理がらみのお仕事がメイン。一応音声や画像も経験あり
  • 使っている言語
    • メイン: python
    • サブ: C++(競プロではこっちメイン)
    • サブ: bash
  • 得意:
  • 弱点:
    • Web系の知識

ボードゲームのこと

このブログのこと

  • 公私問わずプログラミングがらみで躓いたこと、共有したいことがメインになりそう
    • とは言いつつそれ限定にするつもりはないです
    • 休業宣言したtwitter代わりにできればいいかな、と。

というわけで

果たしてみる人がいるかわかりませんが、よろしくお願いします。