PaddleRec icon indicating copy to clipboard operation
PaddleRec copied to clipboard

训练wide_deep模型时,设置num_workers,epoch内迭代次数反而变多了。

Open paynezhangpayne opened this issue 2 years ago • 2 comments

训练方式为readme中的动态图训练方式,数据集也是从Paddle官方下载的已处理数据slot_train_data_full,只用了part0来做测试。其他训练参数均为默认。 num_workers=0时,一个epoch内的迭代总次数为390: batch_id : 388 batch shape : 512 batch_id : 389 batch shape : 512 num_workers=2时,一个epoch内的迭代总次数为780: batch_id : 778 batch shape : 512 batch_id : 779 batch shape : 512 num_workers=5时,一个epoch内的迭代总次数为1950: batch_id : 3898 batch shape : 512 batch_id : 3899 batch shape : 512 num_workers=10时,一个epoch内的迭代次数为3900: batch_id : 3898 batch shape : 512 batch_id : 3899 batch shape : 512 单次迭代(1个batch数据)时间会变短,但迭代次数变多,整体训练时间会变长。 请帮忙看下这个问题,感谢!

paynezhangpayne avatar Apr 01 '23 09:04 paynezhangpayne

@paynezhangpayne 请问你解决这个问题了吗,我也发现了这个问题

ibarbecue avatar Nov 22 '24 02:11 ibarbecue

@paynezhangpayne https://www.paddlepaddle.org.cn/documentation/docs/zh/2.2/api/paddle/io/IterableDataset_cn.html#iterabledataset 在官方文档中找到num_workers 的解释:当 paddle.io.DataLoader 中 num_workers > 0 时,每个子进程都会遍历全量的数据集返回全量样本,所以数据集会重复 num_workers 次,如果需要数据集样本不会重复返回,可通过如下两种方法避免样本重复,两种方法中都需要通过 paddle.io.get_worker_info 获取各子进程的信息。

ibarbecue avatar Nov 22 '24 02:11 ibarbecue