PP-Detection Logs(2021.12.17)
1. 记录——运算效率(对比Pytorch 1.7)
1.1. 单次epoch的运算时间(以Yolo v3为例)
- Image-size:2432*2040
- Batch-size:4 images
- Epoch-size:897 images
- Epoch-train_size:717 images
- Epoch-test_size:180 images
- Worker:1
这里说明一下,Paddle在开大于1个worker时会出现训练中断,有类似“dataloder worker exited unexpectedly”的报错。而Pytorch不会这问题。所以为了对比的有效性,这里num_workers都设置为1。
Frame | Train time (s) | Test time (s) |
---|---|---|
Pytorch 1.7 | 80±10 | 12±2 |
Paddle 2.2 | 605±10 | 20±2 |
截取了其中一次epoch的log截图:
很明显,同等超参情况下,Paddle的耗时远大于Pytorch。猜想有一部分原因来自于LoDTensor,但应该不是根本原因。具体根源来自于哪?目前不得而知,后续深入使用后,希望可以找到。
1.2. GPU显存使用量与GPU占用率(以Yolo v3为例)
处理同样规模的数据量时,Paddle所使用的显存更多,但利用率很低。这就不难理解为什么会出现Paddle在训练时间上远大于Pytorch的现象。大概率是框架底层的问题。目前我还没有尝试更多的模型来对比,所以不能下一个准确的结论。待验证… …
Frame | GPU Memory-Usage | GPU-Util |
---|---|---|
Pytorch 1.7 | 5687m | 0%~45% |
Paddle 2.2 | 7723m | 0%~9% |
1.3. 同等epoch限定下的mAP对比(以Yolo v3为例)
配置同样的超参,且warmup都设为10。同样运行33次epoch后,对比mAP的峰值。Paddle不如Pytorch表现得好。不过实验仍在继续,将运行500次epoch后再终止,届时再观察二者的变化。就目前来看,Paddle前期训练效果不尽人意。
Frame | Best mAP | Last(33) mAP |
---|---|---|
Pytorch 1.7 | 36.65% | 28.58% |
Paddle 2.2 | 16.67% | 15.17% |