You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Colab中PyTorch设置num_workers>0报错,求解决方法

解决Colab中PyTorch DataLoader num_workers>0报错的问题

第一步:获取真实错误信息

先按照错误提示将num_workers设为0重新运行,这样能看到完整的错误堆栈——多进程模式会掩盖具体报错,这是定位问题的核心前提。

第二步:修复Dataset中的变量引用错误

你的CustomDataset类__init__方法存在明显变量错误:

self.training = glob.glob(base_path+str('*.mp4'))

这里的base_path未加self.,属于未定义的全局变量,会直接抛出NameError。修改为:

self.training = glob.glob(self.base_path + '*.mp4')

第三步:处理Google Drive路径的多进程访问问题

Colab挂载的Google Drive在多进程模式下,子进程可能无法直接继承父进程的挂载上下文:

  • 确保启动DataLoader前Google Drive已完成挂载(Colab挂载后通常会持续有效,若动态挂载需保证子进程能访问)。
  • 避免在__init__中提前加载Drive文件到内存,尽量在__getitem__里延迟读取,减少跨进程资源共享冲突。

第四步:修复__getitem__的返回值问题

当前__getitem__在save=False时返回False, False,会导致DataLoader无法批量处理数据(期望的是张量或可统一处理的数据类型),可做如下调整:

  1. 提前过滤无效文件:在__init__阶段筛选出可处理的mp4文件,减少后续无效读取。
  2. 递归获取有效样本:
def __getitem__(self, idx):
    self.fileName = self.training[idx]
    self.filePath = self.fileName
    feature, save = makeFeature(self.filePath, self.fileName)
    if save:
        return feature, self.fileName
    else:
        # 递归获取下一个有效样本,需确保数据集至少有一个有效样本
        if idx + 1 < len(self.training):
            return self.__getitem__(idx + 1)
        else:
            raise ValueError("数据集无有效样本")
  1. 自定义collate_fn过滤无效样本:
def collate_fn(batch):
    # 过滤返回False的无效样本
    batch = [item for item in batch if item[0] is not False]
    if not batch:
        return None, None
    features = torch.stack([item[0] for item in batch])
    filenames = [item[1] for item in batch]
    return features, filenames

# 初始化DataLoader时指定collate_fn
dataloader = DataLoader(dataset, batch_size=9, shuffle=False, num_workers=1, collate_fn=collate_fn)

第五步:调整多进程与CUDA的兼容设置

使用spawn启动方式时,父进程的CUDA资源无法被子进程继承,需注意:

  • 所有CUDA操作(如makeFeature中的张量创建、模型推理)都在子进程内部初始化,不要在父进程提前创建CUDA张量。
  • 若makeFeature用到模型,确保每个子进程单独加载模型到CUDA,避免跨进程共享模型实例。

其他注意事项

  • 确保json、glob等依赖模块在全局作用域导入,不要仅在__init__方法内导入,否则子进程可能无法找到这些模块。
  • 避免用类变量或全局变量存储Dataset状态,尽量使用实例变量,减少跨进程状态冲突。

内容的提问来源于stack exchange,提问作者Pengu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:40:25