【问题标题】:Google Drive and Colaboratory Virtual Machine are not syncing properlyGoogle Drive 和 Colaboratory 虚拟机未正确同步
【发布时间】:2020-03-06 05:13:30
【问题描述】:

我正在尝试使用 Google Colab 笔记本下载和提取 Google Speech Commands Dataset。 Tar 存档相当大,但从 ML 数据集 POV 来看,它非常小。执行下面附上的代码sn -p后,可以看到压缩包已经正确解压了,可以看到虚拟机磁盘中的所有文件(不用说,有100K+的文件符合预期)。

我了解将 Colab 的虚拟机内存与 Google Drive 同步需要一些时间。但即使在等待了很长一段时间(几乎一天)之后,Google Drive 也没有正确更新。运行几行代码显示只有 10-12 个目录已正确更新(共 36 个),其余为空。这是导致此问题的 Google Drive 同步过程中的某种错误吗?还是我以不正确的方式做某事?任何帮助或建议将不胜感激。提前致谢!

我正在使用这段相当简单的代码。

import os
import tarfile
import requests
from tqdm import tqdm

from google.colab import drive
drive.mount('/gdrive', force_remount = True)


# url = "http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz"
url = "http://download.tensorflow.org/data/speech_commands_v0.02.tar.gz"
file_name = "speech.tar.gz"
dir_path = "/gdrive/My Drive/Temp/ML/Final/dataset/"
download_path = dir_path + file_name

r = requests.get(url, stream = True)
with open(download_path, 'wb') as file:
    for block in r.iter_content(chunk_size = 4096):
        if(block):
            file.write(block)
print("[INFO] Download completed.")

def extract_tar(path, dest_dir):
    os.chdir(dest_dir)
    with tarfile.open(name = path) as tar:
        for member in tqdm(iterable = tar.getmembers(), total = len(tar.getmembers())):
            tar.extract(member = member)

extract_tar(download_path, dir_path)
print("[INFO] Extraction completed.")

!rm /gdrive/My\ Drive/Temp/ML/Final/dataset/speech.tar.gz
print("[CAUTION] File deleted!")

【问题讨论】:

    标签: python google-drive-api jupyter-notebook google-colaboratory


    【解决方案1】:

    如果您致电drive.flush_and_unmount(),情况会有所改善吗?

    详情:https://colab.research.google.com/notebooks/io.ipynb#scrollTo=D78AM1fFt2ty

    【讨论】:

    • 好吧,我运气不好。当我使用 drive.flush_and_unmount() 函数时,colab 的行为非常奇怪。单元继续运行,没有进入下一行代码,过了一会儿,运行时突然进入忙碌模式!但最终结果并没有什么不同。
    【解决方案2】:

    我也遇到过这个问题。最后我能够解决这个问题(只需一行代码)。

    1. 我在谷歌驱动器中有一个非常大的文件(6 GB)(将文件上传到谷歌驱动器)

    2. 我尝试使用云转换器提取,但如果您的文件大小大于 1GB,则需要付费

    3. 然后我尝试在协作中使用以下方法提取它:

      // mount google drive
      ---------------------------------
      
      from google.colab import drive
      drive.mount('gdrive', force_remount=True)
      root_dir = '/content/gdrive/'
      
      
      
      // Extract file
      -----------------------
      
      !unrar x <rar_file>
      

      我可以看到该文件正在被提取,但我在谷歌驱动器中找不到提取的文件。

    所以按照这里的原始问题,我还认为可能是,谷歌协作和谷歌驱动器没有同步。

    但是当我仔细查看时,我发现 google-collab 正在 /content 文件夹中提取文件(无论您从哪个目录启动 unrar 命令)

    所以我简单地使用了这个命令,它解决了我的问题:

    !unrar x <rar_file> <dest_folder_where_we_want_to_extract>
    
    1. 此时,提取的所有文件可能都在协作虚拟机中,并且未完全同步到驱动器。

    所以我们必须明确同步协作和驱动:

        drive.flush_and_unmount()   
    

    这可能需要几个小时,具体取决于数据是否以 GB 为单位,否则速度非常快。

    (请在单独的单元格中运行此命令。与我们解压的单元格不同)

    1. 如上命令卸载驱动器。请重新安装您的驱动器。

      from google.colab import drive
      
      drive.mount('gdrive', force_remount=True)
      
      root_dir = '/content/gdrive/'
      

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2018-07-29
      • 2018-10-02
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多