Colaboratory はサーバーレスで python や R のデータ分析ができる便利なサービスですが、サーバーレスならではの悩みとして、パッケージのインストールが面倒です。毎回使い始めるときにはまっさらのサーバーに戻ってしまうので、特殊なパッケージをインストールして使おうとすると、まずインストールに数分~十数分かかってしまいます。
そこで、Colaboratory で R を使う際、高速パッケージインストール方法がないかと探したところ、「Google ColabでRパッケージの再インストールを爆速にする」が見つかりまして、参考にさせていただきました。ただ、ちょっと迷ったところとか、自分に合うようにカスタマイズしたところがあるので、それを備忘録がてら残しておこうと思います。
方法の概要は、
- Colaboratoryもなんらかの仮想(Linux?)サーバーで動いている。
- 毎回立ち上げ時には初期状態のイメージから開始されるので、前回そこにインストールしたパッケージは消え去っている。
- Rのパッケージのインストールは、CRANからなんらかのローカルディレクトリに展開されている。
- ということは、そのディレクトリをそのままコピーして持っておけばいいのでは?
- ディレクトリを tar.gz してダウンロードしておき、使うときに展開する方法
- ディレクトリを毎回マウントして使う方法
- etc...
ということで今回は、パッケージをカレントディレクトリにインストールし、それを圧縮、ダウンロードして保存しておく方法を試します。
なお、この保存と復元はあくまでもパッケージインストールの途中経過であって、それ以外の目的では無いことをお断りしておきます。
【ライブラリをインストールして一時保存】
まず通常と同じようにライブラリをインストールします。その際、インストール先を指定しておくことで、後からそれだけ持ち出すことが楽になるようにしておきます。
Rのkernelを指定したノートブックにて、
QCAのところは、インストールしたいライブラリにしてください。これは、
- dir.create で、current dir に library という名前のディレクトリを作成する
- .libPaths で、そのディレクトリを lib のインストール先に指定する
- ライブラリをインストールする
すると、「Installing package into 'content/library'」とアナウンスされ、無事上で作ったディレクトリにインストールされていることがわかります。
なお、/content/ は Colab がスタートするディレクトリです。/home/hoge ではないんですね。
この段階は、CRANからパッケージをダウンロードし、依存関係のあるパッケージなども自動的に考えてインストールするので、結構時間がかかります。
正常に実行されたら、試しにインストールしたライブラリを導入してみると、
無事、使えるようになっていました。
では、これをパックして保存します。先ほど、パッケージは /content/library/ へインストールしたので、これをそのまま tar.gz に固めます。
左ペインのファイルマネージャに「 library.tgz 」が見えるので、これをダウンロードし、一時保存しておきます。
【一時保存したライブラリを復元してインストール】
ColabであたらしいRのノートブックを立ち上げると、当然ですが、library ディレクトリは存在しません。そこで、先ほど一時保存したlibrary.tgz をアップロードします。
掴んで落とすだけです。
次に、このファイルは tgz で圧縮されているので、解凍します。
エラーで終了してしまったときのために intern = TRUE を付けています。これがぶじ完了すると、ファイルマネージャに library のディレクトリが出現します。
これで、ライブラリのインストールが終わったときの状態が再現されたので、.libPath でパスを指定すれば使えるようになります。
library.tgz が手元にある状態からスタートすれば、アップロードに多少時間が掛かるくらいで、あとは数秒で終わります。
【その他】
一番最初のリンク先の方法では、library.tgz を google drive において、そこから google to google でダウンロードして使う方法が示されていました。ローカルに置きたくない場合はそれが便利かもしれません。
一方、この方法では library.tgz は時が止まった状態で保存されているので、長期にわたって使うことは困難です。なぜなら、依存関係含め様々なパッケージがアップデートされるので、そんな中に library.tgz だけ時が止まっているのはあまりよろしくないからです。ですので、あくまでも短い期間に何度もインストールする時間をちょっと短縮したい、という目的で使うのがいいと思います。
特に、本格的に notebook を分析用として使いたい場合は、使うパッケージも増えますし、データや関連資料なども大きく、また計算時間や分析期間も長くなりますから、colab のような揮発性のインスタンスではなくて、Vertex AI(旧 AI Platform)の JupyterLab のような有料サービスを使うのがよいです。