在Google Colaboratory中保留数据

时间:2017-11-09 04:43:43

标签: python google-colaboratory

有没有人找到一种方法来保持文件在Google newly open sourced Colaboratory的会话中保持不变?

使用示例笔记本,我成功地从我的Google云端硬盘实例中验证和传输csv文件,并将它们藏在/ tmp,my~和〜/ datalab中。熊猫也可以通过磁盘读取它们。但是一旦会话超时,看起来整个文件系统都被擦除了,新的虚拟机就会被刷新,没有下载的文件。

我认为,鉴于谷歌的Colaboratory Faq,这并不令人惊讶:

  

问:我的代码在哪里执行?如果我关闭浏览器窗口,我的执行状态会发生什么?

     

答:代码在专用于您帐户的虚拟机中执行。虚拟机在闲置一段时间后会被回收,并且系统会执行最长生命周期。

考虑到这一点,也许这是一个功能(即"去使用Google Cloud Storage,它在Colaboratory&#34中工作正常;)?当我第一次使用该工具时,我 希望我的文件/ Colab笔记本 Google云端硬盘文件夹中的任何.csv文件也会加载到VM实例上笔记本正在运行:/

7 个答案:

答案 0 :(得分:7)

您的解释是正确的。虚拟机是短暂的并且在不活动期间被回收。目前,VM本身没有持久数据机制。

为了使数据持续存在,您需要将其存储在VM之外的某个位置,例如Drive,GCS或任何其他云托管提供商。

I/O example notebook中提供了一些从外部来源加载和保存数据的方法。

答案 1 :(得分:3)

不确定这是否是最佳解决方案,但您可以使用以下自动身份验证在Colab和云端硬盘之间同步数据:https://gist.github.com/rdinse/159f5d77f13d03e0183cb8f7154b170a

答案 2 :(得分:1)

Clouderizer可能会提供一些数据持久性,代价是长时间设置(因为您只使用google colab作为主机)并且工作空间很小。

但是,在我看来,当你忘记保存进度时,最好还是将文件“回收”。

答案 3 :(得分:1)

正如您所指出的,Google Colaboratory的文件系统是临时的。尽管存在网络延迟损失和代码开销的问题,但仍存在解决方法:您可以在笔记本中使用样板代码来挂载外部文件系统(例如GDrive)(请参阅其example notebook)。

或者,虽然Colaboratory不支持此功能,但其他Jupyter托管服务(例如Jupyo)提供了具有持久文件系统的专用VM,因此数据和笔记本在各个会话之间都可以持久保存。

答案 4 :(得分:0)

将其放在代码之前,因此在运行代码之前始终会下载文件

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

答案 5 :(得分:0)

如果有人对保存和恢复整个会话感兴趣,请使用以下代码段,您可能会发现它有用:

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)

编辑:工作正常,直到会话大小不太大为止。您需要检查它是否适合您。.

答案 6 :(得分:0)

我对将模块导入单独的.py文件感兴趣。

我最终要做的是将.py文件的内容复制到笔记本的第一个单元格中,并在第一行中添加以下文本:

%%writefile mymodule.py

这会在工作目录中创建一个名为mymodule.py的单独文件,以便您的笔记本可以在导入行中使用它。

我知道通过运行模块中的所有代码将可以使用笔记本中的变量和函数,但是我的代码需要导入模块,因此对我来说已经足够了。