Google Drive 和 Colaboratory 虚拟机未正确同步

Sap*_*tam 2 python google-drive-api jupyter-notebook google-colaboratory

我正在尝试使用 Google Colab 笔记本下载并提取 Google 语音命令数据集。Tar 档案相当大,但从 ML 数据集 POV 来看,它相当小。执行下面附加的代码片段后,我可以看到存档已正确提取,并且可以看到虚拟机磁盘中的所有文件(不用说,正如预期的那样,有 100K+ 文件)。

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

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

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!")
Run Code Online (Sandbox Code Playgroud)

LLB*_*LLB 5

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

  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>
    
    Run Code Online (Sandbox Code Playgroud)

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

因此,根据这里的原始问题,我也认为可能是,谷歌协作和谷歌驱动器没有同步。

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

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

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

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

    drive.flush_and_unmount()   
Run Code Online (Sandbox Code Playgroud)

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

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

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

    from google.colab import drive
    
    drive.mount('gdrive', force_remount=True)
    
    root_dir = '/content/gdrive/'
    
    Run Code Online (Sandbox Code Playgroud)