观看此视频后在此处输入链接描述(仅需要时间戳 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
这是您两个选择中的后者。 DataLoader 中的
batch_size
指定每个 GPU 一次将处理多少个样本。 “有效批量大小”是一次前向传递中所有 GPU 处理的样本总数。闪电自动处理数据分发:
如果您使用 2 个 GPU 设置
batch_size=512
:
effective_batch_size
= 512 × 2 = 1024 个样本总数