Google ColaboratoryのローカルランタイムをGCPで実行する

Google Colaboratory (Colab)でメモリが不足したので、Google Cloud Platform (GCP) でメモリ量の多いVirtual Machine (VM)インスタンスを生成し、それをColabのlocal runtimeとして利用してみた。

米国では、有料のColab Pro (約US$10/月)に登録すれば、利用できる資源をほぼ倍にできるようだが、米国の住所を入力しないと登録できないので、素直にGCPを使って試すことにした。

GCPのVMインスタンスからはGoogle DriveへのアクセスがColabのようにはできないので、データの転送が面倒ではある。ここでは、 VMから必要なデータへのアクセスをする前までの、GCPのVMインスタンスをColabのローカルランタイムとして利用できるようにするための手順を記録しておく。

Colab+GCP Compute — how to link them together が最も参考になった。

GCPプロジェクト

以下の例は、名前が「colab」、IDが「colab-269001」のプロジェクトを利用している。

Google Cloud PlatformのCompute EngineでVMを作成

Google Cloud Platformには登録してあるとする。執筆時点では、新規登録の際にUS$300の無料枠が設定されていた。登録にはプリペイドなどではないクレジットカードが必要。

Google Cloud Platformのコンソールから、Compute Engine を選択する。

VMインスタンスの作成

Compute Engine から VMインスタンスを選択する。

「作成」をクリックする。

VMの設定

名前、リージョン、ゾーン、マシンの構成を設定していく。

ここでは、名前に「colab-n1h8」、リージョンに「us-west1 (オレゴン)」、ゾーンに「us-west1-b」を設定している。

マシンの構成は、汎用のN1シリーズvCPUが8台、メモリがhighmemで合計52GBを選択した。

深層学習などで GPU が必要な場合にはその設定も必要になる。ただ、今回は、Random Forestでメモリ不足になっているのを解消して試すことが目的なので、GPUはあえて使っていない。また、無料枠ではvCPUの最大が8台であり、GPUも使えない。

次に、ブートするOSとそれに関連したライブラリなどの環境を選択する。

ブートディスクの設定

Colabと同等の環境を実現できるイメージが何かよくわからなかった。

ここでは、オペレーティングシステムに「Deep Learning on Linux」、バージョンに「Deep Learning Image: PyTorch 1.4.0 and fastai m41」を選択した。

ファイアウォールの設定

HTTP、HTTPSトラフィックを許可しておく。

プロジェクトのメタデータの設定

Colab+GCP Compute — how to link them together では、OSへのログインを容易するために、VMの生成時の設定でenable-oslogin を TRUEに設定するようにという指示がある。また、個別のVMで設定するのに加えて、後で記述するように、プロジェクト内のVMのデフォルトのメタデータの設定もするように指示がある。どちらか一方だけで良いと思われる。

プロジェクトのメタデータを設定するなら、インスタンスごとに設定する必要はなくなるので、プロジェクトでメタデータを設定し、個別のインスタンスでは省略するのがよいと思う。

インスタンス作成

一番下付近にある「作成」ボタンをクリックしてVMインスタンスを作成する。

メタデータの設定

上記手順のVM作成時にも個別のVMで設定しているが、Colab+GCP Compute — how to link them together では、プロジェクトのメタデータも設定して、VMのデフォルトとしても設定するように指示がある。

OSへのログインを容易するために、VMの生成時の設定でenable-oslogin を TRUEに設定する。

Google Cloud SDKを手元のWindows PCへインストール

Windows用のクイックスタートに従ってGoogle Cloud SDKをインストールする。

Google Cloud SDK インストーラをダウンロードし、インストーラを起動する。

とりあえず、ここではsingle userのみにインストールすることにした。

「Install」をクリックすると、必要なSDKファイルがダウンロードされ、インストールされる。

Google Cloud SDKの初期化

上記のGoogle Cloud SDKのインストールの最後で「Run 'gcloud init' to configurate the Cloud SDK」にチェックを入れてあった場合には、手元のWindows PCで自動的に初期化が始まる。

gcloud initの実行

新たに初期化をする際には、手元のWindows PC でインストールされた Google Cloud SDKに含まれている「Google Cloud SDK Shell」もしくは「Cloud Tools for PowerShell」を起動する。スタートメニューにあるはず。

「Google Cloud SDK Shell」を起動した場合には、そこで gcloud init を実行する。

login するか尋ねられるので、Yを入力して、初期化を進める。

アカウントの選択と許可

次のようにWebブラウザが起動される。アカウントを選択する。

アカウントを選択すると許可が求められる。

問題がなければ「許可」をクリックする。

正常に許可が処理されれば以下のように、認証が完了したことがWeb Browserに示される。

プロジェクトの設定

利用するプロジェクトが尋ねられるので、回答する。

以下では、プロジェクト「colab-269001」を利用する。

Region と Zoneの設定

Compute Region と Zone のデフォルトを設定するか尋ねられるので、一般的には、設定をするために Y を選択する。

以下では、「us-west1-b」を選択する。

Regionに「us-west1」、Zoneに「us-west1-b」が設定される。

GCPのVMへの接続

作成したVMインスタンス colab-n1h8 に接続する。初めてアクセスする際には、後で示すポートフォワーディングを設定するとうまく接続できない。Windows PC などのローカルホストのGoogle Cloud SDK Shellから次のコマンドを実行する。

PuTTY

上記のコマンドを実行すると別ウィンドウが開いてPuTTYが実行される。

最初にVMインスタンスにアクセスした際には、以下のような Security Alert が出力される。問題がなければ「はい」をクリックして進める。

PuTTYのウィンドウでShellが実行され、コマンド入力待ちになるはず。

ローカルランタイムの資料 https://research.google.com/colaboratory/local-runtimes.html に従って、インストール、設定を進める。

Jupyter は、利用しているVMインスタンスにインストール済みのはず。

VMインスタンスに拡張機能のインストールと有効化

Jupyter 拡張機能 jupyter_http_over_ws をインストールする。

Jupyter 拡張機能 jupyter_http_over_ws を有効化する

ポートフォワーディングを設定してVMに接続する

Windows PCなどのローカルホストからVMインスタンスで実行する Jupyter Notebook Server へのアクセス行われるようにポートフォワーディングを設定する。

ポートフォーワーディングで ローカルホストのポート8888にアクセスしたら、colab-n1h8の8888に転送されるように、ローカルホストのGoogle Cloud SDK Shellから次のコマンドを実行する。

--」以降にsshコマンドのオプションを書くことができる。バックグラウンドで動作させることなどが必要であれば、-f などの必要なオプションを追加する。

Jupyter Notebook Serverの起動

上記のポートフォワーディングを設定して起動したsshのコンソールからJupyter notebook サーバーを起動する。

Jupyter notebookサーバー起動時に示されるURLにブラウザからアクセスして、Jupyter notebook サーバが起動されていることを確認する。

上記の例では、次のURLを利用することになる。

http://localhost:8888/?token=d59030846c077aba4d356d238ddd8ff2cd86a69484ed0a1a

次のようにブラウザで表示されれば、Jupyter Notebook Server が起動していることになる。

Jupyter notebookサーバー起動時に示されるURLはColabのLocal Runtimeの設定にも利用する。

Colabでの Local Runtimeの設定

Google Colabで「ローカルランタイムに接続…」を選択する。

次のようなパネルでバックエンド(Jupyter notebook サーバー)のURL入力が求められる。

Jupyter notebookサーバー起動時に示されたURLをバックエンドURLに設定する。

正常に設定できれば、次のように「接続済み(ローカル)」の表示がされ、ローカルランタイムとして、GCPのVMインスタンスが使えるようになる。