Created by: chenwhql
DataLoader多进程在实现后,在mnist,resnet,se_resnext,transformer,ptb五个models/dygraph目录下模型进行了可行性和速度测试,但是之前测试时,这几个模型均是示例性质的,不是根据完整公开数据集进行完整验证的版本。
目前models/dygraph下的transformer和mobilenet均使用DataLoader的单进程模式进行了完整训练,已验证DataLoader单进程模式在完整训练中的稳定性:
- transformer:添加了和静态图一致的shuffle机制,并使用完整数据集训练
- mobilenet:使用完整imagenet数据集进行训练
现在直接在这两个模型的基础上设置DataLoader(use_multiprocess=True)验证多进程DataLoader的稳定性,该PR解决在transformer中发现的问题::
问题: transformer训练中发现,在实现了完整的包含shuffle的reader后,reader的负担变重,导致DataLoader主进程Queue.get在原先设定的10s超时后,还没有拿到队列中数据,从而导致直接报错超时退出。
解决:但这里其实不能算是致命错误,再等一等就可以拿到数据,所以这里的超时机制不恰当,应该多尝试几次,如果一定次数之后还拿不到数据,再报错超时退出。因此这里将原先的10s超时,改为5s超时,尝试12次,12次之后仍失败,再超时退出,从而解决了该问题。
修改后在8卡P40机器上使用多进程DataLoader进行了完整30个epoch的训练,顺利完成,没有问题。