Google Colabのランタイムをリモートホストに設定する

インフラ

1.Google Colabのランタイムをリモートホストに設定するまとめ

・Google Colabのランタイムを自宅内のリモートPCに変更する際のメモ
・リモートに直接接続する事は出来ないのでsshでポートフォワードする事になる
・TenforBoardはGoogle Colab内ではなくブラウザ内で表示させる事ができる

2.Google Colabのリモートホストランタイム

アイキャッチ画像のクレジットはPhoto by Markus Spiske on Unsplash
昨日「Google ColabのランタイムをGCEに設定する」の続きで本日はクラウドではなくて、自宅内のPCをランタイムにする下記のパターン(4)の実現メモです。
パターン(4)をやると何がうれしいかと言うと、
「自PCその2からデスクトップ表示用のソフト/ハードを取っ払って計算に専念させる事ができるはず」
と言う事です。
そして、リモートランタイムと勝手に名付けていますが、Google Colabのサポートしているランタイムは
・「ホスト型ランタイム」
 上図のパターン(1)です
・「ローカルランタイム」
 上図のパターン(2)、(3)、(4)です。
Google Colabは「http://localhost:~」で始まるアドレス以外はランタイム設定しても受け付けてくれないようなので、(4)は(3)と同様にsshでポートフォワードする事になります。

1)自PC2内でjupyterをセットアップ

以下、すいませんが、conda環境前提です。また、自宅内前提なのでセキュリティ的な厳密さは端折ります。
sshにポートを転送して貰うので自宅PC2にssh serverのインストールを行います。私はPop!_OS(Ubuntu 20.04LTS)を使っておりますが、ssh serverは入ってなかったので下記でインストールしました。
sudo apt-get install openssh-server:w
これだけで動くようになりますが、rootでログイン出来なくするとか、自動起動するようにするとか、パスワードログイン出来なくする等々の設定はお好みでググってやってみてください。また、もしアクセスが出来ない場合はiptablesやufwなどのフィヤーウォールを疑ってググってみてください。

次にjupyterに必要なパッケージのインストールを行います。

conda install -c anaconda jupyter

# Colaboratory チーム作成のJupyter 拡張機能です。
conda install -c conda-forge jupyter_http_over_ws

# Jediのv0.18とIPythonの7.19が相性悪いらしくアップデートしないと下記エラーがでます
#「TypeError: __init__() got an unexpected keyword argument 'inputhook'」
conda update ipython -c conda-forge

# Tensorboardを使う為です
conda install -c conda-forge tensorflow

下記コマンドで拡張機能を有効にします。

jupyter serverextension enable --py jupyter_http_over_ws

jupyterを起動します

jupyter notebook \
--NotebookApp.allow_origin='https://colab.research.google.com' \
--port=8888 \
--NotebookApp.port_retries=0 \
--ip=* --no-browser

起動すると以下のようなログが流れれば起動に成功しています。token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxの部分をGドライブなりGmailなりにメモっておきます。

・・・・
Or copy and paste one of these URLs:
http://localhost:8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
or http://127.0.0.1:8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

また、家庭内LANなどで自宅PC2のipアドレスがわからない場合はifconfigコマンドなどで調べて、こちらもメモっておきます。

$ ifconfig
enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.105 netmask 255.255.255.0 broadcast 192.168.10.255

2)自PC側からTERATERMでアクセス

sshにポートを転送するために使えるソフトウェアは色々とありますが、使用頻度も高いと思われるTERATERM前提で話を進めます。しかし、TERATERMは設定の保存ができないように見えるのでもっと良い方法を見つけたら書きなおすと思います。

まずはTERATERMをたちあげて先ほどの自宅PC2のipアドレスにsshでログインしてみてください。

無事ログインできたら、上部メニューのSetup -> SSH Forwardingを選択し、

出てきた画面でAddを押して

jupyter用の設定と


TensorBoard用の設定を加えます。

3)Colabの接続設定

右上の「接続」の横の「▼」より、ローカルランタイムに接続、を選びます。

先ほどメモしたtoken以下を張り付けます。今回はport 8888をjupyterの起動ポートに指定しているため、

「http://localhost:8888/?token=xxxxxxxxxxxxxxxxxxxxxxxx」

になります。

「接続」を押して問題がなければ無事に立ち上がります。カード名は表示されてませんが、メモリはちゃんと12GB表示されてますね。X window関係でGPUのメモリを150MBくらい使っているので、これを最終的に取っ払えたらなぁ、と思っています。

そして、TensorBoardなのですが、下記で起動はできます。

しかし、Colabの中で表示させる事はタイムアウトになってしまい現時点ではColab内にTensorBoardを表示させる事が出来ていません。その代り、

「http://localhost:6006/」

にブラウザでアクセスする事でブラウザ画面で表示出来ます。

3.Google Colabのランタイムをリモートホストに設定する関連リンク

1)research.google.com
ローカル ランタイム

2)github.com
googlecolab / jupyter_http_over_ws
tensorflow / tensorboard

タイトルとURLをコピーしました