1. 训练阶段加速
* 使用混合精度加速训练
推荐使用NVIDIA的APEX进行训练加速,在2060S显卡上,大约可以获得一倍的综合速度提升(显存使用减少,可以适当增加batchsize, 提高速度)。精度下降几乎察觉不到。APEX保存和加载的模型参数仍然是float32类型的,所以不用担心预训练模型重用的问题。使用起来也十分简单:https://nvidia.github.io/apex/
更多细节可以参考:https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html
直接使用FP16进行训练,会产生很多问题,需要针对性的手动优化。很麻烦,不建议这么做。
* 平衡数据预处理的计算量
数据加载阶段的提速也很重要。如果发现自己的显存使用率较高,但GPU计算利用率一直不高(比如50%就算偏低了),然而此时CPU利用率标高,应该考虑是不是在数据加载阶段卡脖子了。数据加载阶段的图像处理计算量和数据量都应该适当控制。尽量不要让GPU计算闲置。也可将CPU做的图像处理搬到GPU上。
参考更多内容:https://www.zhihu.com/question/356829360
2. 推理阶段加速
* 使用FP16进行计算
推理阶段使用FP16进行计算,能够明显减少带宽,并提高速度。在2060S显卡上,大约可以获得30%左右的速度提升。而推理精度损失几乎难以察觉。pytorch中对数据和模型进行half()即可实现。
* 使用TensorRT加速
使用NVIDIA的TensorRT进行模型转换,可以获得1~3倍的速度提升(具体看显卡和模型)。详情参考https://developer.nvidia.com/tensorrt
更多细节可以参考:https://docs.nvidia.com/deeplearning/sdk/#inference
(nvidia文档很不错,建议多看看,了解细节。显卡虽贵,服务到位~)
3. 缺陷样本自动生成
* 相同的应用场景,建立缺陷样本库,获取无缺陷样本后进行缺陷融合,自动产生训练样本
4. 硬件方案选择
选择显卡也很重要:(TODO)
5. 数据增强