使用DVCLiveLogger+PyTorch Lightning时批量大小不固定问题咨询
PyTorch Lightning训练step批量大小不固定的原因分析
以下是可能导致批量大小波动问题的核心原因:
采样器或数据集动态变化
若使用了WeightedRandomSampler这类非均匀采样器,或者数据集在每个epoch前会动态调整(比如数据增强时随机过滤样本、动态生成样本),每次采样得到的batch样本数就会出现波动。另外,开启shuffle=True但数据集总样本数本身不固定时,也会导致每个batch的大小无法保持一致。DataLoader参数配置问题
未设置drop_last=True时,若数据集总样本数不能被设定的batch size整除,最后一个batch会自动缩小。但如果所有step的batch大小都不稳定,大概率是数据集在每个epoch的总样本数有变化,而非单纯的最后一个batch问题。日志钩子中的数据修改操作
DVCLiveLogger本身不会影响batch大小,但如果在自定义的日志回调(比如on_train_batch_start)中对输入batch做了裁剪、过滤等操作,会导致传入模型的实际batch大小改变。检查日志相关代码是否有修改输入数据的逻辑。分布式训练的采样器差异
若使用多GPU分布式训练,DistributedSampler会将数据集划分到不同设备。当总样本数无法被GPU数量均匀分配时,部分GPU的样本数会略有差异,可能导致单GPU上的batch大小出现波动。不过这种情况通常只会在少数step出现,而非所有step都不稳定。
内容的提问来源于stack exchange,提问作者Saba Daftari
相关产品推荐
相关产品推荐

