クラウドでJupyter環境を使いたい場合Google Colaboratory(Colab)Proを使えばいいと思います。私も基本的にそうしています。
ですが本稿では、何らかの理由でColabが使えない状況・かつクラウドのリソースを使いたいという時に、Colabのように安価で簡単に使い始められるJupyterLab環境をGoogle Cloud Platform(GCP)に構築します。
Colabぐらい...とはいきませんが、できるだけ楽に・安価に構築します。
"楽"というのは、具体的には下記のようになっています。
- 構築後のインスタンスに接続して
pip install
等で内部状態を変える必要がないこと- Ansible等のツールを使わなくても環境の再現性が取れる
- 構成に合わせてIPアドレスやポート番号などのネットワーク構成を変える必要がないこと
- セキュアな状態を保つためにネットワークを管理したりする必要がない
プリエンプティブル VM インスタンスによるコスト削減
GCPには プリエンプティブル VM インスタンス という機能があり、「24時間で停止する」等いくつかの制約を受ける代わりに安価で利用できます。Microsoft Azureで言うAzure Spot Virtual Machinesや、AWSで言うSpot Instancesと似たような物だと思います。
本稿ではこのプリエンプティブルインスタンスを構築することでコストを削減します。
...ですが、AI PlatformノートブックやVertex AI ノートブックを使ったり、マーケットプレイスのVMイメージを利用した方法ではプリエンプティブルインスタンスにできないようなので、Compute Engineで新規VMインスタンスから構築します。
実行環境
GCPの管理コンソールにアクセスできるWebブラウザだけあれば良いです。
手順
インスタンスの構築
GCPの管理コンソールで「Compute Engine」→「VM インスタンス」→「インスタンスを作成」から、好みの名前やスペックを選んでインスタンスを構築します。必須なのは以下2点です。
- 「ブートディスク」→「変更」→「公開イメージ」 「OS」を「Deep Learning on Linux」 にする
- 「ネットワーク、ディスク、セキュリティ、管理、単一テナンシー」→「管理」→「可用性ポリシー」 「プリエンプティブ」を「オン」 にする
必須の設定は以上です。ネットワークのアクセス許可等の設定は基本的に必要ありません。
JupyterLabにアクセスする
Deep Learning on Linuxのイメージを使うと8080ポートでJupyterLabが自動的に立ち上がりますが、このままではアクセスする方法がありません。
そこでgcloudコマンドを使っての SSHポートフォワード を使うことで、パブリックネットワークに対してアクセス許可を新規で追加したりすることなくJupyterLabにアクセスできるようになります。さらに、CloudShellには Webプレビュー という公開されたポートに対してGCPログイン済アカウントでのみアクセスできるURLを払い出す機能があります。
これらを利用することで、ブラウザのみで(gcloudコマンド実行環境をローカルに構築したりすること無く)セキュアにJupyterLab環境へアクセスします。
管理コンソール右上「CloudShellをアクティブにする」で、CloudShellを起動します。
Shellが立ち上がったら、下記コマンドを入力します。
$ gcloud compute ssh --project [プロジェクト名] --zone [ゾーン名] [インスタンス名] -- -L 8080:localhost:8080
プロジェクト名やゾーン名は省略しても実行できる場合があります。
実行後、インスタンスに接続できたらShellはそのまま「ウェブでプレビュー」→「ポート 8080 でプレビュー」を選択します。
これでJupyterLabが立ち上がって使えるようになっていると思います。