澄清使用多个 GPU 时的批量大小

问题描述 投票:0回答:1

观看此视频后在此处输入链接描述(仅需要时间戳 00:25 秒 - 1:20 秒),我想确认必须传递给数据加载器的批量大小。 视频指出“有效批量大小” = 批量大小 * 无 GPU * 无节点。我想确认是否必须将“有效批量大小”或“批量大小”传递给数据加载器。

例如,如果我有 2 个 GPU 和 1 个节点,并且希望传递 512 的批处理大小(为了这个示例,假设模型要求批处理大小为 512。由于我从事自我监督学习工作,其中一些模型需要大批量)。

那么我的数据加载器应该设置为,

trainloader = DataLoader(... , batch_size = 1024)

trainloader = DataLoader(... , batch_size = 512)

第一种情况,闪电会自动将1024个批次分成512个并传递给每个GPU吗?而在第二种情况下,闪电会按原样获取 512 并将其传递给每个 GPU 吗?

此示例的闪电训练器,

trainer = pl.Trainer(..., devices = 2, num_nodes = 1)

同样,在考虑多个节点(例如 2 个节点和 2 个 GPU)时,也以同样的方式工作吗?

我应该将“有效批量大小”还是“批量大小”传递给

DataLoader

deep-learning pytorch-lightning
1个回答
0
投票

这是您两个选择中的后者。 DataLoader 中的

batch_size
指定每个 GPU 一次将处理多少个样本。 “有效批量大小”是一次前向传递中所有 GPU 处理的样本总数。闪电自动处理数据分发:

如果您使用 2 个 GPU 设置

batch_size=512

  • 每个 GPU 处理 512 个样本
  • effective_batch_size
    = 512 × 2 = 1024 个样本总数
© www.soinside.com 2019 - 2024. All rights reserved.