当 shuffle=False 时,pytorch 数据加载器的批处理顺序是否会因设备而异?

时间:2021-08-01 16:39:50

标签: pytorch gpu google-colaboratory dataloader

我正在 colab 笔记本(GPU 运行时)中使用 shuffle=False 实例化一个 pytorch 数据加载器,如下所示:

image_data_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=False)

当我遍历数据加载器时,批处理顺序在给定的 colab 会话中是固定的(即,如果我重新实例化数据加载器,然后在不同单元格中遍历数据加载器,则批处理顺序匹配):

for batch_idx, (images, labels) in enumerate(image_data_loader): #…

但是,当我使用不同的运行时,批处理顺序经常会有所不同。我相信当设备类型不同(例如 Tesla V100 与 P100,根据 nvidia-smi)时,可能会发生变化,但我还没有进行足够广泛的测试,无法知道它是否总是归结为设备类型。

我使用的是 pytorch 1.9.0+cu102 和 CUDA 11.2。改变随机种子 (torch.manual_seed(random_seed), torch.cuda.manual_seed(random_seed)) 不会改变给定设备上数据加载器的批处理顺序——这表明不可能使用随机种子来修复跨设备的顺序。

带有 shuffle=False 的 pytorch 数据加载器确实可以使用不同的批处理订单进行实例化吗?如果是这样,有没有办法修复跨设备的批量订单?

0 个答案:

没有答案