LoginSignup
83
82

More than 5 years have passed since last update.

Google Colaboratory で Google Drive の特定のフォルダをマウントする方法

Last updated at Posted at 2018-04-24

Google Colaboratory ( 以下、Colab ) は便利だが、データや画像などのファイルを扱うには一手間必要になる。

いくつか方法はあるが、結論としては Google Drive の特定のフォルダにデータを詰めてマウントする のが、個人的な今のベストという事。

以下、ざっと各方法をまとめる。

ファイルのアップロード

以下コードによって、任意のファイルをアップロードすることができる。

from google.colab import files
uploaded = files.upload()

これを実行すると、以下のようなボタンが表示する。

image.png

ファイル選択 をクリックするとファイルダイヤログが開き、ファイルを選択するとアップロードが始まり、完了すると upload() がファイルの Stream を返す。

  • Pros
    • コードが少なくシンプル
  • Cons
    • Stream として取得するため、利用するのに一手間必要になる
      • i.e. pickle 読み込み: data = pickle.load(io.BytesIO(uploaded['data.bin']))
    • 大量データに向かない
    • チームメンバー間でデータ共有をする場合に面倒

HTTP, Git で取得

curlgit を使ってデータを取得することもできる。

!curl http://www.dropbox.com/path/to/data

or

!git clone http://github.com/you/data.git
  • Pros
    • 通常のファイルとして利用できる
    • チームメンバー間でのデータ共有が容易
  • Cons
    • 大量データに向かない
    • Http の場合、Dropbox や S3 で公開する必要がある
    • アクセス制限は別途管理が必要

Google Drive をマウント

Google Colab 自体も Google Drive 上のただの Jupyter ファイルみたいなものなので、データもそこで管理できるのであれば管理が統一されて便利。

参考にしたのはこちら
Google Colab Free GPU Tutorial - Medium

まずは、必要なパッケージを取得しておく。

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

以下を実行すると、認証情報を取得するための許可を求められるので、許可してトークンを発行し、テキストボックスに貼り付ける。

from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()

以下実行により、今度は google-drive-ocamlfuse によるアクセスの許可を聞かれる。これも許可する。

import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

上記が正常に終われば、ようやくマウントが可能となる。

!mkdir -p drive
!google-drive-ocamlfuse drive
!ls drive

drive 以下に マイドライブ以下のファイル/フォルダ全て がマウントされる。

  • Pros
    • 通常のファイルとして利用できる
    • チームメンバー間でデータ管理・共有が容易
      • Colab ファイルと一緒に権限管理が可能
    • 大量データも扱いやすい
      • 無料でも 15 GB
  • Cons
    • マイドライブ以下全部にアクセスできる不安
      • 削除も可能
      • read-only でのマウントも可能だが、書き込みたい時もある
    • 利用者によってマイドライブ以下の構成が違うため、コードの再現性に乏しくなる
    • 毎度トークンを取得するのが面倒

特定フォルダ以下のみマウント

Google Drive は全てのフォルダに一意な ID が振られており、google-drive-ocamlfuse はその ID を指定してマウントする設定もできる。
これを利用し、チームで共有するデータ管理フォルダをマウントするようにする。

Configuration - Wiki - google-drive-ocamlfuse

マウント部分を以下のように書き換える。
GOOGLE_DRIVE_FOLDER_ID は、マウントしたい任意のフォルダの ID に変更する。

!cp -f ~/.gdfuse/default/config config
!sed -i -e "s/^root_folder=$/root_folder=GOOGLE_DRIVE_FOLDER_ID/" config

!mkdir -p drive
!google-drive-ocamlfuse -config ./config -cc drive
!ls drive

Note : Google Drive のフォルダ ID は、フォルダを開いた時のhttps://drive.google.com/drive/folders/XXXXXXXXX の XXXXXXXXX の部分の事

雑感

毎度のトークン取得が面倒だなぁというのはあるが、そこはもうしょうがないかなぁ。
Google のサービス同士なんだから、もう少し上手いことやって欲しい。

参考

83
82
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
82