タダでGCPのGPU(NVIDIA Tesla K80)を使ってディープラーニング(NVIDIA DIGITS)する方法

（更新）
2/14記事公開
NVIDIA DIGITSを用いた学習済モデルの構築方法は後日公開予定
※いいね数を見て興味を持つ人が多ければ急いで更新します。


【やることの流れ】
1.[Google Cloud Platformの無料トライアルに登録](https://qiita.com/drafts/060806d9fc4366c58d40#gcp%E3%81%AE%E7%84%A1%E6%96%99%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB%E3%81%AB%E7%99%BB%E9%8C%B2)
2.[Google Compute Engine上にGPU(NVIDIA Tesla K80)付きのVMインスタンスを構築](https://qiita.com/drafts/060806d9fc4366c58d40/edit#google-compute-engine%E4%B8%8A%E3%81%ABgpunvidia-tesla-k80%E4%BB%98%E3%81%8D%E3%81%AEvm%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E6%A7%8B%E7%AF%89)
3.[VMインスタンスにVNC(リモートデスクトップ)接続環境を構築](https://qiita.com/drafts/060806d9fc4366c58d40/edit#vm%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%ABvnc%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E6%8E%A5%E7%B6%9A%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89)
4.ディープラーニング用のラベリングツールをインストール、ラベリング実施
5.NVIDIA DIGITSを用いてディープラーニングを実行し、学習済モデルを構築


【前提と留意事項】
・GPUを利用するとき以外はGPU或いはInstanceを停止してください(物凄い勢いで無料枠を消費します。)
・GCP、GPU、ディープラーニング未経験でも問題なし（ただし、Linuxの基本的操作スキルは必要）
・GCPは無料枠(3万円分)の利用を想定（Gmailアカウントを持っていること）
・インスタンスの起動時に課金されるため、使用時以外は停止することを推奨
・海外サイトでも情報公開しているため画像内の言語は英語（日本語とボタン等の配置は同じ）

#GCPの無料トライアルに登録
- 大まかな流れ 
    - GCP無料トライアル登録
    - GCE有効化
    - アカウントアップグレード
    - GPUの制限解除 

[Google Cloud Platform](https://cloud.google.com/)にアクセス
「TRY GCP FREE」をクリック
![1_GCP(registry).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/7e72e7d4-633a-25d8-1b50-6664de64bcbf.png)

適宜入力して、「AGREE AND CONTINUE」をクリック
![2_GCP(AGREE AND CONTINUE).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/241cd73f-abe7-544e-973b-5e484a2b4c66.png)

所属やクレジットカード情報を入力して、「START MY FREE TRIAL」をクリック
※カード情報を入力しますが、無料枠を超えて勝手に課金されることは有りません
![3_GCP(START MY FREE TRIAL).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/fee2980a-353d-b3f0-c5b7-5a7ac491e581.png)


#GCPにGPU使用の伺いを立てる
GCPでGPUを使用する場合は、Googleに設定を変更してもらう必要があります
(ですので、登録後すぐにGPUを使用することはできません)

まずCompute Engineを有効にするために、GCP consoleのHOME画面左のメニューより、 
Compute Engine ＞ VM Instance (VMインスタンス) をクリック
![4_GCP(gce select).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/71e02df7-c967-9adf-c774-6e6bf1a01cb7.png)


Enable Billing（課金を有効にする）をクリックする
※クリックしても無料枠を超えて勝手に課金されることは有りません。
![5_GCP(gce enable).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/e63947bc-e886-5a79-8414-614c0fb5d1cc.png)


有効になるまで少し待ちます（完了すると以下の文言が消えます。）
![6_GCP(gce enable loading).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/31a56b2e-dc5e-0ea5-d0f9-edb6bed300ff.png)

初期設定ではGPUの使用に制限がかかっているため、GCPに設定変更を依頼
まず、HOME画面左のメニューより、 IAM&admin (IAMと管理)＞Quotas (割り当て) をクリック
![7_GCP(IAM&admin).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/5236c490-eccf-7379-7112-348ac490066a.png)

GPUを有効にするために、アカウントのアップグレードを行う
アップグレード後は再読み込みを実施すると画面に反映される
![8_GCP(account upgrade).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/27defec7-c13e-69df-5a63-5e49086e1405.png)


GPUの割り当てを編集するために、Metric(指標)＞GPUs (all regions)のみを選択
![8_GCP(gpu enable).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/a218696a-1ca5-858b-2ffd-8f199ea9d3c0.png)

チェックボックスをチェックして、「EDIT QUOTAS(割り当てを編集)」をクリック
![9_GCP(edit quotas).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/aac5ffe4-5af0-d6c4-8a16-b1ebdb1a2689.png)


New quota limitに0以外の数値を入れて、適当にリクエスト文言を入力してリクエスト登録
![10_GCP(submit request).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/aa9617df-e99c-7388-c645-b28fa5659781.png)

早ければ30分くらいで設定完了メールが届き、GPUが使用できるようになる


#Google Compute Engine上にGPU(NVIDIA Tesla K80)付きのVMインスタンスを構築
- 大まかな流れ 
    - VNC接続用にファイヤーウォールの設定
    - GCEでGPU付きVMインスタンスの設定

まず、後々VNC接続できるようにVM作成の前に、5901ポートを開ける設定をする
HOME画面左のメニューから、VPC Network(VPCネットワーク) ＞ Firewall Rules(ファイヤーウォールルール)をクリック
![11_GCP(vpcnetwork select).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/4a37787f-8df4-9be5-65b0-6f9012cdf90f.png)


上部の「Create a firewall rule(ファイヤーウォール ルールを作成)」を押下し、以下の通り設定し作成する
この例のTarget Tags(ターゲットタグ)の「vnc-server」がVMインスタンスで紐づけるIDになる
![12_GCP(make firewall rules).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/baa58426-f380-70bc-9ad0-b35a2e7106d0.png)



次に、GPU付きVMインスタンスの設定
GCEのVMインスタンスページでCreate(作成)をクリック
![13_GCP(VM instance select).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/a9f23973-34d9-0432-3cbb-7fcf6b6ffc37.png)

インスタンスの詳細設定（以下の通り設定しないとGPUは使用できない）
Name:**適切な名前を入力**
Region(リージョン):**us-west1(Oregon)**(オレゴン)
Zone(ゾーン):**us-west1-b**

ここでMachine type(マシンタイプ)でCustomize(カスタマイズ)をクリックすると、
vCpuとGPU有無を設定可能になる

Number of GPUs(GPU数):**1**
GPU type(GPUモデル):**NVIDIA Tesla K80**
![14_GCP(make VM instance).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/0815f1a8-4653-bfd2-c862-79b041a6c392.png)

Boot diskで変更をクリックし、
Boot disk:**Ubuntu 16.04 LTS**
Size:**50GB**に変更する
![15_GCP(change boot disl).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/b16d1cc2-a6e3-bb63-93fe-9e410e4c64f2.png)


VNC接続可能なファイヤーウォールルールを紐づけるために、
Management, security, disks, networking, sole tenancy 
(管理、セキュリティ、ディスク、ネットワーク、単一テナンシー)をクリックして、
Networking＞Network Tagsにファイヤーウォールルールで作成したタグ名を入力して作成

![16_GCP(firewall rules).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/ace27587-d709-62ef-7573-b34eeec382f1.png)

1分程度待つと、上記設定のVMインスタンスが構築され、SSHログイン可能になる

#VMインスタンスにVNC(リモートデスクトップ)接続環境を構築
- 大まかな流れ 
    - デスクトップ環境のインストール
    - VNCサーバのインストール
    - VNC接続の確認

※ここから先、基本的なLinux操作ができる前提で進める
デスクトップ環境をインストールするために、console上からSSHを押下してログインする
![17_GCP(ssh login).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/962c3024-b291-744a-f09e-2001198c5fbe.png)


別ウィンドウが開かれ、ログインが成功すると以下の様になる
![18_GCP(ssh login OK).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/bf87765a-5d7c-9b3e-2acb-7dcc661aa2b0.png)

まず、apt-getのアップデートを行う
>sudo apt-get update

続いて、gnome-coreをインストール
>sudo apt-get install gnome-core

最後に、gnome-panelをインストール
>sudo apt-get install gnome-panel

ここから、VNCサーバのインストール
>sudo apt-get install vnc4server

一旦、VNCサーバを起動して、設定ファイルを生成する
※初回はパスワード設定を求められる
>vncserver

起動に成功すると、以下の位置に設定ファイルが生成される
![19_GCP(vncserver start).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/5e55a5af-2f9e-d04b-fbf5-08708dc9b8fd.png)

VNCサーバの設定を変更するために、一旦、VNCサーバを停止する
>vncserver -kill :1

設定を変更するために、xstartupを編集
>vim .vnc/xstartup

- xstartupの編集内容
    - #unset SESSION_MANAGERの#を外します。
    - [ -x /etc/vnc/xstartup ]以下の全ての行の先頭に#を付けます。
    - 一番下に以下の設定を追加します。
        - metacity &
        - gnome-settings-daemon &
        - gnome-panel &

![20_GCP(edit xstartup).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/418a09e1-9e37-2a8f-4e7e-b310cce4c2b6.png)
※ちゃんと:wqで上書き保存するように

再びVNCサーバを起動
>vncserver

※自動起動にしていないため、インスタンスを立ち上げる度にVNCサーバを起動すること



VNC接続の確認

まずVNCクライアントを用意、ここではGoogle Chromeのアプリを使用するためインストール
[VNC® Viewer for Google Chrome™](https://chrome.google.com/webstore/detail/vnc%C2%AE-viewer-for-google-ch/iabmpiboiopbgfabjmgeedhcmjenhbla?hl=ja)

External IP(外部IP)がVNCで接続するためのIPアドレスを以下から確認
![17_GCP(ssh login).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/962c3024-b291-744a-f09e-2001198c5fbe.png)

VNC Viewerを起動し、Addressに「外部IP:5901」を入力して接続
![21_GCP(vnc connect check).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/a368c91b-bb26-948a-53a7-ada30ca5140d.png)


接続パスワードを入力して、成功するとUbuntuデスクトップが表示される
![22_GCP(vnc desktop).PNG](https://qiita-image-store.s3.amazonaws.com/0/349212/48f220f6-db78-eb72-ed05-e10ad3842390.png)


** ＜注意＞GPUを利用するとき以外はGPU或いはInstanceを停止してください(物凄い勢いで無料枠を消費します。) **