您的位置:首页 > 游戏 > 手游 > 网页设计师培训班合肥_最近高清免费资源_排名seo怎么样_什么叫seo网络推广

网页设计师培训班合肥_最近高清免费资源_排名seo怎么样_什么叫seo网络推广

2024/11/16 22:25:17 来源:https://blog.csdn.net/G_C_H/article/details/142832172  浏览:    关键词:网页设计师培训班合肥_最近高清免费资源_排名seo怎么样_什么叫seo网络推广
网页设计师培训班合肥_最近高清免费资源_排名seo怎么样_什么叫seo网络推广

【PyTorch】DataLoader 设置 num_workers > 0 时,出现 CUDA with multiprocessing 相关报错

  • 1 报错信息
  • 2 报错分析
    • 2.1 原因
    • 2.2 结论
  • 3 解决方法

1 报错信息

RuntimeError: Caught RuntimeError in DataLoader worker process 0.RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

2 报错分析

2.1 原因

Tensor 默认是在 CPU 上创建的,当我在数据集 Class 的 __getitem__() 中 return 时,将 Tensor 转移到了 GPU 上

return (color.to(self.device).type(self.dtype),depth.to(self.device).type(self.dtype),intrinsics.to(self.device).type(self.dtype),pose.to(self.device).type(self.dtype),# self.retained_inds[index].item(),
)

同时,我在 DataLoader 定义时,设置了 num_workers,导致数据在多进程加载时使用了 CUDA Tensor

data_loader = DataLoader(dataset, num_workers=dataset_config['num_workers'])# Iterate over Scan
for time_idx, batch in tqdm(enumerate(data_loader)):

2.2 结论

参考文档: Link

在这里插入图片描述

  • 不建议在多进程加载时返回 CUDA Tensor,因为在多进程中使用 CUDA 以及共享 CUDA Tensor 有一些要注意的点
  • 相反,可以使用 DataLoader 中的 pin_memory,将数据传输到共享内存中,然后再将 Tensor 转移到 CUDA GPU 上

3 解决方法

参考discuss: Link

修改数据集 Class 的 __getitem__(),在 return 时不将 Tensor 转移到 GPU 上。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com