我正在 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 数据加载器确实可以使用不同的批处理订单进行实例化吗?如果是这样,有没有办法修复跨设备的批量订单?