Pytorch 数据加载器:错误的文件描述符和 EOF > 0

2024-03-20

问题描述

在使用由自定义数据集制作的 Pytorch 数据加载器进行神经网络训练期间,我遇到了奇怪的行为。数据加载器设置为workers=4、pin_memory=False。

大多数时候,训练都顺利完成。 有时,训练会随机停止,并出现以下错误:

  1. OSError: [Errno 9] 错误的文件描述符
  2. EOFError

看起来错误是在创建套接字以访问数据加载器元素期间发生的。 当我将工作人员数量设置为 0 时,错误消失,但我需要通过多处理来加速我的训练。 错误的根源可能是什么?谢谢 !

python 和库的版本

Python 3.9.12、Pytorch 1.11.0+cu102
编辑:错误仅发生在集群上

错误文件的输出

Traceback (most recent call last):
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/resource_sharer.py", line 145, in _serve
Epoch 17:  52%|█████▏    | 253/486 [01:00<00:55,  4.18it/s, loss=1.73]

Traceback (most recent call last):
  File "/my_directory/bench/run_experiments.py", line 251, in <module>
    send(conn, destination_pid)
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/resource_sharer.py", line 50, in send
    reduction.send_handle(conn, new_fd, pid)
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/reduction.py", line 183, in send_handle
    with socket.fromfd(conn.fileno(), socket.AF_UNIX, socket.SOCK_STREAM) as s:
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/socket.py", line 545, in fromfd
    return socket(family, type, proto, nfd)
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/socket.py", line 232, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
OSError: [Errno 9] Bad file descriptor

    main(args)
  File "/my_directory/bench/run_experiments.py", line 183, in main
    run_experiments(args, save_path)
  File "/my_directory/bench/run_experiments.py", line 70, in run_experiments
    ) = run_algorithm(algorithm_params[j], mp[j], ss, dataset)
  File "/my_directorybench/algorithms.py", line 38, in run_algorithm
    data = es(mp,search_space,  dataset, **ps)
  File "/my_directorybench/algorithms.py", line 151, in es
   data = ss.generate_random_dataset(mp,
  File "/my_directorybench/architectures.py", line 241, in generate_random_dataset
    arch_dict = self.query_arch(
  File "/my_directory/bench/architectures.py", line 71, in query_arch
    train_losses, val_losses, model = meta_net.get_val_loss(
  File "/my_directory/bench/meta_neural_net.py", line 50, in get_val_loss
    return self.training(
  File "/my_directorybench/meta_neural_net.py", line 155, in training
    train_loss = self.train_step(model, device, train_loader, epoch)
  File "/my_directory/bench/meta_neural_net.py", line 179, in train_step
    for batch_idx, mini_batch in enumerate(pbar):
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/site-packages/tqdm/std.py", line 1195, in __iter__
    for obj in iterable:
  File "/my_directory/.local/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 530, in __next__
    data = self._next_data()
  File "/my_directory/.local/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1207, in _next_data
    idx, data = self._get_data()
  File "/my_directory/.local/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1173, in _get_data
    success, data = self._try_get_data()
  File "/my_directory/.local/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1011, in _try_get_data
    data = self._data_queue.get(timeout=timeout)
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/queues.py", line 122, in get
    return _ForkingPickler.loads(res)
  File "/my_directory/.local/lib/python3.9/site-packages/torch/multiprocessing/reductions.py", line 295, in rebuild_storage_fd
    fd = df.detach()
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/resource_sharer.py", line 58, in detach
    return reduction.recv_handle(conn)
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/reduction.py", line 189, in recv_handle
    return recvfds(s, 1)[0]
  File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/reduction.py", line 159, in recvfds
    raise EOFError
EOFError

编辑:访问数据的方式

    from PIL import Image
    from torch.utils.data import DataLoader
    
    # extract of code of dataset
    
        class Dataset():
           def __init__(self,image_files,mask_files):
              self.image_files = image_files
              self.mask_files = mask_files
    
           def __getitem__(self, idx):
              img = Image.open(self.image_files[idx]).convert('RGB')
              mask=Image.open(self.mask_files[idx]).convert('L')
              return img, mask
    
    # extract of code of trainloader
      
        train_loader = DataLoader(
                        dataset=train_dataset,
                        batch_size=4,
                        num_workers=4,
                        pin_memory=False,
                        shuffle=True,
                        drop_last=True,
                        persistent_workers=False,
                    )

我终于找到了解决方案。将此配置添加到数据集脚本中可以正常工作:

import torch.multiprocessing
torch.multiprocessing.set_sharing_strategy('file_system')

默认情况下,共享策略设置为'file_descriptor'.

我尝试过一些解释的解决方案:

  • 这个问题 https://github.com/pytorch/pytorch/issues/13246(增加共享内存,增加打开文件描述符的最大数量,每个时期结束时的 torch.cuda.empty_cache() ,...)
  • and 这另一个问题 https://github.com/pytorch/pytorch/issues/11201,结果解决了问题

正如 @AlexMeredith 所建议的,该错误可能与某些集群使用的分布式文件系统(Lustre)有关。该错误也可能来自分布式共享内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch 数据加载器:错误的文件描述符和 EOF > 0 的相关文章

  • 箱线图与箱线图有何不同?

    我想知道当我们在海生图书馆中有箱线图时为什么会有箱线图 我知道一件事是箱线图优化了表示数据的方式 特别是对于大型数据集 但我不知道为什么 除此之外 我没有任何充分的理由使用箱线图 箱线图将中位数显示为中心线 第 50 个百分位数 然后将第
  • 日期/时间值的 Django URL 转换器

    我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象 如果我手动输入 URL 它们会按预期工作 但尝试为其生成 URL 时找不到匹配项 我的转换器很简单 from django utils
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 使用python同时播放两个正弦音

    我正在使用 python 来播放正弦音 音调基于计算机的内部时间 以分钟为单位 但我想根据秒同时播放一个音调 以获得和谐或双重的声音 这就是我到目前为止所拥有的 有人能指出我正确的方向吗 from struct import pack fr
  • Python - 使用 win32com.client 将 Excel 单元格范围格式化为表格

    我正在尝试编写一个函数 该函数选择工作表中的所有非空单元格 根据内容调整列宽 并将其格式化为表格 我被困在最后一点 这是我当前的代码 import win32com client from win32com client import co
  • python中remove方法的安全使用

    我从列表继承了一个 UserList 类并实现了以下方法来删除标记为已删除的条目 def purge deleted self for element in list iter self if ele mark deleted lt 1 s
  • 遍历 globals() 字典

    我 尝试 使用globals 在我的程序中迭代所有全局变量 我就是这样做的 for k v in globals iteritems function k v 当然 这样做时 我只是创建了另外 2 个全局变量 k and v 所以我得到这个
  • 如何将 Jinja 与 Twisted 一起使用?

    我正在计划使用 Python 与 Twisted Storm 和 Jinja 一起开发一个讨论软件 问题是 Jinja 不是为 Twisted 或异步套接字库而设计的 并且使用 Twisted 提供的性能是我不打算使用 Flask 的原因
  • __subclasses__ 没有显示任何内容

    我正在实现一个从适当的子类返回对象的函数 如果我搬家SubClass from base py 没有出现子类 subclasses 它们必须在同一个文件中吗 也许我从来没有直接导入subclass py对Python隐藏子类 我能做些什么
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • 为什么在 python 控制台中对 SparkSession.builder.getOrCreate() 的调用被视为命令行 Spark-submit?

    代替python console我正在尝试创建一个Spark Session 我没有使用pyspark以隔离依赖关系 为什么是spark submit命令行提示并生成错误 NOTE SPARK PREPEND CLASSES is set
  • pip:证书失败,但curl 有效

    我们在客户端安装了根证书 https 连接适用于curl 但如果我们尝试使用pip 它失败 Could not fetch URL https installserver 40443 pypi simple pep8 There was a
  • 使用 PIL 合并图像时模式不匹配

    我正在传递 jpg 文件的名称 def split image into bands filename img Image open filename data img getdata red d 0 0 0 for d in data L
  • 在Python中计算矩阵乘以其转置(AA^T)的最快方法

    在Python中将矩阵与其转置 AA T 相乘的最快方法是什么 我认为 NumPy SciPy 没有考虑使用例如时涉及的对称性 np dot or np matmul 得到的矩阵总是对称的 所以我可以想象有一个更快的解决方案 None
  • 矩阵求逆 (3,3) python - 硬编码与 numpy.linalg.inv

    对于大量矩阵 我需要计算定义为的距离度量 尽管我确实知道强烈建议不要使用矩阵求逆 但我没有找到解决方法 因此 我尝试通过对矩阵求逆进行硬编码来提高性能 因为所有矩阵的大小均为 3 3 我预计这至少会是一个微小的改进 但事实并非如此 为什么
  • mypy 错误:赋值中的类型不兼容(表达式的类型为“Dict[, ]”,目标的类型为“List[str]”)

    我尝试过了实例化一个空字典在现有字典的第二层上 然后为其分配一个键值对 但 MyPy 会抛出错误 这是一个最小的示例 当激活 MyPy 检查时它将重现它 result Test something result key result key
  • 张量流多元线性回归不收敛

    我正在尝试使用张量流训练具有正则化的多元线性回归模型 由于某种原因 我无法获取以下代码的训练部分来计算我想要用于梯度下降更新的误差 我在设置图表时做错了什么吗 def normalize data matrix averages np av
  • 应用程序的外观 - Py2exe / wxPython

    所以我的问题是我的应用程序的外观和感觉 因为它看起来像一个旧的外观应用程序 它是一个 wxPython 应用程序 在 python 上它运行良好并且看起来不错 但是当我使用 py2exe 将其转换为 exe 时 外观很糟糕 现在我知道如果你
  • 用于获取有关 SVN 存储库信息的 Python 库?

    我正在寻找一个可以从 SVN 存储库中提取 至少 以下信息的库 not工作副本 修订号及其作者和提交消息 每个修订版中的更改 添加 删除 修改文件 有Python库可以做到这一点吗 对于作者和提交消息 我可以解析 db revprops 0

随机推荐

  • 将 MBean 从 JBoss 4.x 移植到 JBoss 7

    我们目前正在将一些项目从 JBoss 4 x 移植到 JBoss 7 到目前为止 一切似乎都工作正常 除了 MBean 之外 我们通常使用 MBean 来提供简单的管理操作 我已经搜索了很长一段时间 但要么我无法提出正确的搜索词 要么我缺少
  • 在使用“with”子句的查询中使用 Laravel 的 toSql

    我正在 Laravel 工作 我有兴趣检查由包含 with 语句的 Eloquent 查询生成的 SQL 语句 由于某种原因 我只得到主要查询 例如 当我跑步时 class Child extends EloquentVersioned p
  • jQuery 选择列表删除所有选项

    我有一个
  • 如何在iOS项目中使用dylib库和hpp头文件?

    我已经获得了一个 dylib 库和一个 hpp 头文件 我应该在 Xcode 中的 iOS 项目中使用它们 我一直在网上查找 但所有答案都很简洁 没有具体的步骤可遵循 我只需将这些文件复制到我的项目中吗 如何在 Obj C 类中创建 使用库
  • 如何估计线程上下文切换开销?

    我正在尝试通过实时截止日期来提高线程应用程序的性能 它运行在 Windows Mobile 上并用 C C 编写 我怀疑高频率的线程切换可能会导致有形的开销 但既不能证明也不能反驳它 众所周知 缺乏证据并不是相反的证明 因此我的问题是双重的
  • iPhone UITableView:如何删除组样式表中各部分之间的间距?

    我正在创建一个表格视图 其中有 10 个部分 所有部分都有标题视图 但没有单元格 所以 简而言之 我的表视图将仅显示 10 个标题视图 任何部分都不会有单元格 现在 当我这样做时 该部分的标题视图之间有一些空间 我想删除那个空格 那可能吗
  • 在 Flutter 中显示几秒钟后没有执行操作按钮时关闭 AlertDialog

    我有一个 AlertDialog 弹出几秒钟 然后自动弹出 没有执行任何操作按钮 弹出后 会显示另一个AlertDialog 我怎样才能做到这一点 这是我的示例代码 初始化计时器以显示第一个对话框 timerToShowFirstDialo
  • AVFoundation,在预览层中剪掉边缘

    我正在开发一些 iOS 应用程序 我需要在其中进行一些相机扫描 这是我第一次体验 AVFoundation 之前我使用 UIImagePickerController 开发相机应用程序 但 AVFoundation 似乎更强大 问题是它会切
  • 使用 doPost 将文件上传到 Google Web Apps

    我正在尝试使用 doPost e 将文件上传到 Google Web App 如下所示 function doPost e var blob e parameter myFile DriveApp createFile blob 然后将文件
  • Intel x86 与 AMD x86 CPU 上的访问性能不一致

    我已经实现了一个带有结构内存布局数组的简单线性探测哈希图 该结构包含键 值和指示条目是否有效的标志 默认情况下 该结构体由编译器填充 因为键和值是 64 位整数 但该条目仅占用 8 个布尔值 因此 我也尝试以未对齐访问为代价来打包结构 由于
  • 使用 pdfnet 下划线会导致不同的线条粗细

    我用来为所选文本添加下划线的代码 我开始调用 addUnderline 方法 其他方法是辅助方法 private pdftron SDF Obj CreateUnderlineAppearance pdftron PDF Rect bbox
  • Python 和 numpy:从 1 维数组中逐行减去 2 维数组

    在python中 我希望从1维数组中逐行减去2维数组 我知道如何使用 for 循环和索引来完成此操作 但我认为使用 numpy 函数可能会更快 但是我没有找到办法做到这一点 这是一个带有 for 循环的示例 from numpy impor
  • 文件 -> 在 MonoDevelop 中打开网站?

    我无法在 MonoDevelop 中打开现有网站 我尝试了各种选择但没有成功 有什么办法可以做到这一点吗 Visual Studio 有这个功能并且运行得很好 但我想在我当前的项目中尝试使用 MonoDevelop MonoDevelop
  • 在 Linux 中如何判断哪个进程向我的进程发送了信号

    我有一个java应用程序SIG TERM 我想知道发送这个信号的进程的pid 那可能吗 两种 Linux 特定的方法是SA SIGINFO http www kernel org doc man pages online pages man
  • 如何获得 TreeNodes 的 TreeView 行为,当您检查一个 TreeNodes 时,它会检查其所有子 TreeNodes?

    这与大多数应用程序的行为方式相同 我认为 TreeView 默认情况下是这样工作的 有没有办法做到这一点 或者我是否必须获取已检查的 TreeNode 的所有子节点并自己检查它们 这是winform 你需要自己做 但另一方面这并不难 pri
  • 块范围内没有链接?

    块中声明的所有变量是否都 无链接 例如 1 如果我声明一个静态变量 void foo static int i 它有内部联系还是没有联系 如果没有链接 那为什么要使其静态呢 2 如果我使用 extern 会发生什么 global scope
  • 检测迭代器是否会被消耗

    是否有一种统一的方法来知道迭代是否会消耗可迭代对象 假设你有一个特定的函数crunch它要求一个可迭代对象作为参数 并多次使用它 就像是 def crunch vals for v in vals chomp v for v in vals
  • 便携式 JPA 批量/批量插入

    我刚刚开始使用其他人编写的一个功能 该功能似乎效率稍低 但我对 JPA 的了解并不足以找到非 Hibernate 特定的可移植解决方案 简而言之 在循环中调用的 Dao 方法插入每个新实体会执行 entityManager merge ob
  • 删除具有多个 ul 的特定列表样式[重复]

    这个问题在这里已经有答案了 举个例子 我有两个列表 1st ul li TEST 1 li li TEST 2 li li TEST 3 li li TEST 4 li li TEST 5 li li TEST 6 li li TEST 7
  • Pytorch 数据加载器:错误的文件描述符和 EOF > 0

    问题描述 在使用由自定义数据集制作的 Pytorch 数据加载器进行神经网络训练期间 我遇到了奇怪的行为 数据加载器设置为workers 4 pin memory False 大多数时候 训练都顺利完成 有时 训练会随机停止 并出现以下错误