🏔️

colabでkaggleのdatasetをマウントする

2 min read

1. kaggleのdatasetのgcsのリンクを取得する

kaggleのnotebookで以下を実行する

from kaggle_datasets import KaggleDatasets
GCS_PATH = KaggleDatasets().get_gcs_path()
print(GCS_PATH)

notebookの作成は,マウントしたいデータセットのNew Notebookから作成する

(これはtimmの例)

開催中のコンペのdatasetをマウントしたい場合は,コンペのページからNew Notebookする

2. colabでマウントする

2.1. gcpの認証をする

from google.colab import auth
auth.authenticate_user()

2.2. gscfuseをインストールする

!echo "deb http://packages.cloud.google.com/apt gcsfuse-bionic main" > /etc/apt/sources.list.d/gcsfuse.list
!curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
!apt update
!apt install gcsfuse

Cloud Storage FUSE は、オープンソースの FUSE アダプタです。これにより、Linux または macOS システムに Cloud Storage バケットをファイル システムとしてマウントできます。

2.3. gcsのバケットをマウントする

! gcsfuse --implicit-dirs --limit-bytes-per-sec -1 --limit-ops-per-sec -1 ${BACKET_NAME} ${マウントしたいパス}
  1. で取得したGCS_PATHは"gs://"で始まっているので,"gs://"以降のBACKET_NAMEを指定するとうまくいった
GCS_PATH = "gs://" + BACKET_NAME

GCS_PATHを指定した以下のコマンドではマウントできなかった

! gcsfuse ${GCS_PATH} ${マウントしたいパス}

3. ハマったこと

kaggleのdatasetは私の作ったバケットじゃないしな...と思って2.1のgcpの認証をしないでマウントしようとすると,

%Y/%m/%d %H:%M:%S.%f Using mount point: /content/hoge
%Y/%m/%d %H:%M:%S.%f Opening GCS connection...
%Y/%m/%d %H:%M:%S.%f Mounting file system "${BACKET_NAME}"...
%Y/%m/%d %H:%M:%S.%f File system has been successfully mounted.

と出てマウント成功っぽく表示はされるが,

!ls /content/hoge

すると,

ls: reading directory '/content/hoge': Input/output error

と出てマウントできていなかった

かつ,gcsfsのpandasラッパーを使った以下のデータの読み込みは,gcpの認証なしでも可能だったので混乱した

!pip install fsspec
!pip install gcsfs

import pandas as pd

df = pd.read_csv(GCS_PATH + "hoge.csv")

4. 参考

https://zenn.dev/dubsarturtur/articles/2125e1c7aea25f
https://medium.com/ml-book/how-to-import-kaggle-data-in-google-colab-c286de376fe1
https://cloud.google.com/storage/docs/gcs-fuse?hl=ja
https://github.com/GoogleCloudPlatform/gcsfuse
https://stackoverflow.com/questions/61600439/how-to-mount-gcp-bucket-in-google-colab
https://gcsfs.readthedocs.io/en/latest/#integration

Discussion

ログインするとコメントできます