要旨
Google Colaboratoryの環境コロコロかわるし、突然既存のコードが動かなくなったりと大変じゃないですか?Colaboratoryの自鯖立てれば固定できるし、「ある時点でのColaboratory環境」再現できたりして良いですよね。
背景
セットアップ
開発だけでなく教育にも使える便利なGoogle Colaboratoryですが、致命的な仕様に悩まされてきました。それはプレインストールパッケージを含め環境が定期的に変更されることです。例えば、昨年末CUDAのバージョンが11.xから12.xに変更されたため、onnxruntime-gpuが動作しなくなったり特定の深層学習モデルが動作しなくなったりと散々な目にあいました。 最近ではNumpyのメジャーアップデート(1.x -> 2.0.0)が発表され、Colaboratoryが新バージョンに移行すると既存のアセットが動作しなくなるのではと戦々恐々としています。
最近はnumpyが変わってもすぐに気付けるようおまじないを冒頭で走らせたりしています。まだ大丈夫(2024/06/08)。
https://medium.com/google-colab
mediumでアップデート情報が公開されているものの、下のようにColaboratoryのノートブックからリリースノートを表示したほうが確実でしょう。
↓
(2023年12月18日にCUDAのバージョンが変更されたことを確認できます。)
最新の環境にあわせてコードを書き換えれば済む場合もありますが、対応できないときもあります。CUDAのダウングレードやパッケージの再インストール、果てにはcondacolabを使ってColaboratoryの中で仮想環境を構築しなおしたりとその都度工夫は可能したりしています。が、ノートブックを立ち上げて数秒で環境構築という利点がなくなってしまいます。
いっそのこと私物のGPUPCをColaboratoryサーバーとして使い、開発環境を永続化させましょう。
解説
Google Colaboratoyのローカルランタイム接続機能を使うと、通常のCoalaboratory Notebookそのままにクラウドではなく自鯖で建てたColaboratoryスペースを使うことができます。説明は公式解析を読めば十分でしょう。
- nvidia driverがセットアップされてGPUが認識されているubuntu/windows PCにdockerをインストールして使えるようにしておく。
- 以下のコマンドで最新のColaboratoryの環境を立ち上げる
docker run --gpus=all -p 127.0.0.1:9000:8080 us-docker.pkg.dev/colab-images/public/runtime
- ログにAPIU付きのアクセスurlが出るのでクリップボードにコピーしておく
下のようなリンクが該当部分。末尾の(type=jupyter)はコピーしない。
http://127.0.0.1:9000/?token=XXXXXXX (type=jupyter)
特定のColaboratoryのバージョンを動かす。
冒頭に書いたように、例えば「半年前動いていたコードを当時の環境で動かしたい」といったときには、起動するdocker imageのバージョンを指定すればよいでしょう。
Colaboratoryのdocker image レポジトリでは、約一年前までの仮想環境をtagで指定可能です。
なので例えば下のように2023/5/24時点のtagをつけて起動すると
docker run --gpus=all -p 127.0.0.1:9000:8080 us-docker.pkg.dev/colab-images/public/runtime:release-colab-20230515-060150-RC00
CUDA11.8が使えます。すばらしい。
出先での使い方
例えば、以下のような使い方で出先からアクセスすると捗ります。
- host GPU-PC -> tailscale -> client pc
- ssh接続はvscode経由でポート9000と3389を転送。
tailscaleでvpnを使うことで、自宅ルータのポートを解放しなくても固定IPでアクセス。ポート9000はColaboratory用、3389はwindows remote desktop用に確保。さらにvscodeの利用もできます。また、未検証ですが、Colaboratory同一環境をjupyter notebook(ブラウザor vscode経由)で利用することもおそらく可能でしょう。
注意
今は1年前まで遡った環境にアクセスできますが、Googleがいつまで過去のdocker imageを保持してくれてるかは気分次第でしょう。必要に応じてイメージをダウンロードして確保しておきましょう。
最後に
スマート農業や植物科学研究に関連した画像解析アルゴリズムや装置の開発をするベンチャーやってます。最近ではGoogle Colaboratoryをベースとした植物画像解析(植物フェノタイピングのハンズオン資料集を作ったりしています。初学者向けのため、本稿のローカルランタイムを使用せず、最新のColaboratoryに対応できるよう日々デバッグしています。いつかColaboratoryでセットアップ環境の指定ができればいいなあ。