いつになっても研究室の計算機が使えないのでGCEを使う話 1

# 研究室の計算機が使えない
大学の研究室というのはセキュリティなどの問題から、計算資源を得るためにはサーバ管理者から信頼を勝ち取らなければならない。
これはたとえ教員から計算資源を得る許可を得ていても同様で、(教員を経由したとしても)その管理者がだんまりを決め込んでしまうと自体はまるで進展しない。
この自体の原因は主に普段自分が研究室に居ないせいなのであるが、慢性的な席不足のため私は研究室から机が割り当てられなかった人間だという事実を少しは考慮して欲しいと思う。
そんなわけで計算資源を得ることができなくなっているのだが、研究をしなければいよいよもって大学に在籍している意味がなくなってしまう。よって仕方がないので多少身銭を切ってでも研究環境を整える必要があるのだ。

# GCEで作りたい環境
環境を作るにあたって、まずどのような要件があるのかを確認しなければならない。
今回は機械学習(特にTensorflow ・PyTorchを用いた自然言語の深層学習)を行いたいと考えている。
さて、この内容で欲しい計算機の要件を考えてみる。

1. GPU(本番的にはTeslaV100を望みたい)
2. 20GB～のメモリ
3. 10GB未満のデータ領域(モデル・データを多めに見積もったもの・OSやPython等はこれに含まれない)
4. cuda＋cudnn 環境

とりあえず以上が最低限必要なものとして挙げられそうだ。

# GPUの割当を受け、GCEのインスタンスを建てる

まずGCP(Google Cloud Platform)のプロジェクトを作成し、GPUの割当を受けなければならない。プロジェクトの作成に関しては[このサイト](https://www.apps-gcp.com/gcp-startup/#GCP-2)に従えば可能だろう。

[GCPコンソール](https://console.cloud.google.com/)から左上ハンバーガーメニューより、``Compute Engine``、``VM インスタンス`` と進む。すると初回アクセス時のみ Compute Engine の初期化が行われる。
初期化が終わったならば同様にハンバーガーメニューから、``IAMと管理``、そして``割り当て``を選択する。
```サービス```から```Compute Engine API```を、```指標```から ```GPUs(all regions)``` を選択し、出てくるサービスである```Compute Engine API [GPUs (all regions)]``` にチェックを入れ、上部の```割り当てを編集```をクリックすると名前や電話番号などの入力欄が現れる。これを入力していくと、最後に```リクエストの説明```を書く部分になる。これはおそらく日本語でも大丈夫であると考えられるが、英語で書いて損はないだろう(ちなみにTwitter APIの申請は英語のみのようだ(2019年3月現在))。

参考までに私が送りつけたリクエストの説明は日本語訳すると以下のようであった。


> 私は会話システムなどのNLPについて実験したいです。
フレームワークとしてTensorflowとPyTorchを使います。
私の最初の実験は、日本語のTransformer(Attention-is-all-you-need)です。


さて、このリクエストは2営業日程度の時間で処理される(私の場合は約3時間で処理された)。それまでの間は自分の実験内容を再確認するなどすればよいだろう。

このリクエストが受理されたものとして話を進めていこう。

まず```VMインスタンス```へ移り、```作成```を押す。すると左側```新規VMインスタンス```が選択された状態の画面が見えるだろう。

<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/147520/7806f357-2263-b83a-8446-3599fe84213f.png" width="80%">
</div>


ここから計算マシンを選択していく。うっかり間違えると凄まじい利用料金を請求されるためしっかりと注意を払わなければならない。上から順に眺めていこう。

1. 名前    
　インスタンスの名前である。自分が判別できるような名前を指定すれば良い。
2. リージョン・ゾーン    
　そのリソース(ほぼマシンと同義)が物理的に実行される地域のようだ。[地域によって使うことができるGPUの種類が異なる](https://cloud.google.com/compute/docs/gpus/?hl=ja) ため、自分の使いたいGPUに合わせて選択をすればよいだろう。
3. マシンタイプ
　CPU、メモリやGPUを設定する重要な項目である。まず```vCPU x 1```から必要なサイズを 選び、```カスタマイズ```でGPUを選択する。

<div align="center">
<img src="https://qiita-image-store.s3.amazonaws.com/0/147520/adfd0fde-2f9d-b253-ff68-d4e6ce44e2ee.png" width="80%">
</div>

4. コンテナ    
　今回は特に扱わない。
5. ブートディスク    
　ほとんど趣味の領域ではあるが、OS は Ubuntu 18.04 LTS、ディスクサイズは多めに見積もって30GB程度で十分だろう。
6. IDとAPIへのアクセス   
　任意で ```各APIにアクセス権を設定``` から ```ストレージ``` を ```読み取り/書き込み``` にすると今後便利かもしれない。(GCSとの連携に用いるようだが、sftp などを用いてローカルマシンとのデータ転送を行う予定ならばこの手続きは不要だろう)
7. ファイアウォール    
　例えばJupyter notebookといったHTTP/HTTPS通信を行う必要がある場合にはこの設定を行えばよいだろう。(SSHポートフォワーディングなどを用いる予定ならばこの設定は不要だろう)
8. 管理、セキュリティ…   
　特に```セキュリティ``` のSSH認証鍵が重要だ。ここにローカルマシンのSSH認証鍵を貼り付けることでこの計算マシンへアクセスすることができる。   
　鍵を追加すると、左側にローカルマシンのユーザ名が表示されると思われるが、これが計算マシン上のユーザとして自動的に作成されるため、SSH接続する際には、```ssh [user-name]@[machine-global-address]``` のようにアクセスすることとなる。

以上の設定が終わったのならば、右部の料金予測を見る。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/9ea8dbe4-8a5c-a219-52f5-f33f969a866e.png)

　この合計とは一ヶ月マシンを **継続して** 使い続けた場合の料金であるから、我々が寧ろ注目すべきは1時間における利用料金だろう。 
$0.838 / hour であるから、およそ1時間 100円程度 だと考えれば良いはずだ。
　ところがこれは Tesla T4 を1台のみ用いた料金であり、これがTesla V100 を2台ほど用いると話は大きく異なる。~~破産しそうになったなら適当な箇所に訴えて研究室を変えて頂くか、大学を辞める方が良いだろう~~

最後まで確認し、内容に不服がなければページ下部の```作成``` を行う。

作成されると勝手に起動してしまうが料金がかかってしまうため、**必ず停止** しておく。停止方法は、```vmインスタンス``` のページから、起動しているインスタンスの右側ボタンからメニューを出し、```停止``` を押すだけだ。起動する場合には同様にして ```開始``` を押せば良い。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/b970abac-d581-b922-9cc8-7527c604c9a2.png)

# 目次
[いつになっても研究室の計算機が使えないのでGCEを使う話 1](https://qiita.com/MeguruMokke/items/de3c0665ec2fb5ba2110)
[いつになっても研究室の計算機が使えないのでGCEを使う話 2](https://qiita.com/MeguruMokke/items/8fc275e7c41267a12b74)