当我使用 google colab 时,我不止一次随机地收到此错误 有时有效,有时无效
OSError: [Errno 5] Input/output error
当我与 Google Drive 连接时是否会出现此错误? 这个错误的任何解决方案
来自 常见问题解答 --
当文件数量或数量过多时,Google 云端硬盘操作可能会超时 文件夹中的子文件夹变得太大。如果有数千个项目 直接包含在顶级“我的驱动器”文件夹中,然后安装 驱动器可能会超时。反复尝试可能最终 成功,因为失败的尝试在计时之前在本地缓存部分状态 出去。如果遇到此问题,请尝试移动文件和文件夹 直接包含在“我的云端硬盘”的子文件夹中。类似的问题 在读取其他文件夹后可能会发生 成功的drive.mount()。访问包含多个项目的任何文件夹中的项目 项目可能会导致错误,例如 OSError: [Errno 5] 输入/输出错误 (python 3) 或 IOError: [Errno 5] 输入/输出错误 (python 2)。再次, 您可以通过将直接包含的项目移动到 子文件夹。
我在一个包含超过 5.5k 个文件的 Google Drive 文件夹上使用 os.listdir 时遇到了这个错误,并且我的 Colab 笔记本左下角弹出了一个小窗口,提示发生了超时。
因为我有 Colab Pro,所以我尝试将运行时硬件加速器切换为 GPU,并将运行时形状切换为 High-Ram。这解决了我的问题。可能是其中一个或两个选项一起,不确定。
最佳答案的问题是,您可能需要 Colab 中的一些简单功能(如 os.listdir),以便有效地移动文件并创建子文件夹以减少文件夹内容。如果您甚至无法在不发生超时错误的情况下列出文件夹中的内容,您可能只需要升级到 Colab Pro 即可获得这些高级运行时选项,从而获得更强大的计算环境。
我几乎经常面对它并进行对话-
Google 云端硬盘发生超时(最近一次是在中午 12:46:20)。更多信息。
有时,如果我运行代码单元三次,错误就不会再出现;有时我必须运行单元8-9次才能成功执行它。
问题总是发生在数据加载过程中,正如预期的那样。在数据加载单元中,我通常定义拆分、项目转换和批量转换。因此,当多次运行单元时,它们会增加额外的时间成本。
我所做的不是多次运行数据加载单元,而是使用不同单元中的
ls
方法在 Bash 上运行 !
命令。我通常在训练目录中查找一个文件(具有已知的文件名),并将该模式传递给通过管道传输到 grep
的 ls
。就像这样-
! ls /content/path/to/training/dr/ | grep xyz_001 # I *know* xyz_001 exists in a filename
如果此单元在 n 次尝试后成功执行,和在输出中显示所需的文件名,则数据加载单元 100% 成功运行,您可以开始训练。
需要注意的是,我不会在没有
ls
的情况下运行整个训练目录的 grep
,因为这总是会失败,因为我的训练目录有时有大约 100k 个文件。
这是一个丑陋的黑客,但每次都有效。
另一种可能的解决方案是将文件保存在不同的(新文件夹)目录中。我认为@bob-smith 的解决方案是解决这个问题的最佳解决方案之一,我只是展示了对我有用的原始解决方案的变体。
我认为人们已经提供了帮助,但我要说的是:您还可以压缩数据集,将其上传到您的 colab 会话并解压缩。它需要一些计算单元,但这不会产生网络延迟,如果数据集用于训练并且您跳过整个“GDrive 由于文件太多而出现在地毯上”类型的错误,则非常重要。