34

有没有人想出一种方法来让文件在谷歌新开源的 Colaboratory的会话中保持不变?

使用示例笔记本,我成功地从我的 Google Drive 实例验证和传输 csv 文件,并将它们存储在 /tmp、我的 ~ 和 ~/datalab 中。Pandas 也可以从磁盘上很好地读取它们。但是一旦会话超时,看起来整个文件系统都被擦除了,一个新的虚拟机被启动,没有下载文件。

鉴于 Google 的Colaboratory Faq,我想这并不奇怪:

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

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

鉴于此,也许这是一个功能(即“去使用谷歌云存储,它在 Colaboratory 中运行良好”)?当我第一次使用该工具时,我希望My File/Colab Notebooks Google Drive 文件夹中的任何 .csv 文件能加载到运行笔记本的 VM 实例上:/

4

7 回答 7

28

把它放在你的代码之前,所以在运行你的代码之前总是会下载你的文件。

!wget -q http://www.yoursite.com/file.csv
于 2019-05-18T13:26:58.297 回答
15

你的解释是正确的。虚拟机是短暂的,并且在一段时间不活动后会被回收。目前在 VM 本身上没有持久数据的机制。

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

I/O 示例笔记本中提供了一些用于从外部源加载和保存数据的方法。

于 2017-11-09T04:54:39.810 回答
4

不确定这是否是最佳解决方案,但您可以通过自动身份验证在 Colab 和 Drive 之间同步数据,如下所示:https ://gist.github.com/rdinse/159f5d77f13d03e0183cb8f7154b170a

于 2018-05-02T21:15:09.510 回答
2

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

但是,在我看来,当您忘记保存进度时,最好不要“回收”您的文件。

于 2018-04-18T01:20:18.663 回答
1

正如您所指出的,Google Colaboratory 的文件系统是短暂的。尽管存在网络延迟损失和代码开销,但有一些变通方法:例如,您可以在笔记本中使用样板代码来挂载 GDrive 等外部文件系统(参见他们的示例笔记本)。

或者,虽然 Colaboratory 不支持这一点,但其他 Jupyter 托管服务(如Jupyo)提供具有持久文件系统的专用 VM,以便数据和笔记本在会话中保持不变。

于 2018-12-30T16:54:15.030 回答
0

我有兴趣在单独的 .py 文件中导入模块。

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

%%writefile mymodule.py

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

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

于 2019-12-14T03:19:56.317 回答
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)

编辑:在您的会话大小不太大之前工作正常。你需要检查它是否适合你..

于 2019-10-01T11:22:31.343 回答