Help us understand the problem. What is going on with this article?

GCPでのディープラーニング学習環境構築方法

GCP(Google Cloud Platform)でディープラーニング学習環境構築方法

背景

 ようやくDockerでのディープラーニングGPU学習環境構築に成功した @karaage0703 。疲れを癒す間も無く、ディープラーニングの帝王Google社のデベロッパーアドボケイトから、新たなる天啓がくだる。

 喜び勇んで、GCPの無料アカウントを作成した @karaage0703 そこには、おびただしい数のメニューと、膨大なドキュメント…からあげのGoogleとの戦いは始まったばかりだ!(戦ってません)

GCPでディープラーニング学習環境を構築するメリット

 以下のようなメリットがあります。

  • 様々なフレームワーク(TensorFlow/PyTorch)、バージョンの使い捨ての学習環境を一瞬で構築できる
  • 計算リソースを、文字通り一瞬で確保できる
  • 家にでかいパソコンを置いて熱々になることが無い

 Googleの無料枠で試せる範囲での記事です。無料枠だとGPUは使えないので、GPUは使っていませんが、基本的な流れは同じです。

この記事の前提(必要なもの)

  • 基礎的なLinuxコマンドの知識
  • ネットに繋がるPC(Google ChromeブラウザがあればOK)

GPUでのディープラーニング学習環境構築の流れ

 最初にGCPに登録した後、以下の2通りの方法があります。

  • ComputeEngineで学習環境を構築
  • AI Platformで学習環境を構築

 ComputeEngineでVMを立ち上げると、自分の好きな環境が作れます。自由度が高い反面、Jupyter Notebookへのアクセスなどは、設定が色々大変です。

 AI Platformは、あらかじめセットアップされた環境を使えて、起動すればJupyter Labに一瞬でアクセスしてディープラーニングを始めることができます。

 使用感覚はGoogle Colaboratoryに近いと思います。Google Colaboratoryの詳細は以下ブログ記事参照ください。
Google Colaboratoryを使えば環境構築不要・無料でPythonの機械学習ができて最高

 お手軽に試したいならAI Platformがオススメです。この後、GCP登録から順に説明していきます。とりあえず速く試したい人は「ComputeEngineで学習環境を構築」を飛ばして「AI Platformで学習環境を構築」を読んでください。

GCPに登録

 GCPの公式サイトにアクセスします。

 無料という文字にフラフラ吸い寄せられてクリックして登録しましょう。クレジットカードの情報は必要ですが、無料枠を使い切ってもそのまま課金されることはないようです。

ComputeEngineで学習環境を構築

Compute Engineにアクセスします。

 VMインスタンスと表示されるはずなので「作成」をクリックしましょう。このインスタンスというのは、GCP上の仮想マシンです。インスタンスの作成というのは、どこか遠くにあるパソコンを、誰かがセットアップしてくれるとイメージしてください(もちろん、人が頑張ってセットアップするわけではなくソフトウェア技術を使って自動でセットアップされます)。

gcp_vm_01.png

 VMインスタンスは、ブートディスクの設定だけ、以下のようにUbuntu 18.04LTSを指定しましょう。

gcp_image.png

 他はそのままでOKです。GPUの指定の設定もあるのですが、無料枠だと設定できません。課金したらGPUを指定できるようになります。

 しばらくまつとVMが立ち上がります。もうこの時点で、Ubuntuがインストールされたマシンが自由に使えるようになったことになります。

 以下のように表示されるので「SSH」の横の下矢印をクリックしましょう。以下のように表示されるので「ブラウザウィンドウで開く」を選びましょう(そのままSSHをクリックしてもOKです)。

gcp_01.jpg

 以下のようにブラウザでクラウド上のサーバにアクセスできます。

gcp_02.png

 このまま学習環境をaptコマンドやpipコマンドで構築すれば、立派なディープラーニング学習環境です。

Dockerを使って環境構築

 VMインスタンス上でDockerを使えば、環境が簡単に構築できます。詳細は以下記事参照ください。

DockerでのディープラーニングGPU学習環境構築方法

 Docker自体は、以下コマンド実行してインスタンスを再起動すれば使えるようになります。

$ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/install-docker.sh | /bin/bash

 例えば、TensorFlowのDockerイメージを使えば以下コマンドでDocker環境が立ち上がります。

$ docker run -it --rm --name tensorflow-cpu tensorflow/tensorflow:latest

 以下のようにTensorFlow環境が起動します。

docker.png

 冒頭で教えてもらったDeep Learning ContainersのDockerイメージも同様に使えます。

deeplearning-platform-releaseで使用したいイメージを探せます。

 例えば、以下のようにDockerイメージを使えます。

$ docker run -it --rm --name tensorflow-gcp gcr.io/deeplearning-platform-release/tf2-cpu.2-0

 Jupyter Labを使用したい場合は設定が必要です。

AI Platformで学習環境を構築

 AI Platformにアクセスします。

 真ん中上の「新しいインスタンス」をクリックした後、好きなフレームワークを選択します(無料枠だとGPUは使えません)。

gcp_ai_01_01.png

 カスタマイズもできますが、今回はそのまま作成をクリックします。

gcp_ai_02.png

 インスタンスができたら「JUPYTER LABを開く」をクリックします。

gcp_ai_03.png

 以下のようなブラウザ画面が表示されます。これでJupyter Notebookやコンソールにログインできます。

gcp_ai_04.png

 Jupyter Notebookにアクセスすると、ちゃんとTensorFlowがセットアップされています。 

gcp_ai_05.png

GCP Tips

 Tipsなどをメモしていきます。

メニューのピン留め

 メニューはピン留めできます。

gcp_menu_01.png

 ピン留めすると、以下のようにアクセスしやすくなります。

gcp_menu_02.png

 Googleの中の人から教えてもらいました。

ファイルのダウンロード・アップロード

 GCP上のインスタンスに手軽にアップロード、ダウンロードしたいときは、「AI Platform」の左側のメニューから、ダウンロード・アップロードできて便利です。

gcp_ai_05.png

 速度も結構速いです。ブラウザのSSH画面からもダウンロード・アップロードできるのですが、そちらは速度かなり遅いです。

 ただし、100MBを超えるようなファイルだと、途中でダウンロードが止まってしまうようです。大容量のファイルをダウンロードする場合は、ファイルを分割するか、おとなしくgcloud appを使いましょう。

gcloud

 ファイルのダウンロードやsshアクセスなどがコマンドからできる便利なツールです。

gcloudインストール

 gcloud appのインストールはInstalling Google Cloud SDKを参照ください。

gcloudのチートシート

 何ができるんだっけ?とか、こんなことできるのか?となったらとりあえずチートシートをみるのが良いでしょう。以下コマンドでみられます。

$ gcloud cheat-sheet

gcloudでのGCPインスタンスからのファイルのダウンロード

 具体的なコマンドは以下となります。<instance name>はインスタンス名です。コピー元は絶対パス(ex: /home/<user name>/<file name>)で指定します。コピー先(ローカルPC)は、コマンドを実行したディレクトリからの相対パスでOKです(今いる場所でよければ.)。

$ gcloud compute scp <instance name>:コピー元 コピー先

参考:GCEからのデータコピーあれこれ (Mac版)

gcloudでのGCPインスタンスへのファイルのアップロード

 ダウンロードとほぼ同様で、以下となります。

$ gcloud compute scp コピー元 <instance name>:コピー先

 コピー先は絶対パス(ex: /home/<user name>/)で指定しましょう。ただ自分の場合Permission deniedとなる場合がありました。

 仕方なく、コピー先(GCP)上で以下のコマンドを実行して、適当なディレクトリ(test)を作って、権限を777にして、その場所(/home/<user name>/test)にアップしました。

$ mkdir test && chmod 777 test

gcloudでのSSHアクセス

 以下のコマンドでSSHでアクセスできます。<instance name>はインスタンス名です。

$ gcloud compute ssh <user name>@<instance name>

VS Codeでのリモート開発

 GCP上のファイルをローカルのVS Codeで直接編集して、リモート開発する方法です。以下ブログ記事参照ください。

VS CodeのRemote DevelopmentでラズパイでもGCPでもリモート開発

SSH接続(公開鍵認証)

 gcloudを使わず、自分で公開鍵認証方式でSSH接続する方法です。少し手間なのでgcloudを使うのが基本的にはおすすめです。Macの例ですが、他のOSでも基本的な流れは同じです。秘密鍵と公開鍵という仕組みを使ってアクセスします。この辺りの詳細は割愛しますが(私も詳しくないです)、要は秘密鍵と公開鍵という2つの鍵のペアを勘合札のように使って認証を行う仕組みです。

 まずは鍵を作ります。以下のコマンドを実行ください。メールアドレスはGCPに使用するgmailアカウントを使用します。

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "<user name>@gmail.com"

 以下のように鍵の名前の入力を促すメッセージが出てくるので、好きな名前で保存します(ここではgcpとします)

Enter file in which to save the key (/Users/<user name>/.ssh/id_rsa): gcp

 続いて、パスワードを2回入力しますので、自分の好きなパスワードを入力してください。

 gcpgcp.pubという2つのファイルが生成されますが、それぞれ秘密鍵と公開鍵になります。

 公開鍵の方をGCPに設定します。まずは公開鍵 gcp.pub の中身をコピーします。公開鍵は普通のテキストファイルなので、テキストエディタでも開くことができますが、以下コマンドでクリップボードにコピーすると確実です。

$ pbcopy < gcp.pub

 続いて、GCPのインスタンスに鍵を設定しましょう。インスタンスの詳細画面を開きます。AI Platform(GCEでも可)の以下画面で、インスタンス名をクリックします。

gcp_ai_03.png

 インスタンスの詳細情報が出てきます。ここで画面の中ほどに「外部 IP」という表示があります。これがインスタンスのIPアドレスとなります。

 そのあと、画面上の「編集」ボタンをクリックするとインスタンスの編集が可能となります。下の方に「SSH認証鍵が0個あります」という表示があるので、そこに先ほどコピーしたテキストをペーストして保存しましょう。もし入力できない場合は画面上の「編集」ボタンがクリックされていない可能性があります。

 これで設定は完了です。あとは、以下コマンドでsshでアクセスします。<user name>はgmailのアカウント名、<ip address>は、インスタンスのIPアドレスです(インスタンスの詳細画面で確認できます)。

$ ssh <user name>@<ip address> -i ~/.ssh/gcp

 このあと、パスワードを求められるので、鍵を生成したときに入力したパスワードを入力しましょう。

 ここで注意するのは、秘密鍵を使ってアクセスする点です。間違えて公開鍵(gcp.pub)を使ってアクセスしようとすると、Permission denied (publickey).と表示されアクセスできません。理屈を理解していれば間違えませんが、ハマると悩むことになります(私はよく理解せず実行していてハマりました。

 sshでうまく接続できないときはsshコマンドに-v オプションをつけると詳細なログを確認できます。エラーメッセージで検索して、原因を調査しましょう。

GCP上で実行したTensorBoardの結果をローカルで表示

 SSHでトンネルを掘る方法で実現しました。あらかじめ、この前で説明した「SSH接続(公開鍵認証)」ができるように事前に設定しておきます。そして、ローカルPC上で、以下の通りSSHのトンネルを掘ります。<user name>はgmailのアカウント名、<ip address>はインスタンスのIPアドレスです

$ ssh -L 8888:localhost:6006 <user name>@<ip address> -i ~/.ssh/gcp

 これにより、GCPの6006ポートからローカルPCの8888ポートにトンネルが掘られます。

 GCP上では、TensorBoardを起動します。<log dir>はログのあるディレクトリです。ポート番号は、トンネルを掘るときの番号と合わせるようにしてください。

$ tensorboard --logdir <log dir> --port 6006

 この状態で、ローカルPCのブラウザ(Google Chrome推奨)で、以下のアドレスにアクセスすれば、ブラウザ上にGCPのTensorBoardの実行結果が表示されます。

http://localhost:8888/

参考:リモートからtensorboardにアクセスする

まとめ

 GCPでのディープラーニング学習環境構築方法に関して、簡単に説明しました。

 あまりにメニューが多く絶望しかけましたが、機械学習やディープラーニングなら、Compute EngineとAI Platformを押さえておけば良いのかなと感じました。特にAI Platformはお手軽で良いですね。今後さらにメニューが拡充していきそうです。

 しかし、こんなに簡単に使えるならDockerとか頑張って覚えなくて良かったのでは?という気が今更してきましたが、気づかなかったことにしましょう… 

 今後、GCPに課金もして使っていこうかなと思っています。GCP初心者なので、オススメの使い方などあれば教えてください。

参考リンク

「 GCP入門編」記事一覧(トップゲート)

無料!Tensorflow-gpuをCUDA, cuDNNと共にインストールして使う方法(GCP)

GCPを使ったKaggleのデータ分析 導入編

[秘密鍵/公開鍵]GCPにSSHで接続する方法

GCPに自分のPCからssh接続する方法[秘密鍵/公開鍵]

変更履歴

  • 2020/09/16 VS Codeでのリモート開発・gcloudコマンドに関して追記
  • 2020/09/15 ファイルのアップロード・ダウンロードに関して追記
  • 2020/09/10 GCPへのsshでのアクセスに関して追記
  • 2020/08/12 GCP Tips追記
karaage0703
闇のエンジニア/変なデジカメ開発中/ディープラーニング芸人/Raspberry Piとからあげ大好き/はてなブログ書いてます
https://karaage.hatenadiary.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした