parallel-processing - Pytorch:将同一批数据发送到多个 GPU,并在每个 GPU 上单独执行操作
问题描述
我有相同的数据加载器来向 4 个模型提供数据,每个模型都在单独的 GPU 上加载不同的超参数。我想减少数据加载造成的瓶颈,所以我打算在所有 GPU 上加载由数据加载器准备的同一批,以便它们单独计算并执行反向传播步骤。我已经将数据缓存到 RAM 中以避免在实例化数据加载器时出现磁盘瓶颈。
我在尝试着:
- 将同一批数据发送/广播到N个GPU。我想这只有在我们可以同步/等待所有 GPU 完成一个批次的操作,然后才能继续下一个的情况下才有可能。
- 奖励:一旦一个批次准备好(最多 P 个批次)就预取下一个批次可以帮助确保数据连续流向 GPU,避免等待。
我不想达到:
类似的问题:
- 这个是关于跨多个 GPU 进行 Conv2D 操作
- 这个是关于并行执行不同的 GPU 计算,但我不知道我的问题是否可以用torch.cuda.Stream()解决
- 这个是关于加载不同的模型,但它不处理共享同一个批次。
- 这正是我要问的,但它是 CUDA/PCIe 和 7 年前的。
更新:
我在 Pytorch中发现了一个非常相似的问题,讨论最后有一个使用多处理的正向道具的小例子,但我想知道如何将这种方法扩展到火炬数据加载器。
解决方案
推荐阅读
- reactjs - 如何在 Vite 配置中更改 antd 主题?
- web-scraping - 来自 Airbnb 的 Webscraping RequestGet 无法正常工作
- javascript - 我可以让用户将本地文件设置为 javascript 中 div 的背景图像吗
- azure - 如何从 AKS pod 收集 Windows 事件日志(系统事件日志、应用程序事件日志)?
- javascript - webpack 中的多编译器和多入口点有什么区别?
- flutter - Dynamic list not maping from json Data
- laravel - How can I get data in Laravel Eloquent where a field is not equal to a zero decimal value?
- django - 如何在 Django 模板中的 if 语句标记中使用查询结果
- python - requests.get not giving any response
- c# - C# Invovke Camera SDK, get PTZ_PRESET_LIST