2021/10/16

R / Colaboratory: 時間のかかるパッケージインストールを何度もしたくないとき

 Colaboratory はサーバーレスで python や R のデータ分析ができる便利なサービスですが、サーバーレスならではの悩みとして、パッケージのインストールが面倒です。毎回使い始めるときにはまっさらのサーバーに戻ってしまうので、特殊なパッケージをインストールして使おうとすると、まずインストールに数分~十数分かかってしまいます。

 そこで、Colaboratory で R を使う際、高速パッケージインストール方法がないかと探したところ、「Google ColabでRパッケージの再インストールを爆速にする」が見つかりまして、参考にさせていただきました。ただ、ちょっと迷ったところとか、自分に合うようにカスタマイズしたところがあるので、それを備忘録がてら残しておこうと思います。

 

方法の概要は、 

  • Colaboratoryもなんらかの仮想(Linux?)サーバーで動いている。
    • 毎回立ち上げ時には初期状態のイメージから開始されるので、前回そこにインストールしたパッケージは消え去っている。
  • Rのパッケージのインストールは、CRANからなんらかのローカルディレクトリに展開されている。
  • ということは、そのディレクトリをそのままコピーして持っておけばいいのでは?
    •  ディレクトリを tar.gz してダウンロードしておき、使うときに展開する方法
    • ディレクトリを毎回マウントして使う方法
    • etc...

ということで今回は、パッケージをカレントディレクトリにインストールし、それを圧縮、ダウンロードして保存しておく方法を試します。

なお、この保存と復元はあくまでもパッケージインストールの途中経過であって、それ以外の目的では無いことをお断りしておきます。


【ライブラリをインストールして一時保存】

まず通常と同じようにライブラリをインストールします。その際、インストール先を指定しておくことで、後からそれだけ持ち出すことが楽になるようにしておきます。

 Rのkernelを指定したノートブックにて、

QCAのところは、インストールしたいライブラリにしてください。これは、

  1. dir.create で、current dir に library という名前のディレクトリを作成する
  2. .libPaths で、そのディレクトリを lib のインストール先に指定する
  3. ライブラリをインストールする

すると、「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 のような有料サービスを使うのがよいです。