SimpleDet目标检测框架性能基准测试与分析
1. 测试平台配置
SimpleDet作为一款高效的目标检测框架,其设计初衷之一就是在相对廉价的硬件平台上实现高性能。本次基准测试使用了两种不同配置的硬件平台:
P1平台(约1万美元配置)
- CPU:2颗Intel Xeon E5-2682 v4
- 内存:220GB
- GPU:8块NVIDIA 1080Ti
- 拓扑结构:单根PCI-E
- 软件环境:Ubuntu 16.04 + CUDA 9.0 + cuDNN 7.5.0 + NCCL 2.4.2
- 使用pip环境
P2平台(约2万美元配置)
- CPU:2颗Intel Platinum 8163
- 内存:377GB
- GPU:8块NVIDIA 2080Ti
- 拓扑结构:双根PCI-E(GPU间通信速度低于E5V4)
- 软件环境:Ubuntu 16.04 + CUDA 10.0 + cuDNN 7.5.0 + NCCL 2.4.2
- 使用conda环境
2. 测试框架版本
本次对比测试了三个主流目标检测框架的性能表现:
- SimpleDet:基于MXNet框架开发,测试版本为simpledet@2d8144 + mxnext@896aa1 + mxnet@24cce9e
- maskrcnn-benchmark:基于PyTorch框架,测试版本为maskrcnn-benchmark@24c8c9 + pytorch1.1 + torchvision0.3.0
- mmdetection:同样基于PyTorch框架,测试版本为mmdetection@cda5fd + pytorch1.1 + torchvision0.3.0
3. 测试方法与命令
3.1 SimpleDet测试命令
P1平台测试命令:
# 测试RetinaNet(FP32精度)
python detection_train.py --config config/retina_r50v1_fpn_1x.py
# 测试Faster R-CNN(启用nnvm_rpn_target优化)
python detection_train.py --config config/faster_r50v1_fpn_accel_1x.py
# 测试Mask R-CNN(启用nnvm_rpn_target优化)
python detection_train.py --config config/mask_r50v1_fpn_1x.py
P2平台测试命令(增加FP16混合精度测试):
# 测试RetinaNet(FP32/FP16精度)
python detection_train.py --config config/retina_r50v1_fpn_1x.py
# 测试Faster R-CNN(启用nnvm_rpn_target优化,FP32/FP16精度)
python detection_train.py --config config/faster_r50v1_fpn_accel_1x.py
# 测试Mask R-CNN(启用nnvm_rpn_target优化,FP32/FP16精度)
python detection_train.py --config config/mask_r50v1_fpn_1x.py
3.2 其他框架测试命令
其他框架的测试命令类似,主要区别在于:
- 使用不同的启动脚本
- 对于FP16测试需要特别指定参数
- 在conda环境下需要限制OMP_NUM_THREADS以避免CPU资源争用
4. 性能测试结果
所有测试均采用ResNet-50作为骨干网络,小模型更能反映框架在数据加载和参数同步方面的性能极限。除非特别说明,测试采用8卡GPU,总batch size为16。
4.1 P1平台FP32精度测试
| 模型 | SimpleDet | mmdetection | maskrcnn-benchmark | |------|-----------|-------------|-------------------| | RetinaNet | 43.4 img/s (369ms) | 36.2 img/s (442ms) | 44.2 img/s (362ms) | | Faster R-CNN w/ FPN | 43.0 img/s (372ms) | 32.8 img/s (488ms) | 41.9 img/s (382ms) | | Mask R-CNN w/ FPN | 35.1 img/s (456ms) | 24.7 img/s (648ms) | 30.2 img/s (530ms) |
4.2 P2平台FP32精度测试
| 模型 | SimpleDet | mmdetection | maskrcnn-benchmark | |------|-----------|-------------|-------------------| | RetinaNet | 55.5 img/s (288ms) | 40.1 img/s (399ms) | 49.7 img/s (322ms) | | Faster R-CNN w/ FPN | 54.0 img/s (296ms) | 38.0 img/s (421ms) | 48.3 img/s (331ms) | | Mask R-CNN w/ FPN | 45.5 img/s (352ms) | 29.1 img/s (550ms) | 36.0 img/s (445ms) |
4.3 P2平台FP16混合精度测试
| 模型 | SimpleDet | mmdetection | maskrcnn-benchmark | |------|-----------|-------------|-------------------| | RetinaNet | 72.5 img/s (221ms) | 46.8 img/s (342ms) | NA | | Faster R-CNN w/ FPN | 70.2 img/s (228ms) | 41.8 img/s (383ms) | 47.5 img/s (337ms) | | Mask R-CNN w/ FPN | 58.1 img/s (275ms) | 31.1 img/s (515ms) | 34.8 img/s (460ms) |
4.4 单卡性能基准
单卡测试主要反映框架在数据加载方面的效率,括号内为数据加载时间:
| 模型 | SimpleDet | mmdetection | maskrcnn-benchmark | |------|-----------|-------------|-------------------| | Mask R-CNN w/ FPN | 313ms (0ms) | 360ms (40ms) | 331ms (12ms) |
5. 性能分析与结论
-
硬件性价比:SimpleDet在相对廉价的硬件平台上(1-2万美元)就能实现接近甚至超过其他框架在高端硬件上的性能表现。
-
框架效率:
- 在FP32精度下,SimpleDet在Mask R-CNN等复杂模型上表现尤为突出,相比mmdetection有约50%的性能优势
- 在FP16混合精度下,SimpleDet的性能优势进一步扩大,特别是在RetinaNet上达到72.5 img/s的吞吐量
-
数据加载优化:
- SimpleDet在数据加载方面表现出色,单卡测试中数据加载时间为0ms,说明其数据预处理流水线设计非常高效
- 相比之下,mmdetection在单卡测试中有40ms的数据加载时间,这可能成为多卡训练时的瓶颈
-
多卡扩展性:
- SimpleDet在多卡训练时展现出良好的扩展性,特别是在P2平台上,性能提升明显
- 其他框架在双根PCI-E拓扑结构下可能受到GPU间通信速度的限制
-
实际应用建议:
- 对于预算有限的团队,SimpleDet+P1平台组合提供了极高的性价比
- 当需要使用FP16混合精度训练时,SimpleDet的优势更加明显
- 对于Mask R-CNN等需要大量计算的任务,SimpleDet是更优的选择
总体而言,SimpleDet在保持高效性能的同时,对硬件要求相对较低,特别适合在实际生产环境中部署使用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考