web-dev-qa-db-ja.com

Google Colaboratoryでのデータの永続化

Googleの 新しくオープンソース化されたColaboratory のセッション間でファイルを保持する方法を見つけた人はいますか?

サンプルノートブックを使用して、Googleドライブインスタンスからcsvファイルを正常に認証および転送し、/ tmp、〜、および〜/ datalabに格納しました。 Pandasはディスク上でも問題なく読み取ることができます。しかし、セッションがタイムアウトすると、ファイルシステム全体が消去され、新しいVMがスピンされますアップ、ダウンロードしたファイルなし。

Googleの Colaboratory Faq を考えると、これは驚くことではないでしょう。

Q:コードはどこで実行されますか?ブラウザウィンドウを閉じると、実行状態はどうなりますか?

A:アカウント専用の仮想マシンでコードが実行されます。仮想マシンは、しばらくアイドル状態になるとリサイクルされ、システムによって強制される最大の有効期間があります。

それを考えると、これは機能かもしれません(つまり、「共同作業で問題なく動作するGoogle Cloud Storageを使用してください」)。ツールを最初に使用したとき、は、My File/Colab NotebooksGoogleドライブフォルダは、ノートブックが実行されていたVMインスタンスにもロードされます:/

13
user3424705

あなたの解釈は正しいです。 VMは一時的なものであり、非アクティブ期間が過ぎるとリサイクルされます。 VM自体には永続データのメカニズムはありません。

データを保持するには、ドライブ、GCS、またはその他のクラウドホスティングプロバイダーなど、VMの外部のどこかにデータを保存する必要があります。

外部ソースからデータをロードおよび保存するためのいくつかのレシピは、 I/Oサンプルノート で利用できます。

7
Bob Smith

これが最善のソリューションであるかどうかはわかりませんが、次のような自動認証を使用してColabとドライブ間でデータを同期できます。 https://Gist.github.com/rdinse/159f5d77f13d03e0183cb8f7154b170a

3
Robin Dinse

Clouderizer は、長いセットアップ(ホストとしてのみgoogle colabを使用するため)と作業するための小さなスペースを犠牲にして、データの永続性を提供します。

しかし、私の意見では、進行状況を保存するのを忘れた場合、ファイルを「リサイクル」するよりも最善です。

1
LeandroHumb

ご指摘のとおり、Google Colaboratoryのファイルシステムは一時的なものです。回避策がありますが、ネットワーク遅延のペナルティとコードのオーバーヘッドがあります。ノートブックでボイラープレートコードを使用して、GDriveなどの外部ファイルシステムをマウントできます( ノートブックの例 を参照)。

あるいは、これはColaboratoryではサポートされていませんが、他のJupyterホスティングサービス– Jupyo –など、永続的なファイルシステムを備えた専用VMをプロビジョニングして、データとノートブックがセッションをまたいで持続するようにします。

1
artur

コードの前に置いて、コードを実行する前に常にファイルをダウンロードします

!wget -q http://www.yoursite.com/file.csv

1
user3794123

セッション全体の保存と復元に興味がある人のために、ここで使用しているスニペットを紹介します。

import os
import dill
from google.colab import drive

backup_dir = 'drive/My Drive/colab_sessions'
backup_file = 'notebook_env.db'
backup_path = backup_dir + '/' + backup_file

def init_drive():
  # create directory if not exist
  drive.mount('drive')
  if not os.path.exists(backup_dir):
    !mkdir backup_dir

def restart_kernel():
  os._exit(00)

def save_session():
  init_drive()
  dill.dump_session(backup_path)

def load_session():
  init_drive()
  dill.load_session(backup_path)
0
penduDev